第五章 理解shell

shell的类型
shell的父子关系
shell的用法
shell的内建命令

5.1 shell 的类型

cat /etc/passwd
/bin/bash(bash shell)
ash shell的Debian版
对bash shell脚本来说,有两种不同的shell(默认的交互shell和默认的系统shell)
exit 退出shell

5.2 shell的父子关系

用于登录某个虚拟控制器终端或在GUI中运行终端仿真器时所启动的默认的交互shell,是一个父shell。
在CLI提示符后输入 /bin/bash 命令或其他等效的 bash 命令时,会创建一个新的shell程序。这个shell程序被称为子shell(child shell)。子shell也拥有CLI提示符,同样会等待命令输入。当输入 bash 、生成子shell的时候,你是看不到任何相关的信息的,因此需要另一条命令帮助我们理清这一切。

5.2.1 进程列表

你可以在一行中指定要依次运行的一系列命令。这可以通过命令列表来实现,只需要在命令之间加入分号(;)即可。

$ (pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls)

进程列表是一种命令分组(command grouping)。另一种命令分组是将命令放入花括号中,并在命令列表尾部加上分号(;)。语法为 {command; } 。使用花括号进行命令分组并不会像进程列表那样创建出子shell。

echo $BASH_SUBSHELL 。如果该命令返回 0 ,就表明没有子shell。如果返回
1 或者其他更大的数字,就表明存在子shell。

后台:
要想将命令置入后台模式,可以在命令末尾加上字符 &
jobs 命令来显示后台作业信息
iobs -l 显示PID
sleep n 进程等待(睡眠)的秒数。这个命令在脚本中常
用于引入一段时间的暂停.

将相同进程列表置入后台模式
$ (sleep 2 ; echo $BASH_SUBSHELL ; sleep 2)&

使用 tar 创建备份文件是有效利用后台进程列表的一个更实用的例子。
$ (tar -cf Rich.tar /home/rich ; tar -cf My.tar /home/christine)&

5.2.2协程:

协程可以同时做两件事。它在后台生成一个子shell,并在这个子shell中执行命令。 要进行协程处理,得使用 coproc命令,还有要在子shell中执行的命令。

coproc ls
coproc My_Job { sleep 10; } --扩展语法,必须确保在第一个花括号( { )和命令名之间有一个空格。还必须保证命令以分号(;)结尾。另外,分号和闭花括号( } )之间也得有一个空格。

5.3 内建命令,外部命令

外部命令,有时候也被称为文件系统命令,是存在于bash shell之外的程序。它们并不是shell程序的一部分。外部命令程序通常位于/bin、/usr/bin、/sbin或/usr/sbin中

当外部命令执行时,会创建出一个子进程。这种操作被称为衍生(forking)。外部命令 ps 很方便显示出它的父进程以及自己所对应的衍生子进程。

type ps
which ps
type cd

内建命令和外部命令的区别在于前者不需要使用子进程来执行。它们已经和shell编译成了一体,作为shell工具的组成部分存在。不需要借助外部程序文件来运行。

有些命令有多种实现。例如 echo 和 pwd 既有内建命令也有外部命令。两种实现略有
不同。要查看命令的不同实现,使用 type 命令的 -a 选项。

type -a 显示出了每个命令的两种实现
which 命令只显示出了外部命令文件。

history:通常历史记录中会保存最近的1000条命令

输入 !! ,然后按回车键,就能够唤出刚刚用过的那条命令来使用。
命令历史记录被保存在隐藏文件.bash_history中,它位于用户的主目录中。

你可以唤回历史列表中任意一条命令。只需输入惊叹号和命令在历史列表中的编号即可
!50

alias 命令是另一个shell的内建命令。命令别名允许你为常用的命令(及其参数)创建另一个名称,从而将输入量减少到最低。因为命令别名属于内部命令,一个别名仅在它所被定义的shell进程中才有效

查看当前可用的别名:
alias -p

创建别名:
alias li=‘ls -li’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值