Linux命令行与Shell脚本编程(五)
声明:本文为看书后的个人笔记,如有转载或引用请先跟作者说明用意。
5.2shell的父子关系(p88)
在CLI提示符输入/bin/bash命令或者其他等效的bash命令时,会创建一个新的shell程序。这个shell程序被称为子shell。
由此可以看出,输入bash之后一个子shell就出现了,而ps f -f 命令也是在子shell中执行的。
bash命令行参数
参数
描述
-c string -->从string中读取命令并进行处理
-i -->启动一个能够接受用户输入的交互shell
-l -->以启动shell的形式启动
-r -->启动一个受限shell,用户会被限制在默认目录中
-s -->从标准输入中读取命令
可以输入man bash 获得关于bash命令的更多帮助信息。
5.2.1进程列表(P91)
命令列表:只需要在命令之间加入分号(;)即可
进程列表:是一种命令分组,语法为{ command; }
环境变量: $BASH_SUBSHELL,如果该命令返回为0,就表明没有子shell。反之表明有子shell。
5.2.2别出心裁的子shell用法(P93)
探索后台模式
sleep命令:接受一个参数,该参数是你希望进程等待(睡眠)的秒数
将命令置入后台模式,可以在命令末尾加上字符(&)
例:sleep 3000&
jobs命令:显示出当前运行在后台模式中的所有用户的进程(作业)。
-l:可以得到更多相关信息。
协程:可以同时做两件事。它在后台生成一个子shell,并在这个子shell中执行命令。基本上就是将命令置于后台模式。
coproc命令:创建一个后台作业
例:coproc my_job{ sleep 10; } -->给进程起一个叫my_job的名字,并置于后台模式。
5.3理解shell的内建命令
5.3.1外部命令
外部命令有时也被称为文件系统命令,是存在与bash shell之外的程序。
外部命令程序通常位于/bin、/usr/bin 、/sbin、/usr/sbin中。
which:查找并显示给制定命令的绝对路径。
type:显示指定命令的类型,判断给出的指令是内部指令还是外部指令。
当外部命令执行时,会创建一个子进程,这种操作被称为衍生。
5.3.2内建命令
内建命令和外部命令的区别在于前者不需要使用子进程来执行。他们已经和shell编译成了一体,作为shell工具的组成部分存在。不需要借助外部程序文件来运行。
对于多种实现的命令,如果想要使用其外部命令实现,直接指明对应的文件就可以
例如:使用pwd ,可以输入/bin/pwd。
history命令:列出最近1000条指令
使用!!显示出从shell的历史纪录中唤回的命令。然后执行该命令。
命令历史纪录被保存在隐藏文件.bash_history中,它位于用户的主目录中。
history -a -->强制将命令历史纪录写入.bash_history中。
history -n -->强制重新读取.bash_history文件。
!20 -->将编号20的历史命令取出并执行。
命令别名:
alias:是另一个shell的内建命令,允许将命令创建另一个名称
alias -p -->查看当前可用的别名。