嗨!歡迎回到上班族的命令列生存手冊,這一個章節我們談論到:Shell 與 Terminal 的兩個名詞。讀者可能常常聽到,但卻不知道意含。這兩個名詞有他的歷史脈洛,不過由於技術進步意含和過去大不同,因為我們的電腦對比過去快了很多。
讓我們先回到過去。
1960 年代至 1970 年代時,電腦不像現在一樣每一個人都有。通常要去大學、圖書館或是企業內部才有電腦。他們會連線到一台主機 (Mainframe),其他像是電腦螢幕的機器 (通常還有鍵盤等經典的形象) 都需要連線到這台主機。
圖片引用自:wikimedia commons by Rama
中文是:終端機,就是這些有鍵盤的電腦螢幕,本身沒有計算能力,就是只連線到某一台大主機。
Shell 是主機上跑的軟體,人們透過 Terminal 和他溝通,他會知道你的指令,該去哪裡處裡問題,或是取得資訊。
白話文解釋, Terminal 是話筒,Shell 是總機。人們透過話筒和總機溝通,他會知道該轉給誰,該去哪裡取得資料、結果。 (2025 應該還是有人打電話對吧?…… 對吧?)
這就需要補充幾個名詞,分別是 Standard Input 和 Standard Output,口語上也會說成 Standard In 或 Standard Out。在系統之中,或是網路論壇上,也有人用 Std In 和 Std Out 來簡寫他們,或是 STDIN (編號是 0)、STDOUT (編號是 1)。
在這個階段介紹這兩個名詞很貼切,由上可知終端機絲毫沒有思考能力,一切都是將資訊送給遠方大型主機的 Shell 來幫他完成。以 Shell 的觀點來看,有些指令會等待使用者輸入內容,這就是在等 Standard Input;接著,Shell 處理好工作之後,將資訊回傳並輸出到螢幕上,這個就是 Standard Output。
例如我們可以用 cat 這個指令來說明,輸入完不給他任何的變數,他會等待使用者輸入檔案路徑:
$ cat <等待使用者輸入> <== 輸入的東西從 Standard Input 取得,此地為鍵盤輸入
給他一個檔案
$ cat hello.txt Hello Friend! <== 結果輸出到螢幕上 Standard Output
不過到了近代,有些指令已經調整成沒給變數,會印出提示文字,不過這不會改變觀念,Standard Input 就是提供給 Shell 或是指令的內容。
現在電腦實在是太快了!而且價格也到了平易近人的程度,現在大家幾乎都有自己的「個人電腦」了。(雖然好像智慧型手機出現後,開始有了反向的趨勢?)。純的 Terminal 在現代幾乎已經不見蹤影,現在程式化變成了 Terminal 的「模擬器」,所以有時會看見 Terminal Emulator 這樣的名子。而現在我們可以在本機解決很多工作,從前 Shell 是大型主機的總機,現代則是你的電腦的總機。
也就是終端機模擬器,現在是軟體。在一般常見的系統上都有,例如 macOS、Ubuntu 上的「終端機」,Windows 也有 Windows Terminal。基本上就是打字給 Shell ,請 Shell 去處理我們賦予他的工作。
以前跑在大型主機之中,現在跑在你的電腦裡!因為是軟體,所以 Shell 也有各種不同的選擇,例如:
其他常見的預設選擇還有 bash 。
Windows 上也有 PowerShell ,以前可能用過的 MS-DOS 的命令提示字元(Command Prompt) 也算是一種 Shell。
廣義上來說,與使用者互動的「那個界面軟體」就是一種 Shell,像是 Windows 的 explorer.exe
就是一個例子。
終端機已經越來越少囉,預設的 Standard Input 依然是使用者用鍵盤輸入的內容;預設的 Standard Output 則是直接輸出到 Terminal Emulator 的畫面上。
除了 Standard Output,Linux 系統還有第二個 Output 途徑:Standard Error。網路上也有寫成 Std Err,或是 STDERR (編號 2) ,從名稱上來看,就是輸出「錯誤訊息」到畫面上的途徑。
以 git 指令來說明,git 用來管理程式碼,但在一個沒有啟用 git 的資料夾下相關指令,git 會抱怨:這個不是 git 支援的資料夾。這個訊息即是 Standard Error。
$ git branch
Fatal Error: it is not a git repository // <=== Standard Error
Standard Input、Standard Output 和 Standard Error,在後續的單元之中還會提到,也是命令列系統重要的觀念。建議讀者可以先有印象,簡單的記一下。
俗話說的好:越暗的地方,你越亮。在暗暗的地方選擇適合的 Terminal Emulator 就很重要了,接下來的文章將會和讀者推薦,筆者目前個人工作或是生活上,實際在用的軟體選擇。