Linux 是一個開源的作業系統,由分布在世界各地的多個組織機構或個人共同開發完成,每個組織結構或個人負責一部分功能,最後組合在一起,就構成了今天的 Linux。例如:
-
Linux 核心最初由芬蘭駭客 Linus Torvalds 開發,後來他組建了團隊,Linux 核心由這個團隊維護。
-
GNU 組織開發了很多核心軟體和基礎庫,例如 GCC 編譯器、C語言標準庫、文字編輯器 Emacs、進程管理軟體、Shell 以及 GNOME 桌面環境等。
-
VIM 編輯器由荷蘭人 Bram Moolenaar 開發。
Windows、Mac OS、Android 等作業系統不一樣,它們都由一家公司開發,所有的核心軟體和基礎庫都由一家公司做決定,容易形成統一的標準,一般不會開發多款功能類似的軟體。
而 Linux 不一樣,它是“萬國牌”,由多個組織機構開發,不同的組織機構為了發展自己的 Linux 分支可能會開發出功能類似的軟體,它們各有優缺點,使用者可以自由選擇。Shell 就是這樣的一款軟體,不同的組織機構開發了不同的 Shell,它們各有所長,有的占用資源少,有的支援高階程式設計功能,有的相容性好,有的重視使用者體驗。
Shell 既是一種指令碼程式語言,也是一個連線核心和使用者的軟體。
常見的 Shell 有 sh、bash、csh、tcsh、ash 等。
sh
sh 的全稱是 Bourne shell,由 AT&T 公司的 Steve Bourne開發,為了紀念他,就用他的名字命名了。
sh 是 UNIX 上的標準 shell,很多 UNIX 版本都配有 sh。sh 是第一個流行的 Shell。
csh
sh 之後另一個廣為流傳的 shell 是由柏克萊大學的 Bill Joy 設計的,這個 shell 的語法有點類似C語言,所以才得名為 C shell ,簡稱為 csh。
Bill Joy 是一個風雲人物,他創立了 BSD 作業系統,開發了 vi 編輯器,還是 Sun 公司的創始人之一。
BSD 是 UNIX 的一個重要分支,後人在此基礎上發展出了很多現代的作業系統,最著名的有 FreeBSD、OpenBSD 和 NetBSD,就連 Mac OS X 在很大程度上也基於BSD。
tcsh
tcsh 是 csh 的增強版,加入了命令補全功能,提供了更加強大的語法支援。
ash
一個簡單的輕量級的 Shell,占用資源少,適合執行於低記憶體環境,但是與下面講到的 bash shell 完全相容。
bash
bash shell 是 Linux 的預設 shell,本教學也基於 bash 編寫。
bash 由 GNU 組織開發,保持了對 sh shell 的相容性,是各種 Linux 發行版預設設定的 shell。
bash 相容 sh 意味著,針對 sh 編寫的 Shell 程式碼可以不加修改地在 bash 中執行。
儘管如此,bash 和 sh 還是有一些不同之處:
-
一方面,bash 擴充套件了一些命令和引數;
-
另一方面,bash 並不完全和 sh 相容,它們有些行為並不一致,但在大多數企業運維的情況下區別不大,特殊場景可以使用 bash 代替 sh。
檢視 Shell
Shell 是一個程式,一般都是放在
/bin
或者
/usr/bin
目錄下,當前 Linux 系統可用的 Shell 都記錄在
/etc/shells
檔案中。
/etc/shells
是一個純文字檔案,你可以在圖形介面下開啟它,也可以使用 cat 命令檢視它。
通過 cat 命令來檢視當前 Linux 系統的可用 Shell:
$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
在現代的 Linux 上,sh 已經被 bash 代替,
/bin/sh
往往是指向
/bin/bash
的符號連結。
如果你希望檢視當前 Linux 的預設 Shell,那麼可以輸出 SHELL 環境變數:
$ echo $SHELL
/bin/bash
輸出結果表明預設的 Shell 是 bash。
echo
是一個 Shell 命令,用來輸出變數的值,我們將在《Shell echo》一節中詳細介紹它的用法。
SHELL
是 Linux 系統中的環境變數,它指明了當前使用的 Shell 程式的位置,也就是使用的哪個 Shell。
更多 Shell 環境變數請猛擊:Shell 環境變數一覽表