Linux 中這些概念(Shell、終端機、控制台和命令列)有什麼區別?

Linux 中這些概念(Shell、終端機、控制台和命令列)有什麼區別?

身為一個菜鳥,Shell、Terminal、Console、Command-line這三個概念最近一直讓我很困惑。特別是控制台和終端?

答案1

Shell 是用於與電腦互動的程序,它可以是命令列介面,也可以是點擊介面。 Bash 是一個 shell,Gnome2 等也是如此。

終端是現代計算中的一個負載術語。它來自舊的大型主機時代,當時您在直接連接到大型主機的硬體設備(瘦客戶端,只有鍵盤和顯示器)上打字。硬體終端與運行在大型主機上的軟體外殼進行互動。在 PC 和其他小型胖客戶端系統出現後,我們開始使用終端模擬器軟體,該軟體會假裝我們的胖客戶端只是連接到大型主機的瘦客戶端終端,並允許我們進行遠端連線。這就是像 CICS 應用程式這樣的東西找到了自己的利基的地方。

從現代意義上來說,Linux「終端」就像gnome-terminal一個終端模擬器,在本機系統上運行 shell。關鍵要點是終端始終包含一個外殼,並且您使用終端來存取外殼並與外殼交互,無論它是硬體終端還是軟體終端。

在現代使用中,客戶端(來自用於計算的客戶端/伺服器模型)是連接並使用服務的軟體。您的 Web 瀏覽器是 HTTP 服務的用戶端。要連接到 Samba 或 Windows 伺服器,您需要 Samba 用戶端。透過遠端連結的終端模擬器通常使用 telnet 或 ssh 或 hyperterm 等用戶端來進行遠端連線。客戶端通常使用網路作為媒介進行連接,並基於通訊協定(如 HTTP)傳遞訊息。

術語“客戶端”也可以指硬件,但除了少數領域外不太常見。在過去,當您將獨立系統連接到網路時,它就成為該網路上的用戶端。這也是我們得到諸如瘦客戶端(遠端運行軟體的無碟機)和厚客戶端(具有自己的作業系統、CPU、RAM 和輔助儲存的獨立 ​​PC)等術語的地方。您通常可以從上下文中判斷說話者是指硬體設備(PC/伺服器/等)還是特定的軟體用戶端。

希望這有助於澄清。

答案2

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

好吧,無論如何,從詞源學上來說。

在 UNIX 術語中,簡短的答案是

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

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

在 Unix 術語中,終端是一種特殊的裝置檔案它實作了許多附加命令(讀寫控制)超越讀寫。就其最常見的含義而言,終端是 tty 的同義字。某些 tty 是由核心代表硬體設備提供的,例如來自鍵盤的輸入和進入文字模式螢幕的輸出,或透過序列線路傳輸的輸入和輸出。其他 tty,有時稱為偽ttys,由稱為的程式提供(透過薄內核層)終端模擬器, 例如Xterm(運行在X視窗系統),螢幕(它在程式和另一個終端之間提供了一層隔離),SSH(將一台機器上的終端機與另一台機器上的程式連接起來),預計(用於編寫終端互動腳本)等。

「終端」一詞也可以具有更傳統的含義,即與電腦互動的設備,通常透過鍵盤和顯示器進行互動。例如,X 終端機是一種瘦客戶端,一種特殊用途的計算機,其唯一目的是驅動鍵盤、顯示器、滑鼠以及偶爾的其他人類交互外圍設備,而實際應用程式在另一台更強大的計算機上運行。

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

也可以看看為什麼虛擬終端是「虛擬」的,「真實」終端是什麼/為什麼/在哪裡?


A是使用者登入時看到的主要介面,其主要目的是啟動其他程式。 (我不知道原來的比喻是shell是使用者的家環境,還是shell是其他程式運作的地方。)

在 Unix 圈裡,專門指的是命令列外殼,以輸入要啟動的應用程式的名稱為中心,然後輸入應用程式應操作的檔案或其他物件的名稱,然後按 Enter 鍵。其他類型的環境不使用“shell”一詞;例如,視窗系統涉及“視窗管理器“ 和 ”桌面環境”,而不是“殼”。

有許多不同的 Unix shell。用於互動式使用的流行 shell 包括重擊(大多數 Linux 安裝的預設設定),桀騁(強調功能和可自訂性)和(強調簡單性)。

命令列 shell 包括用於組合命令的流控制結構。除了在互動式提示符號下鍵入命令之外,使用者還可以編寫腳本。最常見的 shell 具有基於以下內容的通用語法:Bourne_shell。當討論“外殼程式設計”,shell 幾乎總是暗示是 Bourne 風格的 shell。一些經常用於編寫腳本但缺乏高級互動功能的 shell 包括科恩外殼 (ksh)還有很多變種。幾乎所有類 Unix 系統都安裝了 Bourne 風格的 shell /bin/sh,通常是 ash、ksh 或 bash。

在unix系統管理中,使用者的是登入時呼叫的程式。受限外殼或一些其他特定命令(例如,僅用於文件傳輸帳戶)。


終端機和shell之間的分工並不完全明顯。以下是他們的主要任務。

  • 輸入:終端將按鍵轉換為控制序列(例如Left\e[D)。 shell 將控制序列轉換為指令(例如\e[Dbackward-char)。
  • 行編輯、輸入歷史記錄和補全由 shell 提供。
    • 終端可以提供自己的行版本、歷史記錄和完成,並且僅在準備好執行時才將行傳送到 shell。以這種方式操作的唯一常見終端是M-x shellEmacs。
  • 輸出:shell發出諸如「顯示foo」、「將前景色切換為綠色」、「將遊標移至下一行」等指令。
  • 提示符號純粹是一個 shell 概念。
  • shell 永遠看不到它運行的命令的輸出(除非重定向)。輸出歷史記錄(回滾)純粹是一個終端概念。
  • 應用程式間複製貼上由終端提供(通常使用滑鼠或按鍵序列,例如Ctrl+ Shift+VShift+ Insert)。 shell 也可能有自己的內部複製貼上機制(例如Meta+WCtrl+ Y)。
  • 作業控制(在背景啟動程式並管理它們)主要由 shell 執行。但是,終端負責處理組合鍵,如Ctrl+C來終止前台作業和Ctrl+Z來暫停它。

回收自Unix 和 Linux

答案3

好的,

shell:在命令列介面中執行命令。當您編寫“cd”“grep”等內容時,程式知道要做什麼(呼叫什麼程式)。通常您會看到它也稱為 bash 或 zsh(最常見)。 shell 也運行直接腳本(通常是 .sh 文件,但擴展名不是強制性的)

終端機:(通常)用於運行實際 shell 的圖形視窗。有額外的功能,例如選項卡、字體、行 X 列大小等。可以定義一個終端機來運行您喜歡的 shell

客戶:與其他無關。在任何具有客戶端/伺服器架構(網站、ssh 連線、資料庫管理程式、多人遊戲)的應用程式中,客戶端是您與之互動的對象,它將命令傳送到伺服器。

範例:使用 ssh 連線。

  • 你打開一個終端。
  • 運行命令:ssh[電子郵件受保護]
  • shell 實際執行 ssh 指令,啟動 ssh 用戶端
  • 該客戶端將透過 intarwebs 連接到 ssh 伺服器
  • 當您在終端機輸入“whoami”時,shell 正在執行 ssh 用戶端,因此它知道該命令將發送到伺服器。在網路的另一端,伺服器運行該命令,將結果發送回您的 shell,終端在桌面上進行漂亮的、人類可讀的顯示。

切換到遊戲:「終端」是漂亮的介面,「外殼」是知道如何透過點擊和按鍵進行操作的內部結構,「客戶端」將是遊戲引擎本身,來回發送內容伺服器以便所有玩家都可以愉快地互相撕扯而不會出現延遲:)

這是一個非常簡單的觀點,但沒有細節,僅此而已。

答案4

作為吉爾斯寫在Ask Ubuntu 上有類似的問題:

  1. 終端=文字輸入/輸出環境
  2. 控制台=物理終端
  3. Shell = 命令列解釋器

控制台和終端密切相關。最初,它們指的是一種可以讓您與電腦互動的設備。 (…) 在 UNIX 術語中,終端機是一種特殊類型的設備文件,它除了讀寫之外還實作了許多附加命令 (ioctls)。某些終端(有時稱為偽終端或偽 tty)是由稱為終端模擬器的程式(透過薄核心層)提供的。某些類型的終端模擬器包括:

  • 在 X Window 系統中執行的 GUI 應用程式:Xterm、Gnome Terminal、Konsole、Terminator 等。
  • Screen 和 tmux,它在程式和另一個終端之間提供了一層隔離。
  • Ssh,它將一台機器上的終端機與另一台機器上的程式連接起來。
  • Expect,用於編寫終端互動腳本。

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

(…) 命令列是一個介面,使用者可以在其中鍵入命令(表示為字元序列 — 通常是命令名稱後面跟著一些參數),然後按返回鍵來執行該命令。

shell是使用者登入時看到的主要介面,其主要目的是啟動其他程式。 (我不知道原來的比喻是shell是使用者的家環境,還是shell是其他程式運作的地方。)

在 Unix 圈子裡,shell 專門指命令列 shell,主要是輸入要啟動的應用程式的名稱,然後輸入應用程式應操作的檔案或其他物件的名稱,然後按 Enter 鍵。其他類型的環境(最近值得注意的 Gnome Shell 除外)通常不使用“shell”一詞;例如,視窗系統涉及“視窗管理器”和“桌面環境”,而不是“外殼”。

如果你用谷歌搜索,你會發現很多關於這個主題的有用資訊。

相關內容