一、shell的父子关系
-> bash 父shell
-> bash 子shell
| 名称 | 含义 |
|---|---|
| PPID | 父进程ID |
| PID | 进程ID |
①.子Shell从父Shell继承得来的属性:
当前工作目录 环境变量 标准输入、标准输出和标准错误输出 所有已打开的文件标识符 忽略的信号
②.子Shell不能从父Shell继承的属性:
除环境变量和.bashrc文件中定义变量之外的Shell变量 未被忽略的信号处理
③.分号的作用:
#依次执行命令
ls ; pwd ; cd /
#创建子shell执行命令
(ls ; pwd ; cd /)
二、相关命令
用于字符串的输出
| 命令 | 作用 |
|---|---|
| echo "It is a test" | 输出 It is a test |
| echo $BASH_SUBSHELL | 查看是否有子进程 |
| 命令 | 作用 |
|---|---|
| sleep 10 | 睡眠10秒 |
| sleep 300& | 放于后台执行300秒 |
#查看后台是否有程序偷偷运行
| 命令 | 作用 |
|---|---|
| jobs -l | 查看后台运行程序的PID |
#协作进程
| 命令 | 作用 |
|---|---|
| coproc fleming_up { sleep 10; } | 在子shell中异步执行命令 |
#查看之前运行过的所有命令
(通常显示1000多条历史命令)
| 命令 | 作用 |
|---|---|
| ! 行号 | 执行对应行号的历史命令 |
#设置指令的别名
| 命令 | 作用 |
|---|---|
| alias -p | 列出目前所有别名设置 |
| alias li='ls -li' | 设置命令别名 |
三、外部命令和内建命令
#查看命令是外部命令还是自建命令
例如: ->type ps (外部命令) ps is hashed (/usr/bin/ps) ->type cd (内建命令) cd is a shell builtin
①外部命令
外部命令是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。
通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell程序控制的。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。外部命令是在bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin......等等。可通过“echo $PATH”命令查看外部命令的存储路径,比如:ls、vi等。
ps -f的父shell为bash,创建过程理解如下:
②内建命令(非外部命令)
内建命令实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行时shell就被加载并驻留在系统内存中。
内部命令是写在bashy源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程。比如:exit,history,cd,echo等。