【读书笔记】Linux命令行与Shell脚本编程大全--理解shell

1.shell的类型

系统启动什么样的shell程序取决于你个人的用户ID配置。在**/etc/passwd文件中,在用户ID记
录的
第7个字段**中列出了默认的shell程序。
如:
在这里插入图片描述

2.shell的父子关系

何为父shell?

用于登录某个虚拟控制器终端或在GUI中运行终端仿真器时所启动的默认的交互shell,是一个父shell。

何为子shell?

在CLI提示符后输入/bin/bash命令或其他等效的bash命令时,会创建一个新的shell程序。这个shell程序被称为子shell(child shell)。

简易理解:第一个你看到的shell即是父shell,在父shell上执行或产生的第二/n个shell即是子shell。仅限于理解。

子shell(child shell,也叫subshell)可以从父shell中创建,也可以从另一个子shell中创建。

在这里插入图片描述
在生成子shell进程时,只有部分父进程的环境被复制到子shell环境中。这会对包括变量在内的一些东西造成影响。
在这里插入图片描述

2.1 进程列表

命令列表是指在一行中指定要依次运行的一系列命令。这系列命令采用分号分隔。
如: pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls
何为进程列表
将命令列表用括号包含起来即成了进程列表。

note1:括号的加入使命令列表变成了进程列表,生成了一个子shell来执行对应的命令。
note2:进程列表是一种命令分组(command grouping)。另一种命令分组是将命令放入花括号中,并在命令列表尾部加上分号(;)。语法为{ command; }。使用花括号进行命令分组并不会像进程列表那样创建出子shell。 如:{ pwd; echo $BASH_SUBSHELL;} 请注意每条命令前面都存在一个空格

如何查看是否存在子shell?

echo $BASH_SUBSHELL

该命令返回0,则表明没有子shell;
返回1或者更大的数字, 就表明存在子shell。

2.2 别出心裁的子shell用法

后台模式
要想将命令置入后台模式,可以在命令末尾加上字符&jobs命令来显示后台作业信息

将进程列表置入后台
既可以在子shell中进行繁重的处理工作,同时也不会让子shell的I/O受制于终端。

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

note:记住,生成子shell的成本不低,而且速度还慢。创建嵌套子shell更是火上浇油!
在命令行中使用子shell能够获得灵活性和便利。要想获得这些优势,重要的是理解子shell的
行为方式。

3.理解shell的内建命令

外部命令:
外部命令,有时候也被称为文件系统命令,是存在于bash shell之外的程序。它们并不是shell
程序的一部分。外部命令程序通常位于/bin、/usr/bin、/sbin或/usr/sbin中。
当外部命令执行时,会创建出一个子进程。这种操作被称为衍生(forking)。外部命令ps很
方便显示出它的父进程以及自己所对应的衍生子进程。
在这里插入图片描述
内建命令
内建命令和外部命令的区别在于前者不需要使用子进程来执行。它是bash shell的一部分,不需要借助外部程序来允许。
如何判断是否是内建命令?
1:根据内建命令的定义。即是bash shell的一部分。
2:type命令可查询。
在这里插入图片描述
内建命令既不需要通过衍生出子进程来执行,也不需要打开程序文件,内建命令的执行速度要更
快,效率也更高。

note:

有些命令有多种实现方式。例如echo等命令既有内建命令也有外部命令。
要查看命令的不同实现,使用type命令的-a选项。
注意,which命令只显示出了外部命令文件。

常用的内建命令(包含不限于)

命令描述参数(包含不限于)
history查看最近用过的命令列表-a -n
alias命令别名允许你为常用的命令(及其参数)创建另一个名称,
从而将输入量减少到最低
-p

note:命令别名属于内部命令,一个别名仅在它所被定义的shell进程中才有效。 注意:这里说的是内部命令,不是内建。

申明:文中没特殊注明,图皆来自Linux命令行与shell脚本编程大全<第三版>。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wang 恒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值