linux笔记6--shell相关

1. 查看当前的shell类型

命令:cat   /etc/passwd
在这里插入图片描述
在这里插入图片描述
由此可见,该系统终端的shell为bash
注:
① Debian -> dash     linux中的dash shell是什么
    Ubuntu -> bash
在这里插入图片描述
这里dash可以执行成功是因为Ubuntu也属于Debian
其它shell
③ shell的默认使用方式可以更改
④ ls -lF /bin/bash 执行后会发现这里实际上有一个软件 2022 /bin/bash*
    (bash本质上是一个软件,也是一个终端)
在这里插入图片描述

2. ps -f命令

显示进程列表及其详细信息。

3. 父子shell

① shell分为父shell和子shell
② 父shell -> 子shell 的过程类似于(ps -f 可以很清楚地看到它们之间的关系):
    孩子a
    父亲a 儿子b
    爷爷a 儿子b 孙子c
    以Ubuntu为例,bash一次相当于要一个小孩,再bash一次再要一个小孩
③ PPID指的是当前进程父亲的PID,或者说它是基于谁创建的

一个窗口运行了三个终端(3个bash),输入了三个exit才彻底退出在这里插入图片描述
父子shell是相对的。即PID=3536的bash是PID=3543的bash的父shell,PID=3543的bash同时又是PID=3551的bash的父shell。

4. 分号在命令里的作用

作用:分隔多个命令,使它们依次执行。跟’ | '作用一样
命令1 空格 分号 空格 命令2 空格 分号 空格 命令3 分号前后的空格表示分隔不同的命令
括号 命令1 空格 分号 空格 命令2 空格 分号 空格 命令3 括号 带括号意味着创建一个子shell去执行
例如:
在这里插入图片描述
①②的异同:
    相同点:执行结果一样
    不同点:1> ①没有生成一个子shell执行,②生成了一个子shell执行。2> ①的执行结果成为进程列表,②的不是。

问题:

问:为什么ls ; pwd ; cd / 执行完以后切换到了根目录,而(ls ; pwd ; cd / )却没有?
答:在第一个命令中,cd/ 意味着 cd 命令后跟着一个参数 /,表示切换到根目录。而在第二个命令中,(ls ; pwd ; cd/) 在括号内,这意味着括号内的命令将在子shell中执行。当子shell执行完毕后,不会影响当前shell的状态,所以在执行完 (ls ; pwd ; cd/) 后,你还停留在原来的目录,而不会切换到根目录。
问:(ls ; pwd ; cd / )既然生成了一个子shell执行,为什么ps -f 看不到这个进程?
答:在Unix-like系统中,ps -f 命令用于显示进程列表及其详细信息。当你在子shell中执行命令时,子shell本身会成为一个新的进程,但是它不会显示在外部shell的进程列表中,因为外部shell不直接管理子shell的执行。因此,虽然第二个例子中生成了一个子shell,但它不会被ps -f命令显示出来,因为ps -f只显示外部shell及其直接创建的进程列表。
问:什么叫进程列表?
答:进程列表指的是当前正在运行的所有进程的清单或列表。在操作系统中,每个正在运行的程序都是一个进程,这些进程可能是用户启动的应用程序、系统服务或操作系统本身的一部分。进程列表通常包含每个进程的标识符、状态、内存使用情况等信息,可以通过特定的系统命令或工具来查看。
问:为什么ls ; pwd ; cd / 生成的结果叫进程列表,(ls ; pwd ; cd / )生成的不叫?
答:第一个例子中,我们可能会将一系列命令看作一个整体,因为它们按顺序执行,就像列表中的项目一样。这种情况下,我们将这些命令的执行结果称为进程列表。而第二个例子中,命令被放在括号内,括号将这些命令分组在一个子shell中执行。这些命令的执行不会直接影响到外部的环境,所以我们不太倾向将它们称为进程列表。

环境变量echo:

命令:echo $BASH_SUBSHELL—检测有没有创建子shell执行。
例如:
在这里插入图片描述

5. sleep和jobs

sleep:

① sleep + 数字 --让终端休眠__秒后执行(倒计时)
② sleep + 数字& --让终端休眠__秒后执行,且这个过程在后台
③ man sleep 查看sleep说明文档
问:为什么要用sleep?
答:因为有时候我们需要程序在执行某些操作后暂停一段时间,或者在循环中添加一个延迟以控制程序的执行速度。

jobs:

① jobs – 看看谁在搞休眠
② jobs -l – 在jobs的基础上多显示了PID

例子:

在这里插入图片描述

&:

‘&’ – 把某个操作挂载后台执行,我们可以在当前页面做别的事情。例如:Windows解压压缩包时,我们点完解压之后,通常会把那个页面最小化(放在后台),然后去干别的事情。linux中输入(tar -zxvf … ; tar -zxvf … ; cp … )&就可以让解压操作在后台执行。

6. 外部命令和内建命令

        如图所示,输入ps -f 查看进程信息时,ps -f 也算一个进程(Windows任务管理器查看进程时,任务管理器本身也算一个进程),像ps -f 这种必须单独创建一个进程,在外部看内部的命令叫作外部命令;像cd这种不单独创建进程的,我们叫非外部命令(别名:内建命令)
在这里插入图片描述
在这里插入图片描述

图解外部命令

外部命令:站在一个更高的层次看shell里的东西,站在外边看里边的东西看的更清楚。
在这里插入图片描述
在这里插入图片描述

type命令

type + 命令名称:判断一个命令是外部命令还是内部命令
输出结果:命令名称 is /usr/bin/命令名称 – 外部命令
输出结果:命令名称 is a shell builtin – 内建命令
例如:
在这里插入图片描述

7. history命令

history命令–可以查看我们之前运行的所有命令(显示条数有上限)。它也是内建命令
② 执行history -> 显示:序号 + 命令 -> 输入!+序号,即可执行序号对应命令
③ !!:执行上一个命令
    !$:执行上一个命令
例如:
在这里插入图片描述
在这里插入图片描述
④ less .bash_history:以文件形式查看之前的命令
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8. alias命令

① alias命令–作用:起别名。好处:可以让我们缩写
② alias -p:显示全部已定义的别名
在这里插入图片描述
进一步理解alias:此处执行ll 时本质上是执行ls -alF;此处执行ls本质上是执行ls --color=auto(自动高亮)。补充:ls =‘ls --color=auto’ 是Ubuntu特有的,mac上就没有。
③ 创建属于自己的别名:alias 别名 = ’ 原来的命令’
    缺点:一旦退出当前的shell,就不可以使用了
例如:
在这里插入图片描述
注意:等号前后不要加空格
在这里插入图片描述

9. 推荐

frank的linux课教程 以上笔记全部来源于此

-----------------------------------未完待续...------------------------
---------------------------出现问题欢迎批评指正啊 ---------------------
  • 19
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值