/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。






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM