第五章 理解shell
本章内容: 1)探究shell类型2)理解shell的父/子关系3)别出心裁的子shell用法4)探究内建的shell命令
5.1 shell的类型
个人的用户配置:系统启动什么样的shell程序. /etc/passwd
默认的交互shell在某个控制端应用程序或在GUI中运行终端仿真器时启动
$ exit退出shell程序
5.2 shell的父子关系
注: 当输入bash.生成子shell的时候, 你是看不到任何相关的信息, 因此需要另一个命令帮助我们理清这一切 $ ps —forest
$ ps -f 查看当前创建的shell的状态
$ bash 创造一个子的shell程序
$ ps -f的 PPID可以查看PID的父程序
用$ man bash 查看关于bash的手册
5.2.1 进程列表
一行指定依次运行的一系列指令
$ pwd ; ls ; cd /etc ; pwd ; cd ; pwd; ls (分号分割)
进程列表: $ ( pwd ; ls ; cd /etc ; pwd ; cd ; pwd; ls )
进程列表: 命令分组 commanding grouping, 另一个命令分组是将命令放入花括号中, 尾部放入;
语法为 { command; }
进程列表可以创建子shell, { command } 不可以创建shell
每一个() 都创建一个子shell: (pwd; ls ; cd /etc ; pwd ; cd ; pwd ; ls ; echo $BASH_SUBSHELL)
在shell脚本中, 经常使用子shell进行多进程处理。但采用子 shell的成本不菲,会明显拖慢处理速度。
5.2.2 别处心裁的子shell用法
交互的shell CLI: 进程列表, 协程和管道都采用了子shell
探索后台模式
后台模式: 运行命令可以在处理命令的同时让出CLI
命令置于后台 &
$ sleep 20&
[1] 21447【第一条显示在方括号中的后台作业号;第二条是后台作业的进程ID】
$jobs 显示后台作业情况
只显示后台的作业
[2]+Runningsleep 20 &
$ jobs -l 查看更多命令
2. 将进程列表置入后台【( pwd; ls ; (echo $BASH_SUBSHELL)) 进程列表】
3.协程
作用 : 后台生成一个子shell, 并在这个子shell中执行命令
$ coproc sleep 10
扩展语法
$ coproc My_Job { sleep 10; }
5.3 理解shell的内建命令
5.3.1 外部命令
外部命令: 文件系统命令, 是存在于bash shell之外的程序, 不是shell程序的一部分
位置: /bin , /usr/bin, /sbin 或者/usr/sbin
$ which ps 或者 $ type -a ps
当外部命令执行的时候会创建一个子进程,(forking)
5.3.2 内建命令
内建命令和外部命令的区别在于前者不需要使用子进程来执行
$ type cd
//内建命令执行速度要更快,效率也要更高
$ type -a echo
//echo is a shell bulitin. //echo is /bin/echo
$ echo 有内建命令和外部命令
使用外部文命令就需要使用
/bin/pwd
1.使用history命令
bash shell会跟踪你的命令,使用history搜索到全部的命令, 同时可以唤回所有的命令并重新使用
$ history
$ !!唤出刚刚使用的那条命令
$ !(Number) 可以使用之前使用的命令
2.命令别名
$ alias -p