第5章 理解shell

作者: Hannahhao | 来源:发表于2020-02-24 22:25 被阅读0次

    5.1 shell 的类型

    对bash shell脚本来说,有两种不同的shell:

    • 默认的交互shell(系统启动什么样的shell程序取决于个人的用户ID配置)
      在etc/passwd文件中,在用户ID记录的第7个字段中列出了默认的shell程序。 bash shell程序位于/bin目录内。
      /bin/bash*是一个可执行程序

    CentOS发行版还有一些其他shell程序,包括tcsh(源自最初的C shell);ash shell的Debian版 dash。

    • 默认的系统shell:/bin/sh (用于那些需要在启动时使用的系统shell脚本)

    Ubuntu发行版中,默认的系统shell(dash shell)和默认的交互shell(bash shell )并不相同。


    输入命令/bin/dash:启动dash shell;exit来推出dash shell。

    5.2 shell的父子类型

    默认的交互shell:父shell
    输入/bin/bash命令或其他等效的bash命令是,会创建一个新的shell程序,成为子shell
    bash命令:生成子shell,并且shell可以套shell,exit退出shell。

    输入bash, 生成子shell时看不到任何信息,命令ps -f 查看进程来看父子shell; ps --forest命令查看子shell间嵌套结构。

    5.2.1 进程列表

    在一行中指定要依次运行的一系列命令可以用命令列来实现:在命令之间加入分号 即可。
    加入 ( ) 使得命令列表变成进程列表,生成了一个子shell来执行对应的命令。
    想知道是否生成了子shell,借助命令echo $BASH_SUBSHELL,返回0,表明没有子shell,返回1或更大数字,表明存在子shell。

    5.2.2 别处心裁的子shell用法

    • 探索后台模式
      sleep命令:进程等待/睡眠的秒数
      末尾加字符&:将命令置入后台模式
      jobs命令:显示当前运行在后台模式中的所有用户的进程。

    • 将进程列表置于后台

    • 协程
      coproc命令:协程处理

    5.3 理解shell的内建命令

    5.3.1 外部命令

    外部命令:文件系统命令,存在于bash shell之外的程序,常位于/bin、/usr/bin、/sbin、/usr/sbin中。
    举例:ps就是一个外部命令,可以用which和type命令找到它。
    当外部命令执行时,会创建出一个子进程,这种操作成为衍生

    5.3.2 内建命令

    和shell编译成一体,不需要借助外部程序文件来运行。
    cd和exit命令都内建于bash shell。

    有些命令既有内建命令也有外部命令;实现略有不同(type -a命令可以查看)。
    • 使用history命令(查看最近用过的命令列表)
      输入!!时,bash首先会显示出从shell的历史记录中换回的命令,然后执行该命令。
    • 命令别名 alias(运行为常用命令创建另一个名称,减少输入量)

    5.4 小结

    • 默认的交互式shell和系统shell(/bin/bash和/bin/sh)
    • 子shell:bash生成,coproc也可以。
    • 外部命令和内建命令(外部命令会创建出一个包含全新环境的子进程)

    相关文章

      网友评论

        本文标题:第5章 理解shell

        本文链接:https://www.haomeiwen.com/subject/bjbwqhtx.html