Shell

“終端”、“外殼”、“tty”和“控制台”之間的確切區別是什麼?

  • January 3, 2021

我認為這些術語在鬆散使用時幾乎指的是同一件事:

  • 終端
  • 貝殼
  • tty
  • 安慰

這些術語具體指的是什麼?

終端是電線的末端,貝殼是烏龜的家,tty 是一個奇怪的縮寫,控制台是一種櫃子。

好吧,無論如何,從詞源上講。

在 unix 術語中,簡短的回答是

  • 終端 = tty = 文本輸入/輸出環境
  • 控制台=物理終端
  • shell = 命令行解釋器

控制台、終端和 tty 密切相關。最初,它們是指一種可以與電腦互動的設備:在 unix 的早期,這意味著一種類似於打字機的電傳列印機式設備,有時也稱為電傳打字機,或簡稱為“tty”。“終端”這個名字來自電子的角度,而“控制台”這個名字來自家具的角度。在 unix 歷史的早期,電子鍵盤和顯示器成為終端的標準。

在 unix 術語中,tty是一種特殊類型的設備文件,它實現了除讀寫之外的許多附加命令 ( ioctls )。在其最常見的含義中,終端是 tty 的同義詞。一些 tty 由核心代表硬體設備提供,例如來自鍵盤的輸入和輸出到文本模式螢幕,或通過串列線路傳輸的輸入和輸出。其他 tty,有時稱為偽 tty ,由稱為終端仿真器的程序(通過薄核心層)提供,例如Xterm(在X Window System中執行)、Screen(在程序和另一個終端之間提供一層隔離)、SSH(將一台機器上的終端與另一台機器上的程序連接起來)、Expect(用於編寫終端互動腳本)等。

終端一詞也可以具有更傳統的含義,即人們通過它與電腦互動的設備,通常與鍵盤和顯示器互動。例如,X 終端是一種瘦客戶端,一種專用電腦,其唯一目的是驅動鍵盤、顯示器、滑鼠和偶爾的其他人機互動外圍設備,實際應用程序執行在另一台功能更強大的電腦上。

控制台通常是物理意義上的終端,根據某種定義,它是直接連接到機器的主要終端。控制台對作業系統顯示為(核心實現的)tty。在某些系統上,例如 Linux 和 FreeBSD,控制台顯示為多個 tty(特殊組合鍵在這些 tty 之間切換);只是為了混淆問題,給每個特定 tty 的名稱可以是“控制台”、“虛擬控制台”、“虛擬終端”和其他變體。

另請參閱為什麼虛擬終端是“虛擬的”,以及“真實”終端是什麼/為什麼/在哪裡?.


shell是使用者登錄時看到的主要界面,其主要目的是啟動其他程序。(不知道原來的比喻是shell是使用者的家庭環境,還是shell是其他程序執行的地方。)

在 unix 圈子中,shell專門表示命令行 shell,其中心是輸入要啟動的應用程序的名稱,然後是應用程序應該操作的文件或其他對象的名稱,然後按 Enter 鍵。其他類型的環境不使用“shell”這個詞;例如,視窗系統涉及“視窗管理器”和“桌面環境”,而不是“外殼”。

有許多不同的 unix shell。用於互動使用的流行 shell 包括Bash(大多數 Linux 安裝的預設設置)、zsh(強調功能和可定制性)和fish(強調簡單性)。

命令行 shell 包括用於組合命令的流控制結構。除了在互動式提示符下鍵入命令外,使用者還可以編寫腳本。最常見的 shell 具有基於Bourne_shell的通用語法。在討論“ shell 程式”時,shell 幾乎總是暗示為 Bourne 風格的 shell。一些經常用於編寫腳本但缺乏高級互動功能的 shell 包括 Korn shell (ksh)和許多ash變體。幾乎任何類 Unix 系統都安裝了 Bourne 風格的 shell /bin/sh,通常是 ash、ksh 或 bash。

在 unix 系統管理中,使用者的shell是他們登錄時呼叫的程序。普通使用者帳戶有一個命令行 shell,但訪問受限的使用者可能有一個受限的 shell或一些其他特定命令(例如,用於文件傳輸- 僅限帳戶)。


終端和外殼之間的分工並不完全明顯。這是他們的主要任務。

  • 輸入:終端將按鍵轉換為控制序列(例如Left\e[D)。Shell 將控制序列轉換為命令(例如\e[Dbackward-char)。

  • 行編輯、輸入歷史和完成由 shell 提供。

    • 終端可能會提供自己的行編輯、歷史記錄和完成功能,並且僅在準備好執行時才向 shell 發送一行。以這種方式執行的唯一通用終端是M-x shell在 Emacs 中。
  • 輸出:shell 發出諸如“顯示foo”、“將前景色切換為綠色”、“將游標移動到下一行”等指令。終端根據這些指令進行操作。

  • 提示純粹是一個 shell 概念。

  • shell 永遠不會看到它執行的命令的輸出(除非重定向)。輸出歷史(回滾)純粹是一個終端概念。

  • 應用程序間複製粘貼由終端提供(通常使用滑鼠或按鍵序列,例如Ctrl+ Shift+VShift+ Insert)。shell 也可能有它自己的內部複製粘貼機制(例如Meta+WCtrl+ Y)。

  • 作業控制(在後台啟動程序並管理它們)主要由 shell 執行。但是,它是處理組合鍵的終端,例如Ctrl+來終止C前台作業和Ctrl+Z來暫停它。

引用自:https://unix.stackexchange.com/questions/4126