shell的类型
- 查看用户所用的shell程序,在/etc/passwd 文件中的第七个字段(好像就是最后一个,主要是bash shell)
- 还有一个默认shell是/bin/sh,它作为默认的系统shell,用于那些需要在启动时使用的系统shell脚本
- 系统默认shell不一定和用户的一致(Ubuntu,它的默认shell是dash shell)
shell的父子关系
![](https://i-blog.csdnimg.cn/blog_migrate/d46cbc2ca8e3310d5d32f31af00ead23.png)
第一次使用ps -f 的时候,显示出了两个进程,有一个id是12546运行的是bash shell,而另一个进程(12587)对应的是ps -f
![](https://i-blog.csdnimg.cn/blog_migrate/10fc4429ed9cab02873f68cc0bfa3bed.png)
在子shell中可以继续创建子shell。可以通过exit来退出子shell。
进程列表
我们可以在一行中指定要依次执行的一系列命令,命令之间通过(;)即可。
![](https://i-blog.csdnimg.cn/blog_migrate/c1cf57e3aa2312e20b0019fe861957d7.png)
注:pwd当前路径
但这个并不是进程列表,如下图,现在仍然只有两个进程,没有产生新子shell。下面添加了“()”产生了新的进程。判断是否生成子shell,需要借助环境变量命令 echo $BASH_SUBSHELL(注:SUBSHELL就是子shell),返回0就没有子shell,大于1就是有子shell,返回的数字就是子shell的个数。 子shell中可以调用子shell,如:(pwd ; (ls ;cd /etc/ ;pwd ; cd ;echo $BASH_SUBSHELL)),这样就调用了两个子sheell.
![](https://i-blog.csdnimg.cn/blog_migrate/5afad513de13e5ff4762ac7d5a5c526e.png)
- 子shell使用
sleep 命令,用法:sleep 10 会将会话暂停10秒。在命令末尾加上“&”字符,是将命令置入后台模式,我们可以通过ps -f 来查看。也可以通过jobs来查看,显示在后台模式中的所有用户进程。通过jobs -l可以查看进程的PID。
协程(coproc):它在后台生成一个子shell,并在这个子shell中执行命令。
扩展语法“{}”:必须在第一个"{"和命令之间加一个"空格",命令结束后以分号";"结束,另外分号和"}"之间也要有空格。
生成子shell的成本比较高,而且速度还慢。
type -a 每个命令的实现,which命令只显示出外部命令文件。调用外部命令方法指明文件即可。如:pwd ,可以通过/bin/pwd来实现外部命令。
history:查看最近用过的命令列表。通常记录1000条。"!!"可以换出刚刚执行命令并执行。
所有的命令都保存在 ".bash_history"中,但是你要退出才会保存,我们可以通过history -a 来强制保存。
我们可以通过,"!数字"来调用这个命令。
![](https://i-blog.csdnimg.cn/blog_migrate/dfb9c8ece8b381db0bd265722be8f088.png)
- 命令别名(alias):
alias -p 来查看当前的命令别名
alias li='命令'来创建自己的别名。
如:alias ll='ls -l',下次可以直接通过"ll"来使用。