ttys0~ ttys3 (串列埠終端)指的是電腦的各個物理介面(這些都是串列埠,不是並口),外部的終端通過這些物理介面與電腦連線 ,從而實現和電腦進行互動。
例如:dmesg |grep tty可以檢視開啟的介面(串列埠)
目前連線遠端伺服器或者直接在伺服器上面操作等都是通過建立虛擬終端的形式。比如pts/1 和tty1虛擬終端,其中tty表示直接登入機器生成的而pts表示遠端連線生成的。其中遠端連線是通過sshd服務進行建立session會話和bash程序(所以可以看到有sshd程序,同時虛擬終端可以建立多個,這是依賴ptmx功能,sshd通過與ptmx通訊,ptmx在和相對應的pts通訊從而達到多個虛擬終端的效果)。
ttyn使用tmux模擬的,pts是遠端連線產生的,當前就是pts/2
例如:在centos系統中的影象介面中開啟的terminal就是乙個pts但是整個圖形介面是乙個tty,centos切換到命令列介面後 輸入tty命令時輸出就是tty1或ttyn了,這時候的命令列介面與圖形介面的執行級別是一樣的,通過命令列建立的所有程序都是屬於tty1終端的。
注意: tty就是ttys的虛擬版本,只是不需要通過外部線路進行連線了。遠端連線伺服器需要sshd服務,sshd和tty沒有聯絡,遠端連線是因為本地有終端模擬器,本機連線就需要核心直接模擬乙個模擬器了,所有遠端是pts,本機是tty 。
從上面的流程中可以看出來對使用者空間的程式來說它們沒有區別,都是一樣的;從核心角度來看pts的另一端連線的是ptmx,而tty的另一端連線的是核心的終端模擬器,ptmx和終端模擬器都只是負責維護會話和**資料報;再看看ptmx和核心終端模擬器的另一端,ptmx的另一端連線的是使用者空間的應用程式,如sshd、tmux等,而核心終端模擬器的另一端連線的是具體的硬體,如鍵盤和顯示器。
ssh遠端訪問---重點
這裡的terminal可能是任何地方的程式,比如windows上的putty,所以不討論客戶端的terminal程式是怎麼和鍵盤、顯示器互動的。由於terminal要和ssh伺服器打交道,所以肯定要實現ssh的客戶端功能。這裡將建立連線和收發資料分兩條線路解釋,為了描述簡潔,這裡以sshd代替ssh伺服器程式:
建立連線:
1.terminal請求和sshd建立連線。
2.如果驗證通過,sshd將建立乙個新的session。
3.呼叫api(posix_openpt())請求ptmx建立乙個pts,建立成功後,sshd將得到和ptmx關聯的fd,並將該fd和session關聯起來。
4.同時sshd建立shell程序,將新建立的pts和shell繫結。
收發訊息:
1.terminal收到鍵盤的輸入,terminal通過ssh協議將資料發往sshd。
2.sshd收到客戶端的資料後,根據它自己管理的session,找到該客戶端對應的關聯到ptmx上的fd。
3.往找到的fd上寫入客戶端發過來的資料。
4.ptmx收到資料後,根據fd找到對應的pts(該對應關係由ptmx自動維護),將資料報**給對應的pts。
5.pts收到資料報後,檢查繫結到自己上面的當前前端程序組,將資料報發給該程序組的leader。
6.由於pts上只有shell,所以shell的read函式就收到了該資料報。
7.shell對收到的資料報進行處理,然後輸出處理結果(也可能沒有輸出)。
8.shell通過write函式將結果寫入pts。
9.pts將結果**給ptmx。
10.ptmx根據pts找到對應的fd,往該fd寫入結果。
11.sshd收到該fd的結果後,找到對應的session,然後將結果發給對應的客戶端。
ssh + screen/tmux
常用linux的同學應該對screen和tmux不陌生,通過它們啟動的程序,就算網路斷開了,也不會受到影響繼續執行,下次連上去時還能看到程序的所有輸出,還能繼續接著幹活。 這種情況要稍微複雜一點,不過原理都是一樣的,前半部分和普通ssh的方式是一樣的,只是pts/0關聯的前端程序不是shell了,而是變成了tmux客戶端,所以ssh客戶端發過來的資料報都會被tmux客戶端收到,然後由tmux客戶端**給tmux伺服器,而tmux伺服器幹的活和ssh的類似,也是維護一堆的session,為每個session建立乙個pts,然後將tmux客戶端發過來的資料**給相應的pts。由於tmux伺服器只和tmux客戶端打交道,和sshd沒有關係,當終端和sshd的連線斷開時,雖然pts/0會被關閉,和它相關的shell和tmux客戶端也將被kill掉,但不會影響tmux伺服器,當下次再用tmux客戶端連上tmux伺服器時,看到的還是上次的內容。
Linux系統中FTP配置等問題
linux系統中ftp配置等問題 鄧強 安裝vsftpd 1 以管理員 root 身份執行以下命令 yum install vsftpd 2 設定開機啟動vsftpd ftp服務 chkconfig vsftpd on 3 啟動vsftpd服務 service vsftpd start 配置可允許登...
Linux系統中grep等命令詳解
檢視檔案的行數 在 linux 系統中沒有在 windows 系統中那麼方便的點點滑鼠就可以操作檔案了,對檔案的各種操作都必須使用各種命令來完成。比如有時候我們需要在不檢視檔案內容的情況下需要知道該檔案有多少行。這個時候可以通過 linux 的 wc 命令完成我們的想法。下面具體介紹一下 wc 命令...
Linux系統如何檢視CPU型號等
root subvm less proc cpuinfo grep model model 4 model name intel r xeon tm cpu 3.00ghz model 4 model name intel r xeon tm cpu 3.00ghz 檢視系統核心版本 uname a...