您的位置:首页 > 运维架构 > Shell

《Linux命令行与shell脚本编程大全》- 读书笔记3 - 理解shell

2017-08-31 22:50 183 查看
当用户登录终端的时候,通常会启动一个默认的交互式shell。系统究竟启动哪个shell,这取决于用户配置。一般这个shell都是/bin/shell。默认的系统shell(/bin/sh)用于系统shell脚本,如那些在系统启动时运行的脚本。

用于登录某个虚拟控制器终端或在GUI中运行终端仿真器时所启动的默认的交互shell,是一个父shell。在CLI提示符后输入/bin/bash命令或其他等效的bash命令时,会创建一个新的shell程序。这个shell程序被称为子shell

使用
$ps --forest
查看这种嵌套bash进程的关系。

后台模式中运行命令可以在处理命令的同时让出CLI,以供他用。要想将命令置入后台模式,可以在命令末尾加上字符&。

除了ps命令,也可以使用jobs命令来显示后台作业信息。-l选项还可以显示PID。

在CLI中运用子shell的创造性方法之一就是将进程列表置于后台模式。你既可以在子shell中进行繁重的处理工作,同时也不会让子shell的I/O受制于终端。例如:
$(tar -cf Rich.tar /home/rich ; tar -cf My.tar /home/christine)&


协程可以同时做两件事。它的后台生成一个子shell,并在这个子shell中执行命令。使用coproc命令进行协程处理。例如:
$coproc sleep 10
。除了会创建子shell之外,协程基本上就是将命令置入后台模式。

协程与进程列表结合起来产生嵌套的子shell。例如:
$coproc ( sleep 10 ; sleep 20)


外部命令,有时候也被称为文件系统命令,是存在于bash shell之外的程序。外部命令程序通常位于/bin,/usr/bin,/sbin,/usr/sbin中。当外部命令执行时,会创建一个子进程。这种操作被称为衍生(forking)。

内建命令就是shell工具的一部分,不需要使用子进程来执行。
$type cd
cd和exit命令都内建于bash shell。可以用type命令来了解某个命令是否是内建的。
$type -a pwd
有的命令有多种实现,可以用type命令的-a选项来查看多种实现。注意
$shich pwd
只显示出了外部命令文件。

一个有用的内建命令是history命令。环境变量$HISTSIZE指定保存的历史命令数量。

$!!
显示并执行上次执行的那条命令。

命令历史记录被保存在隐藏文件.bash_history中。要注意的是,bash命令的历史记录是先存放在内存中,当shell退出时才被写入到历史文件中。

alias命令是另一个shell的内建命令。命令别名允许你为常用的命令及其参数创建另一个名称,从而将输入量减少到最低。Linux发行版可能已经为你设置好了一些常用命令的别名,使用
$alias -p
查看。
$alias gs='git status'
创建别名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: