Linux命令行与shell脚本编程-chapter5 shell

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) 可以通过psjobs查看后台进程。

[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) 或者(jobsjobs -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. 内建命令

whichtype命令均可找到一个命令的位置。

[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 查看默认别名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值