文章目录
1. chapter5:理解shell
1. shell父子关系
通过PPID列显示出谁是谁的父进程
[hadoop@hadoop1 ~]$ ps -ef
UID PID PPID C STIME TTY TIME CMD
hadoop 13768 13767 0 22:46 pts/1 00:00:00 -bash
hadoop 13805 13768 0 22:47 pts/1 00:00:00 ps -ef
-bash
当前的终端,起进程号:13768
ps -ef
是子进程。
查看进程树形图
[hadoop@hadoop1 ~]$ bash
[hadoop@hadoop1 ~]$ bash
[hadoop@hadoop1 ~]$ bash
[hadoop@hadoop1 ~]$ ps --forest
PID TTY TIME CMD
13768 pts/1 00:00:00 bash
13823 pts/1 00:00:00 \_ bash
13843 pts/1 00:00:00 \_ bash
13866 pts/1 00:00:00 \_ bash
13886 pts/1 00:00:00 \_ ps
在上面的例子中,bash命令被输入了三次。这实际上创建了三个子shell。ps -forest命令 展示了这些子shell间的嵌套结构。下图中也展示了这种关系。
可以利用exit
命令有条不紊地退出子shell
。
bash命令行参数
参数 | 描述 |
---|---|
-c string | 从string中读取命令并进行处理 |
-l | 启动一个能够接收用户输入的交互shell |
-r | 以登录shell的形式启动 |
-s | 启动一个受限shell,用户会被限制在默认目录中 从标准输入中读取命令 |
如:
sudo bash -c 'su - hadoop'
2. 进程列表
(1) 直接;
分隔——非进程列表
[hadoop@hadoop1 ~]$ ls;pwd
all-hadoop.tar.gz bigdata hadoop-current java-current mysql-5.7.25-1.el6.x86_64.rpm-bundle.tar spark-current
/home/hadoop
(2) (;)
分隔——进程列表
[hadoop@hadoop1 ~]$ (ls;pwd)
all-hadoop.tar.gz bigdata hadoop-current java-current mysql-5.7.25-1.el6.x86_64.rpm-bundle.tar spark-current
/home/hadoop
进程列表是一种命令分组
(commandgrouping)
。另一种命令分组是将命令放入花括号中, 并在命令列表尾部加上分号(;
)。语法为{ command; }
。使用花括号进行命令分组并不会像进程列表那样创建出子shell。
(3) echo $BASH_SUBSHELL
echo $BASH_SUBSHELL。如果该命令返回0,就表明没有子shell。如果返回 1或者其他更大的数字,就表明存在子shell。
3. 后台模式
(1) 命令结尾&
[hadoop@hadoop1 ~]$ sleep 100&
后台slepp 100s。
(1) 可以通过ps
或jobs
查看后台进程。
[hadoop@hadoop1 ~]$ ps -ef
hadoop 15887 15886 0 14:01 pts/1 00:00:00 -bash
hadoop 16031 15887 0 14:35 pts/1 00:00:00 sleep 100
hadoop 16033 15887 0 14:35 pts/1 00:00:00 ps -ef
(2) 或者(jobs
或 jobs -l
):
[hadoop@hadoop1 ~]$ jobs -l
[2]+ 16031 Running sleep 100 &
(2) 进程列表置后台
实用示例:
$ (tar -cf Rich.tar /home/rich ; tar -cf My.tar /home/christine)&
(3) 协程
4. 内建命令
which
与type
命令均可找到一个命令的位置。
[hadoop@hadoop1 ~]$ type -a java
java is /tools/java-current/bin/java
[hadoop@hadoop1 ~]$ type echo
echo is a shell builtin
[hadoop@hadoop1 ~]$ type -a echo
echo is a shell builtin
echo is /bin/echo
命令type -a
显示出了每个命令的两种实现。注意,which
命令只显示出了外部命令文件。
(1) history -> .bash_history 历史命令记录,存于该文件
(2) alias -p 查看默认别名