iT邦幫忙

2025 iThome 鐵人賽

DAY 2
4

嗨!歡迎回到上班族的命令列生存手冊,這一個章節我們談論到:Shell 與 Terminal 的兩個名詞。讀者可能常常聽到,但卻不知道意含。這兩個名詞有他的歷史脈洛,不過由於技術進步意含和過去大不同,因為我們的電腦對比過去快了很多。

讓我們先回到過去。

在很久以前

1960 年代至 1970 年代時,電腦不像現在一樣每一個人都有。通常要去大學、圖書館或是企業內部才有電腦。他們會連線到一台主機 (Mainframe),其他像是電腦螢幕的機器 (通常還有鍵盤等經典的形象) 都需要連線到這台主機。

https://ithelp.ithome.com.tw/upload/images/20250916/20141615dUaFgEuOiA.jpg
圖片引用自:wikimedia commons by Rama

Terminal

中文是:終端機,就是這些有鍵盤的電腦螢幕,本身沒有計算能力,就是只連線到某一台大主機。

Shell

Shell 是主機上跑的軟體,人們透過 Terminal 和他溝通,他會知道你的指令,該去哪裡處裡問題,或是取得資訊。
白話文解釋, Terminal 是話筒,Shell 是總機。人們透過話筒和總機溝通,他會知道該轉給誰,該去哪裡取得資料、結果。 (2025 應該還是有人打電話對吧?…… 對吧?)

Standard Input 和 Standard Output

這就需要補充幾個名詞,分別是 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 是大型主機的總機,現代則是你的電腦的總機。

Terminal

也就是終端機模擬器,現在是軟體。在一般常見的系統上都有,例如 macOS、Ubuntu 上的「終端機」,Windows 也有 Windows Terminal。基本上就是打字給 Shell ,請 Shell 去處理我們賦予他的工作。

Shell

以前跑在大型主機之中,現在跑在你的電腦裡!因為是軟體,所以 Shell 也有各種不同的選擇,例如:

  • macOS 目前預設是:zsh (Z Shell)
  • Ubuntu 預設是: dash (Debian Almquist Shell)

其他常見的預設選擇還有 bash
Windows 上也有 PowerShell ,以前可能用過的 MS-DOS 的命令提示字元(Command Prompt) 也算是一種 Shell。

廣義上來說,與使用者互動的「那個界面軟體」就是一種 Shell,像是 Windows 的 explorer.exe 就是一個例子。

Standard Input 和 Standard Output

終端機已經越來越少囉,預設的 Standard Input 依然是使用者用鍵盤輸入的內容;預設的 Standard Output 則是直接輸出到 Terminal Emulator 的畫面上。

Standard Error

除了 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 就很重要了,接下來的文章將會和讀者推薦,筆者目前個人工作或是生活上,實際在用的軟體選擇。


上一篇
Day01 快快樂樂學習命令列 (Command Line Interface)
下一篇
Day03 選擇一個適合的 Terminal Emulator 程式
系列文
上班族的命令列 (CLI) 生存手冊6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
chiaominchang222
iT邦新手 5 級 ‧ 2025-09-16 20:06:12

挖我也有這個疑問過 感謝

我要留言

立即登入留言