本博客内容来自《Linux命令行与shell脚本编程大全》第五章以及第一章、第二章等部分节选
目录
1、背景
Linux系统分为以下四部分
Linux内核
GNU工具
图形化桌面环境
应用软件
其中GNU工具是由GNU组织(GNU's Not Unix)开发的一套完整的Unix工具,该工具内有一种特殊的交互式工具——shell,为用户提供启动程序、管理文件系统中的文件以及Linux系统上进程的途径,其核心是命令行提示符。所有Linux发行版的shell都是bash shell,这是GNU项目提供的默认版本。
shell提供了文本命令行界面(command line interface,CLI),CLI只接受文本输入,也只能显示出文本和基本的图形输出。
当然,shell不仅仅是一种CLI,而是一个时刻都在运行的复杂交互式程序。
2、shell的类型
系统启动后使用的shell类型可以在/etc/passwd文件中查看,第七个字段即为默认shell程序
[root@izwz9194nuv8g0cwqfqsh3z ~]# cat -n /etc/passwd
1 root:x:0:0:root:/root:/bin/bash
此外,还有一个默认shell是/bin/sh,这个shell主要用于需要在启动时使用的系统shell脚本
[root@izwz9194nuv8g0cwqfqsh3z ~]# ls -lF /bin/bash
-rwxr-xr-x 1 root root 960472 Dec 7 2016 /bin/bash*
[root@izwz9194nuv8g0cwqfqsh3z ~]# ls -lF /bin/sh
lrwxrwxrwx 1 root root 4 Aug 18 2017 /bin/sh -> bash*可以看出在本文所选环境中,/bin/sh通过软链接设置为bash shell
3、shell的父子关系
父shell:用于登录某个虚拟控制器终端或在GUI中运行终端仿真器时所启动的默认交互shell
子shell:在CLI提示符后输入/bin/bash命令或其他等效bash命令时创建的新的shell程序,创建子shell是有代价的
[root@izwz9194nuv8g0cwqfqsh3z ~]# ps -f
UID PID PPID C STIME TTY TIME CMD
root 15419 15417 0 14:07 pts/0 00:00:00 -bash
root 15455 15419 0 14:25 pts/0 00:00:00 ps -f
[root@izwz9194nuv8g0cwqfqsh3z ~]# bash
[root@izwz9194nuv8g0cwqfqsh3z ~]# ps -f
UID PID PPID C STIME TTY TIME CMD
root 15419 15417 0 14:07 pts/0 00:00:00 -bash
root 15456 15419 0 14:25 pts/0 00:00:00 bash
root 15467 15456 0 14:25 pts/0 00:00:00 ps -f上述显示表明第二个ps -f命令是在子shell中运行的,可以用ps --forest查看父子关系
[root@izwz9194nuv8g0cwqfqsh3z ~]# ps --forest
PID TTY TIME CMD
15419 pts/0 00:00:00 bash
15456 pts/0 00:00:00 \_ bash
15474 pts/0 00:00:00 \_ ps
退出子shell采用exit命令
进程列表
-
命令列表
命令列表是将一连串命令用 ; 分号隔开,如下所示,命令依次执行不存在任何问题
[root@izwz9194nuv8g0cwqfqsh3z ~]# pwd; ls; cd tast/; pwd; cd ..; ls