zoukankan      html  css  js  c++  java
  • /bin/sh、/bin/bash、/bin/dash、/bin/rbash的区别

    TOC

    /bin/sh、/bin/bash、/bin/dash、/bin/rbash的区别

    参考:

    bash

    bash 是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHell — 这是关于Bourne shell(sh)的一个双关语(Bourne again / born again)。Bourne shell是一个早期的重要shell,由史蒂夫·伯恩在1978年前后编写,并同Version 7 Unix一起发布。bash则在1987年由布莱恩·福克斯创造。

    bash (GNU Bourne-Again Shell) 是许多Linux发行版的默认Shell 。事实上,还有许多传统UNIX上用的Shell,例如tcshcsh、ashbshksh等等,Shell Script大致都类同。
    由于历史原因,UNIX系统上有很多种Shell:

    • sh(C Shell):由Bill Joy开发,随BSD UNIX发布,它的流程控制语句很像C语言,支持很多Bourne Shell所不支持的功能:作业控制,命令历史,命令行编辑。
    • ksh(Korn Shell):由David Korn开发,向后兼容sh的功能,并且添加了csh引入的新功能,是目前很多UNIX系统标准配置的Shell,在这些系统上/bin/sh往往是指向/bin/ksh的符号链接。
    • tcsh(TENEX C Shell):是csh的增强版本,引入了命令补全等功能,在FreeBSD、Mac OS X等系统上替代了csh。
    • bash(Bourne Again Shell):由GNU开发的Shell,主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,bash从csh和ksh借鉴了很多功能,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。

    查看系统可以使用的shell种类

    可使用cat /etc/shells 指令查看自己系统可以使用的shell种类:

    root@ubuntu:/$ cat /etc/shells
    # /etc/shells: valid login shells
    /bin/sh
    /bin/bash
    /bin/rbash
    /bin/dash
    /usr/bin/tmux
    /usr/bin/screen

    查看默认shell

    用户的默认Shell设置在/etc/passwd文件中,例如: vim /etc/passwd

    root:x:0:0:root:/root:/bin/bash

    sh

    在shell脚本的开头往往有一句话来定义使用哪种sh解释器来解释脚本。
    目前常见的shell脚本中主要有以下两种方式:
    (1) #!/bin/sh
    (2)#!/bin/bash

    注意:每个脚本开头都使用"#!",#!实际上是一个2字节魔法数字,这是指定一个文件类型的特殊标记,在这种情况下,指的就是一个可执行的脚本。在#!之后,接一个路径名,这个路径名指定了一个解释脚本命令的程序,这个程序可以是shell,程序语言或者任意一个通用程序。
    sh是bash的一种特殊的模式,也就是/bin/sh 相当于/bin/bash --posix。说白了sh就是开启了POSIX标准的bash 。
    在一般的linux系统当中(如redhat),使用sh调用执行脚本相当于打开了bash的POSIX标准模式
    sh一般设成bash的软链:

    ll -h /bin/sh
    ---------
    lrwxrwxrwx 1 root root 4 Jul 26  2018 /bin/sh -> dash*

    把sh改为指向bash(修改默认shell)

    方法1:直接把/bin/sh的软链接改到bash中,

    ln -s /bin/bash /bin/sh

    方法二:配置shell

    sudo dpkg-reconfigure dash

    dash

    但鉴于 bash 过于复杂,有人把 bash 从 NetBSD 移植到 Linux 并更名为 dash(Debian Almquist Shell),并以获得更快的脚本执行速度。Debian Almquist shell,缩写为dash,一种 Unix shell。它比 Bash 小,只需要较少的磁盘空间,但是它的对话性功能也较少。它由 NetBSD版本的Almquist shell (ash)发展而来,于1997年,由赫伯特·许(Herbert Xu)移植到Linux上,于2002年改名为 dash。

    ll -h /bin/
    ------
    -rwxr-xr-x  1 root root 1.1M Apr  5  2018 bash*
    -rwxr-xr-x  1 root root 119K Jan 25  2018 dash*

    可以看到,1.1M和119K的区别

    把sh改为指dash(修改默认shell)

    sudo dpkg-reconfigure dash

    选择yes使用dash作为默认的shell即可修改为dash。





  • 相关阅读:
    2d向量类 —— js版
    多边形碰撞demo —— 小车撞墙壁
    真累啊——近一年的工作心得
    重力感应相关api
    坐标旋转
    判断web app是否从主屏启动
    “简单就是力量”、“重构”和“架构设计”
    多边形碰撞算法
    《是男人就下一百层》游戏小demo
    优秀的接口的评价标准
  • 原文地址:https://www.cnblogs.com/ziyue7575/p/fe58e63823be9988772777632add1e6f.html
Copyright © 2011-2022 走看看