控制台、終端、虛擬終端和偽終端


首先, 終端 (Terminal)概念通常是指那些與集中式主機系統(例如IBM大型計算機)相連的“啞”用戶設備。 而個人計算機演變至今,讓人很難理解這個概念。

 

1、終端和控制台都不是個人電腦的概念,而是多人共用的小型中型大型計算機上的概念。

一台主機,連很多終端,終端為主機提供了人機接口,每個人都通過終端使用主機的資源. 終端有字符啞終端和圖形終端兩種.控制台是另一種人機接口, 不通過終端與主機相連, 而是通過顯示卡-顯示器和鍵盤接口分別與主機相連, 這是人控制主機的第一人機接口.

控制台上通過getty軟件虛擬了六個字符啞終端(或者叫控制台終端tty1-tty6)(數量可以在/etc/inittab里自己調)和一個圖型終端, 在虛擬圖形終端中又可以通過軟件(如rxvt)再虛擬無限多個虛擬字符啞終端(pts/0....)。

所以在個人計算機上,只有一個實際的控制台,沒有終端,所有終端都是在控制台上用軟件模擬的。

 

2、控制台 “Ctrl”+“Alt”+“Fx”

Linux在控制台下提供了不止一個(字符啞)終端,支持多用戶同時登錄,包括在本機同時登錄。控制台“Ctrl”+“Alt”+“Fx”能夠切換到第x個(字符啞)終端。

在圖形界面下輸入命令的那個叫偽終端,不在圖形界面則是虛擬終端,用串口作終端則直接叫終端了。它們都有什么不同?

遠古時候存在各種串行設備,它們的物理接口與傳輸特性各自有異,而它們作為終端有一些代碼可以抽象出來,於是形成了最早的tty層。

 

3、控制終端(/dev/tty) 這是個在應用程序中的一個概念,前台進程有個控制終端,就對應這個。

其實/dev/tty會映射到當前的設備(通過tty命令可以看到),如果在圖形界面(Xwindows)輸入#tty 發現dev/tty映射到/dev/pts/0的偽終端, 如果在控制台會看到映射到/dev/tty0。

 

4、偽終端(/dev/pty/)這個是終端的發展,為滿足現在需求(比如網絡登陸、xwindow窗口的管理)。

偽終端(Pseudo Terminal)是成對的邏輯終端設備,例如/dev/ptyp3和/dev/ttyp3(或着在設備文件系統中分 
別是/dev/pty/m3和/dev/pty/s3)。它們與實際物理設備並不直接相關。

 

5、控制台終端(/dev/ttyn, /dev/console) 在UNIX系統中,計算機顯示器通常被稱為控制台終端(Console)。

它仿真了類型為Linux的一種終端(TERM=Linux),tty1 –tty6等稱為虛擬終端,而tty0則是當前所使用虛擬終端的一個別名, 系統所產生的信息會發送到該終端上。

console是一個緩沖的概念,其實是為內核提供打印的。我們的pc,終端常用的是顯示器和鍵盤構成,我們用戶打印和內核打印都從這個終端反映給用戶。所以,這里,/dev/console是連接到/dev/tty0的,其實這里有2個概念,console和tty,怎么實現?其實console這個結構中有個device,這里其實就是tty0對應的一個虛擬終端設備。 如果,我們來個專門打印內核的設備(比如通過串口),我們把那個串口register_console,那么/dev/console就到這個串口設備了。這時,內核打印就到這個串口設備了,而用戶的打印還是和上面的/dev/tty相關,如果/dev/tty對應/dev/tty0,那么用戶打印還在窗口中出現。所以說/dev/console是用來外接控制台的。

 

6、串行端口終端(/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)端口的設備上,可接串口來實驗。

 

總結:

首先:兩種模式:字符模式:對應的為控制台,設備文件為/dev/tty1-6, 而/dev/tty0則是當前終端設備文件的別名。

     關於dev/tty其實很簡單:就是當前終端設備的一個鏈接(有點像/dev/tty0),測試如下

      

Xwindow下打開多個終端(輸入命令的窗口):#tty命令,發現在各個窗口分別顯示為# dev/pts/0  #dev/pts/1  #dev/pts/2....

 

然后在#dev/pts/0終端中輸入echo"test">/dev/pts/0 結果顯示test。然后你在#dev/pts/0終端中輸入echo"test">/dev/tty, 你會發現在當前窗口也顯示test字符串。也就是說dev/tty其實就是當前設備文件的一個鏈接。

 

關於/dev/console  應該來說更像一個緩沖結果吧,來實現對內核的打印,比如說內核把要打印的內容裝入緩沖區,然后由console來決定打印到哪里吧(比如是tty0還是串口等等吧),所以說/dev/console是用來外接控制台的。

 

Putty vim 如果沒有高亮語法,查看 echo $TERM 是否?

.vimrc 中 syntax on

如果此時語法還是沒有高亮顯示,那么在profile文件或其他配置文件中添加以下語句:
export TERM=xterm-color

putty vim 鼠標選擇后不能復制粘貼,因為此時進入的visual模式, 在.vimrc中加入 

 if exists("&mouse")

  set mouse=v

 " set mouse=a       ""此時要復制需先按住shift
endif

 

Putty在SSH 里面勾選X11 forwarding選項,下面的X display location 只需要填寫 localhost, 不用填寫具體的端口號,

可能導致有些圖形界面不能正常顯示!

 

 Linux中的控制台界面,要大量用到Termios庫的內容,

termios,tcgetattr,tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow, cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed - 獲取和設置終端屬性,行控制,獲取和設置波特率

 

stty命令用於顯示和修改終端行設置(change and print terminal line settings)。

常用參數

stty命令不帶參數可以打印終端行設置,加上-a參數可以打印得更詳細些。

stty size可以顯示終端的大小,即行數和列數。

stty命令還可以更改終端行的設置,格式如下:

stty SETTING CHAR

其中,SETTING可以是如下

    eof : 輸入結束,文件結束,默認為Ctrl+D。比如:用cat >file來創建文件時,按Ctrl+D來結束輸入。
    erase : 向后刪除字符,擦除最后一個輸入字符,默認為Ctrl+?。注意默認情況下退格鍵Backspace不是刪除字符。
    intr : 中斷當前程序,默認為Ctrl+C。
    kill : 刪除整條命令,刪除整行,默認為Ctrl+U。
    quit :退出當前程序,默認為Ctrl+\或Ctrl+|。
    start : 啟動屏幕輸出,默認為Ctrl+Q。
    stop :停止屏幕輸出,默認為Ctrl+S。
    susp : terminal stop當前程序,默認為Ctrl+Z。這樣當前進程就會變成后台進程了。

    werase:刪除最后一個單詞,默認為Ctrl+W。

stty命令還有一些其他用法,如:

    stty -echo 關閉回顯。比如在腳本中用於輸入密碼時。

    stty echo 打開回顯。

設置退格鍵Backspace的刪除行為   stty erase ^H

 

Ctrl+S    -------    Ctrl+Q

注:按了Ctrl+S之后,就會禁止屏幕輸出,從而出現終端僵死的情況。

這個時候,只要按Ctrl+Q就會結束這種局面,因為它會允許屏幕輸出。

 

 

設置 ssh secure shell 支持中文

只需要設置下/etc/sysconfig/i18n 文件內容如清單 1 所示

清單 1. 文件內容
LANG="zh_CN.GB18030"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"

保存之后,SSH 重新登錄或運行命令 source ./i18n 就可以顯示中文。

如果想要支持用戶登陸后自動支持中文,可以把 source /etc/sysconfig/i18n 這一行代碼加入到/etc/profile 這個文件內,這樣可以確保 root 賬戶登陸時自動加載中文設置。

 

第三方工具后台運行, screen

screen rtorrent

啟動之后,按組合鍵CTRL+A+D可以銷毀屏幕,回到命令提示符下。之后你就可以退出了,但是程序還是不會停的。

運行下面這個命令,可以恢復之前的屏幕:

screen –r

當然,也可以根據pid來恢復指定的程序的屏幕輸出:

screen -r pid.tty.host 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM