本文最早於 2014年1月5日於本人個人博客(http://mooowooo.tk)發表,現博客搬家至此,轉載請註明出處。
一直不太明白 Linux/Unix 家族系統裏的 Terminal 和 Windows 一貫以來使用的 Command命令行 有什麼差異,正好今天週末有空又不太想看書,於是本着打發時間求真務實的精神,Google Wikipedia 一番檢索,大概弄清楚了這個問題,在此記錄彙總如下,方便以後查閱。
首先我明要明確一個問題:這一類程序到底叫什麼?命令行?控制檯?終端?Shell?對於我們用戶來說,這些各式各樣或黑或藍或白的窗口都幹着差不多的事情,無非就是喫進一行行字又吐出一行行字,但卻沒有一個統一的名字,這似乎有點說不過去。其實,這類程序,在計算機領域有一個專門的稱呼,叫做
殼程序(Shell)
。有興趣的朋友可以參考
殼程序
的 Wikipedia 頁面瞭解詳細的信息,我在這裏只做一個簡單敘述——也算是考驗自己是否真正理解
殼程序
簡稱殼
是指:提供用戶使用界面的程序,殼
主要負責程序與用戶的交互,它包括許多形式,如桌面環境、軟件界面,網頁等都可以算是一定程度上的殼程序
,但是通常來說,我們指的是命令行解釋器
。與之相對的,是被我們稱作內核(Core)
的部分,這個部分主要負責處理程序的邏輯而不提供與用戶的直接交互。
所以我們知道,殼
其實只是作爲連接用戶與 內核
之間的一道門,用戶要完成任何動作,實際上都是由
殼
接收到命令,然後向 內核
發起請求,內核
根據各種條件——這個展開講就太複雜——將執行結果送給
殼
,再由 殼
以一定的格式呈現給用戶。
瞭解完了一個基本的情況,那麼我們分別看看 Windows 的殼—— Command 和 Linux 的殼—— Terminal 有什麼差異。
先說 Linux/Unix 家族系列好了,因爲 Windows 這個傢伙其實內裏還有不少乾坤。
按照我的理解,對於 Linux/Unix 家族來講,Terminal 只是對 Shell 的一個再次接管。對於整個系統來說,Shell 和 Core 都只有一個,但終端可以同時打開許多,我個人認爲,這大概是從最早的分時操作系統遺留下來的一個習慣,爲每個使用者提供一個終端,相互獨立,但是均由一個 Shell 從各個終端接收命令並送給 Core 執行。所以我們題目裏所說的 Terminal 並不是
殼程序
而是夾在 殼
與用戶之間的 終端程序
。可以理解爲殼的殼。那麼現在又有問題出現了,對於 Linux/Unix 家族來講,Bash``zsh``cshell
這些名字裏直接帶有 shell 的東西又是什麼呢?我的理解是:他們都是 Shell 環境。什麼叫做 Shell 環境呢?簡單的說:他們都是 Shell
解釋器,只是提供了不同的交互環境,可能會有命令或者顯示效果上的差別,但是均能完成與 Core 交互的任務。這也是爲什麼系統裏不能同時設定多個 Shell 環境的原因——關於這點我不是十分確定,如果有問題,歡迎指正。更多關於 Unix Shell 的內容,請參見這個 Wikipedia 頁面。
那麼說完了看是紛繁實則簡單的 Linux/Unix 家族,暫時休息一下,Windows 的部分我們明天再講。其實就是想偷懶了找什麼藉口!