博客 / 詳情

返回

ternimal,shell,tty 和 console 之間的確切區別是什麼?

名詞本義

terminal: 終端在電線的末端,
shell: 外殼是烏龜的家,
tty: 是一個奇怪的縮寫,
console: 控制枱是一種機櫃。

嗯,從詞源上來講,就這樣子。

用Unix術語來説,簡短的答案是

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

以下鏈接來自維基百科,可能需要翻牆

控制枱,終端和tty密切相關。早先,他們的意思是一台設備,通過這個設備你可以與計算機交互:在UNIX的早期,這意味着一個電傳式的裝置類似一台打字機,有時也被稱為遠程電傳打字機teletypewriter,或縮寫成“TTY”。“終端”這個名字來自電子科學的角度,從傢俱的角度來看,這個名字是“控制枱”。在Unix歷史的早期,電子鍵盤和顯示器成為終端的規範。

Unix的哲學是一切皆文件

設備也不例外。

用unix術語來説,tty是一種特殊的設備文件,它實現了除讀寫之外的許多其他命令(ioctls)。在其最常見的含義中,terminal是 tty 的同義詞。某些 tty 由內核代表硬件設備提供,例如,輸入來自鍵盤,輸出進入文本模式屏幕,或者輸入和輸出通過串行線路傳輸。其他 tty,有時也稱為 偽tty,是由稱為終端仿真器的程序(通過薄內核層)提供的,例如:

  • Xterm在X Window System中運行。
  • Screen:在程序和另一個終端之間提供隔離層。
  • Ssh:將一台機器上的終端與另一台機器上的程序連接起來。
  • Expect:用於腳本化終端交互。

終端一詞更傳統的含義也可以指一種設備的,通過該設備人們可以與計算機(通常是鍵盤和顯示器)進行交互。例如,X終端是一種瘦客户機,是一種專用計算機,其唯一目的是驅動鍵盤,顯示器,鼠標以及偶爾的其他人機交互外圍設備,而實際應用程序則在另一台功能更強大的計算機上運行。

控制枱一般是在物理意義上的,某種意義上來説是直接連接到主機的終端。控制枱在操作系統中顯示為(內核實現的)tty。在某些系統上,例如 Linux 和 FreeBSD,控制枱顯示為多個 tty(特殊的組合鍵在這些 tty 之間切換)。為了把事搞混搞亂,給每個特定 tty 賦予的名稱可以是“控制枱”,“虛擬控制枱”,“虛擬終端”和其他變體。

另請參見為什麼虛擬終端是“虛擬的”,以及“真正的”終端在什麼/為什麼/在哪裏?。

Shell


一個是主界面,用户登錄時看到的,其主要目的是啓動其他程序。(我不知道最初的隱喻是 shell 是用户的家庭環境(home eviroment),還是該shelln是其他程序在其中運行的保護殼。)

在unix圈子中,shell專門指命令行外殼,以輸入要啓動的應用程序的名稱為中心,然後輸入應用程序應作用的文件或其他對象的名稱,然後按Enter 鍵。其他類型的環境不使用“外殼”一詞;例如,“窗口管理器”和“桌面環境”,而不是“外殼”。

有許多不同的unix shell。交互式使用的流行shell包括:

  • Bash :大多數Linux安裝中的默認設置,
  • zsh: 強調功能和可定製性,
  • fish: 強調簡單性。

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

在unix系統管理中,用户的外殼程序是他們登錄時調用的程序。普通用户帳户具有命令行外殼程序,但是訪問受限的用户可能具有受限的外殼程序或某些其他特定命令(例如,用於文件傳輸 - 僅帳户)。


Terminal 和 Shell 之間的分工並不完全明顯。下面他們的主要作用:

  • 輸入:終端將按鍵轉換為控制序列(例如Lefte[D)。Shell將控制序列轉換為命令(例如e[Dbackward-char)。
  • Shell提供了行編輯,輸入歷史記錄和輔助完成輸入功能。

    • 終端可以改為提供自己的行編輯,歷史記錄和完成輸入功能,並且僅在準備好執行時才將行發送到shell。以這種方式運行的唯一普通終端M-x shell在Emacs中。
  • 輸出:外殼程序發出諸如“顯示 foo”,“將前景色切換為綠色”,“將光標移至下一行”之類的指令。終端根據這些指令進行操作。
  • 提示(prompt)純粹是一個外殼概念。
  • Shell 永遠不會看到它運行的命令的輸出(除非重定向)。輸出歷史記錄(回滾)純粹是終端概念。
  • 終端提供應用程序間的複製粘貼(通常使用鼠標或鍵序列,例如Ctrl+ Shift+VShift+ Insert)。外殼也可以具有自己的內部複製粘貼機制(例如Meta+WCtrl+ Y)。
  • 作業控制(在後台啓動程序並進行管理)主要由外殼執行。但是,它是由終端處理諸如Ctrl+C的組合鍵來殺死前台作業和Ctrl+Z使其暫停。

參考

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.