初识Linux---父子shell

224 阅读1分钟

一、shell的父子关系

-> bash 父shell

-> bash 子shell

名称含义
PPID父进程ID
PID进程ID

①.子Shell从父Shell继承得来的属性:

当前工作目录 环境变量 标准输入、标准输出和标准错误输出 所有已打开的文件标识符 忽略的信号

②.子Shell不能从父Shell继承的属性:

除环境变量和.bashrc文件中定义变量之外的Shell变量 未被忽略的信号处理

③.分号的作用:

#依次执行命令

ls ; pwd ; cd /

#创建子shell执行命令

(ls ; pwd ; cd /)



二、相关命令

echo\color{#FF0000}{echo}

用于字符串的输出
命令作用
echo "It is a test"输出 It is a test
echo $BASH_SUBSHELL查看是否有子进程

sleep\color{#FF0000}{sleep}

命令作用
sleep 10睡眠10秒
sleep 300&放于后台执行300秒

jobs\color{#FF0000}{jobs}

#查看后台是否有程序偷偷运行
命令作用
jobs -l查看后台运行程序的PID

coproc\color{#FF0000}{coproc}

#协作进程
命令作用
coproc fleming_up { sleep 10; }在子shell中异步执行命令

history\color{#FF0000}{history}

#查看之前运行过的所有命令
(通常显示1000多条历史命令)
命令作用
! 行号执行对应行号的历史命令

alias\color{#FF0000}{alias}

#设置指令的别名
命令作用
alias -p列出目前所有别名设置
alias li='ls -li'设置命令别名


三、外部命令和内建命令

type\color{#FF0000}{type}

#查看命令是外部命令还是自建命令

例如: ->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等。