导图社区 《Linux命令行与shell脚本编程大全》-第5章-理解Shell
这是一篇关于理解Shell的思维导图,主要内容包括:Shell的内建命令,Shell的父子关系,Shell的类型。
说明,元素、元素的属性、属性的值使用文字的颜色进行区分。黑色文字表示元素的名称、元素节点下的属性用红色文字表示、属性下的蓝色节点表示该属性可取的值。很精简,也很抽象,理解了就可以查的很快。
这是一篇关于docker的思维导图,主要内容包括:volume,plugin,network,container,image。
这是一篇关于Python基础的思维导图,主要内容包括:11-测试代码,10-文件和异常,9-类,8-函数,7-用户输入和while,6-字典,5-if语句,4-操作列表,3-列表简介,2-变量及数据类型,1-起步。
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
理解Shell
Shell的类型
交互Shell
/bin/bash
系统Shell
/bin/sh
一般来说是指向bash shell的软链接
也有部分系统的交互shell和系统shell是不同的
Shell的父子关系
在shell再次运行bash生成一个子bash shell
第一个shell称为父shell
bash shell是一个程序,一个运行着shell的进程
ps --forest可以展示进程间的父子关系
可以在子shell继续创建孙,曾孙,...
bash的命令行参数
bash -c [string]:从[string]中读取命令并处理
bash -i:启动一个接受用户输入的交互shell
bash -l:以登录形式启动shell
bash -r:启动一个受限shell,用户会被限制在默认目录中
bash -s:标准输入中读取命令
进程列表
使用分号分隔命令即可在一行中一次性执行多条指令
例如:pwd;ls;cd /etc;pwd
但这不是进程列表,仅仅是依次运行而已
在一系列命令的两端使用'(' ')',即成为进程列表
例如:(pwd;ls;cd /etc;pwd)
shell会生成一个子shell来执行它们
echo $BASH_SUBSHELL:显示子shell个数
可以嵌套创建子shell的子shell
子shell用法
生成子shell的成本不低,运行还慢
后台模式
在命令末尾加上'$'把该命令置于后台运行
使用jobs命令显示后台作业信息
进程列表置入后台
例如:(sleep 2;echo $BASH_SUBSHELL;sleep 2)&
协程
coproc [jobname] { job1;job2;job3;... }
这是协程命令的扩展用法,除了创建协程外还会给该协程分配协程名[jobname]
花括号前后有空格,不可忽略
coproc (job1;job2;...)
在后台生成一个子shell,并在子shell中执行指令
例如:coproc My_Job { sleep 10;pwd;ls;cd /etc/; }
Shell的内建命令
基本概念
外部命令
有时也称为文件系统命令
存在于bash shell之外的程序
如ps,可用which或type在/bin/ps中找到它
执行外部命令时会创建一个子进程,这种操作被称为forking
内建命令
已经和shell编译为一个整体,作为shell的工具组成部分
部分命令有多种实现,既有内建命令也有外部命令
通过引用目录执行外部命令
直接输入执行内部命令
可通过 type -a [command]查看命令类型
history:历史命令
内建命令history查看最近用过的命令列表,通常保存最近1000条
!!:唤回上一条指令再次执行
历史命令记录保存在.bash_history中
bash的命令先放入内存中
退出时才会存入文件
history -a:强制保存
history -n:强制更新
alias:命令别名
alias [name]='[commands]':为命令[commands]创建别名
alias -p:查看当前可用别名
这是一个内建命令,只在所定义的shell中有效
重启后会使该设置失效,但可通过其他方法使其永久保留