理解shell

一、shell的类型

输入命令/bin/dash来启动dash shell
输入exit退出dash shell

二、 shell的父子关系

在CLI提示符后输入/bin/bash命令或其他等效的bash命令时,会创建一个新的shell程序。这个shell程序被称为子shell(child shell)
bash命令被输入了三次。这实际上创建了三个子shell。 ps --forest命令展示了这些子shell间的嵌套结构
用exit命令有序退出子shell

进程列表:是一种命令分组
命令列表:在命令之间加入分号(;)可以在一行中指定要依次运行的一系列命令
进程列表:将命令列表命令包含在括号里,生成一个子shell来执行对应的命令
可以借助一个使用了环境变量的命令echo $BASH_SUBSHELL知道是否生成了子shell。如
果该命令返回0,就表明没有子shell。如果返回1或者其他更大的数字,就表明存在子shell。
如图:一组命令放入括号中,产生了一个子shell去执行用命令列表放入括号中,就会创建一个子shell,下面在括号中再套一个括号,结果是在子shell上创建了子shell

后台模式:运行命令可以在处理命令的同时让出CLI,以供他用。
要想将命令置入后台模式,可以在命令末尾加上字符&。
将sleep放入后台后,可以使用ps命令用来显示各种进程,也可以使用jobs命令来显示后台作业信息。一旦后台作业完成,就会显示出结束状态。
将进程列表置入后台模式。你既可以在子shell中进行繁重的处理工作,同时也不会让子shell的I/O受制于终端。
如图:将sleep命令置入后台模式,在shell CLI提示符(tan@tan:~$)返回之前,出现后台作业号1,以及后台作业进度24.通过ps可以看到,该后台命令进程24一直在运行。
通过jobs命令可以查看当前后台模式的进程信息(jobs -l显示进程号)
60秒过后,后台进程完成,再输入命令jobs,可以看到该命令进程已完成

协程:协程命令coproc可以同时做两件事。它在后台生成一个子shell,并在这个子shell中执行命令
coproc命令给进程起的默认名字为COPROC
通过使用扩展语法,可以修改协程的名字
coproc My_job { sleep 10; }
注:扩展语法必须确保在第一个花括号({)和命令名之间有一个空格。还必须保证命令以分号(;)结尾。分号和闭花括号(})之间也得有一个空格。

三、理解shell的内建命令

命令分为内建命令和外部命令。
1.非内建(外部)命令:有时候也被称为文件系统命令,是存在于bash shell之外的程序。它们并不是shell程序的一部分。外部命令程序通常位于/bin、/usr/bin、/sbin或/usr/sbin中
ps就是一个外部命令。你可以使用which和type命令找到它
当外部命令执行时,会创建出一个子进程。这种操作被称为衍生(forking)
外部命令ps很方便显示出它的父进程以及自己所对应的衍生子进程

2.内建命令:已经和shell编译成了一体,作为shell工具的组成部分存在。不需要借助外部程序文件来运行,不需要使用子进程来执行。内建命令的执行速度要更快,效率也更高。
cd和exit命令都内建于bash shell。

echo和pwd既有内建命令也有外部命令。两种实现略有不同。要查看命令的不同实现,使用type -a。which命令只显示出了外部命令文件。

内建命令history 会跟踪你用过的命令。你可以唤回这些命令并重新使用。命令历史记录被保存在隐藏文件.bash_history中,它位于用户的主目录中。这里要注意的是,bash命令的历史记录是先存放在内存中,当shell退出时才被写入到历史文件中。
输入!!,然后按回车键就能够唤出刚刚用过的那条命令来使用。
输入!命令编号,然后按回车键就能够唤出history中对应编号的命令。

命令别名alias允许你为常用的命令(及其参数)创建另一个名称,从而将输入量减少到最低。
alias –p 命令可以查看你所使用的Linux发行版已经为你设置好的一些常用命令的别名
--color 选项,表明终端支持彩色模式的列表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值