第五章 理解shell

2017-08-07  本文已影响16人  1e42ed00ff39

本章内容: 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

上一篇下一篇

猜你喜欢

热点阅读