1. 程式人生 > >終端、控制檯、shell、bash的區別聯絡

終端、控制檯、shell、bash的區別聯絡

     通常我們在使用 Linux 時,並不是直接與系統打交道,而是通過一個叫做 Shell 的中間程式來完成的,在圖形介面下為了實現讓我們在一個視窗中完成使用者輸入和顯示輸出,Linux 系統還提供了一個叫做終端模擬器的程式(Terminal),下面是幾個比較常見的終端模擬器: gnome-terminal,Konsole,xterm,rxvt,kvt,nxterm 和 eterm 。終端本質上是對應著 Linux 上的 /dev/tty 裝置,Linux 的多使用者登陸就是通過不同的 /dev/tty 裝置完成的,Linux 預設提供了 6 個純命令列介面的 “terminal”(準確的說這裡應該是 6 個 virtual consoles)來讓使用者登入。在物理機系統上你可以通過使用[Ctrl]+[Alt]+[F1]~[F6]進行切換。

 

 

    TTY是電傳打字機Teletypewriter

    終端,英文叫做terminal ,通常簡稱為term ,比如我們在X下的xterm.   

    控制檯,英文叫做console. 

在以前專門有這種可以連上一臺電腦的裝置,只有顯示器和鍵盤,還有簡單的處理電路,本身不具有處理計算機資訊的能力,他是負責連線到一臺正常的計算 機上(通常是通過串列埠) ,然後登陸計算機,並對該計算機進行操作。當然,那時候的計算機作業系統都是多工多使用者的作業系統。這樣一臺只有顯示器和鍵盤能夠通過串列埠連線到計算機 的裝置就叫做終端

學機電的人應該知道,一臺機床,或者數控裝置的控制箱,通常會被稱為控制檯,顧名思義,控制檯就是一個直接控制裝置的檯面(一個面板,上面有很多控制按鈕)。 在計算機裡,把那套直接連線在電腦上的鍵盤和顯示器就叫做控制檯

區別

請注意它和終端的區別,終端是通過串列埠連線上的,不是計算機本身就有的裝置,而控制檯是 計算機本身就有的裝置,一個計算機只有一個控制檯。

計算機啟動的時候,所有的資訊都會顯示到控制檯上,而不會顯示到終端上。也就是說,控制檯是計算機的基 本裝置,而終端是附加裝置。

現在由於計算機硬體越來越便宜,通常都是一個人獨佔一臺計算機超做,不再連線以前那種真正意義上的“終端裝置了”,因此,終端和控制檯的概念也慢慢演化了。終端和控制檯由硬體的概念,演化成了軟體的概念

現在說的終端,比如linux中的虛擬終端,都是軟體的概念,他用計算機的軟體來模擬以前硬體的方式。

比如在linux中,用 alt+f1~f6 可以切換六個虛擬終端,就好比是以前多人公用的計算機中的六個終端裝置,這就是為什麼這叫“虛擬終端”的原因。

簡單的說,能直接顯示系統訊息的那個終端稱為控制檯,其他的則稱為終端

但是在linux系統中,這個概念也已經模糊化了

比如下面這條命令:echo "hello,world" > /dev/console  這條命令的目的是將"hello,world"顯示到控制檯上/dev/console是控制檯裝置的裝置名。

再簡單的說,控制檯是直接和計算機相連線的原生裝置,終端是通過電纜、網路等等和主機連線的裝置。


1.串列埠終端(/dev/ttySn)

2.偽終端(/dev/pty/)

3.控制終端(/dev/tty)

4.控制檯(/dev/ttyn, /dev/console)

5.虛擬終端

 

1.串列埠終端(/dev/ttySn)
串列埠終端(Serial Port Terminal)是使用計算機串列埠連線的終端裝置。計算機把每個串列埠都看作是一個字元裝置。有段時間這些串列埠裝置通常被稱為終端裝置,因為那時它的最大用途就是用來連線終端。這些串列埠所對應的裝置名稱是/dev/tts/0(或/dev/ttyS0),/dev/tts/1(或/dev/ttyS1)等,裝置號分別是(4,0),(4,1)等,分別對應於DOS系統下的COM1、COM2等。若要向一個埠傳送資料,可以在命令列上把標準輸出重定向到這些特殊檔名上即可。例如,在命令列提示符下鍵入:echo test > /dev/ttyS1會把單詞”test”傳送到連線在ttyS1(COM2)埠的裝置上

2.偽終端(/dev/pty/)

偽終端(Pseudo Terminal)是成對的邏輯終端裝置(即master和slave裝置,對master的操作會反映到slave上)。

例如/dev/ptyp3和/dev/ttyp3(或者在裝置檔案系統中分別是/dev/pty/m3和 /dev/pty/s3)。它們與實際物理裝置並不直接相關。如果一個程式把ptyp3(master裝置)看作是一個串列埠裝置,則它對該埠的讀/ 寫操作會反映在該邏輯終端裝置對應的另一個ttyp3(slave裝置)上面。而ttyp3則是另一個程式用於讀寫操作的邏輯裝置。telnet主機A就是通過“偽終端”與主機A的登入程式進行通訊。

3.控制終端(/dev/tty)
   如果當前程序有控制終端(Controlling Terminal)的話,那麼/dev/tty就是當前程序的控制終端的裝置特殊檔案。可以使用命令”ps –ax”來檢視程序與哪個控制終端相連。對於你登入的shell,/dev/tty就是你使用的終端,裝置號是(5,0)。使用命令”tty”可以檢視它具體對應哪個實際終端裝置。/dev/tty有些類似於到實際所使用終端裝置的一個聯接。

每一個會話有且僅有一個對應的終端,會話中的程序從這個終端得到輸入並輸出,該終端被稱為“控制終端”(controlling terminal)。這個終端可能是機器本地的控制檯、桌面環境的偽終端、網路上的偽終端等等。

雖然一個會話對應的控制終端是可以改變的,但這通常都是由初始化使用者登入環境的那個程序設定的。

4.控制檯(/dev/ttyn, /dev/console)
   在Linux 系統中,計算機顯示器通常被稱為控制檯終端(Console)。它模擬了型別為Linux的一種終端(TERM=Linux),並且有一些裝置特殊檔案與之相關聯:tty0、tty1、tty2 等。當你在控制檯上登入時,使用的是tty1。使用Alt+[F1—F6]組合鍵時,我們就可以切換到tty2、tty3等上面去。tty1–tty6等稱為虛擬終端,而tty0則是當前所使用虛擬終端的一個別名,系統所產生的資訊會發送到該終端上(這時也叫控制檯終端)。因此不管當前正在使用哪個虛擬終端,系統資訊都會發送到控制檯終端上。/dev/console即控制檯,是與作業系統互動的裝置,系統將一些資訊直接輸出到控制檯上。只有在單使用者模式下,才允許使用者登入控制檯。

5.虛擬終端
   在Xwindow模式下的偽終端.如在Kubuntu下用konsole,就是用的虛擬終端,用tty命令可看到/dev/pts/name,name為當前使用者名稱。tty1–tty6等稱為虛擬終端

關於shell

在電腦科學中,Shell俗稱殼(用來區別於核),是指“提供使用者使用介面”的軟體(命令解析器)。它類似於DOS下的command和後來的cmd.exe。它接收使用者命令,然後呼叫相應的應用程式。

基本上shell分兩大類:

一:圖形介面shell(Graphical User Interface shell 即 GUI shell)

例如:應用最為廣泛的 Windows Explorer (微軟的windows系列作業系統),還有也包括廣為人知的 Linux shell,其中linuxshell 包括 X window manager (BlackBox和FluxBox),以及功能更強大的CDE、GNOME、KDE、 XFCE。

二:命令列式shell(Command Line Interface shell ,即CLI shell)

例如:

bash / sh / ksh / csh(Unix/linux 系統)

(MS-DOS系統)

cmd.exe/ 命令提示字元(Windows NT 系統)

Windows PowerShell(支援 .NET Framework 技術的 Windows NT 系統)

 

--------------------------------------以下有見解有點不同,

  1. 終端,即所謂的命令列介面,又稱命令終端,使用者輸入shell命令用的視窗,跟Windows裡的DOS介面差不多。

  2. shell,Shell就是使用者和作業系統之間的殼,中介,GUI和CLI都算是Shell,登陸終端可以是登陸了Bash也可能是Csh或者Dash;是作業系統與使用者互動用的介面,在命令終端裡可以使用shell。shell將使用者輸入翻譯為作業系統能處理的指令。shell提供了一些內建命令,也支援呼叫外面工具。

  3. dash,是ubuntu裡預設的shell。shell有好多種,除支援預設的POSIX標準外還支援不同的擴充套件語法,目前最常用的是bash,很多shell學習的教程都是針對bash的。dash除了不支援陣列外,其實和bash差別也不大。ubuntu裡可以將預設shell由dash改為bash。

終端(terminal,或者叫物理終端):

 
是一種裝置,不是一個程式,一般說的就是能提供命令列使用者介面的裝置,典型的是螢幕和鍵盤,或其他的一些物理終端。


虛擬終端: 
螢幕和鍵盤只是一個終端,可能不夠用,又不想增加裝置投入,就產生了虛擬終端。
gnome-terminal,urxvt,mlterm,xterm等等:
是一個程式,職責是模擬終端裝置,和虛擬終端的區別表面上在於它以 GUI 形式的窗口出現,內部則是程式結構和系統控制結構有所不同,但本質上差不多。
控制檯(console): 
顯示系統訊息的終端就叫控制檯,Linux 預設所有虛擬終端都是控制檯,都能顯示系統訊息。
但有時專指CLI下的模擬終端裝置的一個程式,和gnome-terminal,urxvt,mlterm,xterm等相同,只是CLI和GUI介面的區別。一般console有6個,tty1-6,CTRL+ALT+fn切換。還沒聽說過怎麼換console

shell是一個抽象概念,shell的一切操作都在計算機內部,負責處理人機互動,執行指令碼等,是作業系統能正常執行的重要組成部分
bash,ash,zsh,tcsh等是shell這個抽象概念的一種具體的實現,都是一個程式,都能生成一個程序物件。
如果想換shell的程式,可以修改/etc/passwd,把裡面的/bin/bash換成你想要的shell,或者用chsh命令來切換

shell與終端的關係:shell把一些資訊適當的輸送到終端裝置,同時還接收來自終端裝置的輸入。一般每個shell程序都會有一個終端關聯,也可以沒有。