/bin/sh、/bin/bash、/bin/dash、/bin/rbash的區別
/bin/sh、/bin/bash、/bin/dash、/bin/rbash的區別
bash
檢視系統可以使用的shell種類
檢視預設shell
sh
把sh改為指向bash(修改預設shell)
dash
把sh改為指dash(修改預設shell)
/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,例如tcsh
、csh、ash
、bsh
、ksh
等等,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。
來自為知筆記(Wiz)