Line discipline,到底翻譯成行規程還是線路規程,沒有統一的標準,我選用行規程,但這並不意味著操作的單位就是一行,特此澄清。本文我們就和大家分享最詳細的Linux終端機和Line discipline圖解教程,希望能幫助大家。
什麼是行規程
當我們在一個終端機上按下按鍵“l”的時候,終端機只是把字母“l”回顯了回來,緊接著按下按鍵“s”,依然是回顯字母“s”,隨後我們按下回車鍵,回顯的不再是回車鍵(請問怎麼回顯),而是列出並顯示了目前目錄下的所有文件,這些規則是如何定義的?
當我們按下組合鍵「Ctrl-C」的時候,目前的進程就終止了,這個又是如何規定的?為什麼不是組合鍵「Shift-B」來完成同樣的事?
如果你對鍵盤夠了解(我了解,但並不足夠),就會知道有很多的組合鍵可以使用,這些組合鍵分別在不同的系統,不同的終端機上如何定義的,誰來規定按下什麼鍵發生什麼事?
所有這些問題都可以用行規程來回答。那什麼是行規程呢?
行規程是一套約定俗成的協定。約定雙方可以是電腦和終端機(包括輸出設備和人體輸入設備)。在這個意義上,終端就是所謂的人機介面。
我來簡單解釋一下。行規程規定了鍵盤,串口,印表機,顯示器等輸入輸出設備和用戶態Shell等程式之間的行為規範,鍵盤上的按鍵事件被行規程解釋成了Shell可以理解的輸入並給出對應的輸出。人們要操作計算機,這套規程是必不可少的,它事實上規定了資訊從外部進入計算機的規範。
可以使用stty指令來展示你的終端行規程的設定:
瞭解行規程
以Linux為例,下圖是行規程在整個體系結構中的位置:
可以看得出,SLIP作為一中行規程,並沒有把解析後的資料繼續提交到與之綁定的TTY緩衝區,而是將解析後的資料作為IP資料報直接遞送給了TCP/IP協定棧來處理。
這裡摘取百度百科上的一段話:
<span style="font-size: 16px;">SLIP只是一个包组帧协议,仅仅定义了在串行线路上将数据包封装成帧的一系列字符。它没有提供寻址、包类型标识、错误检查/修正或者压缩机制。<br></span>
廣義地來講,其實像乙太網路規範這種也可以叫做某種行規程,畢竟它也是約定IP層軟體和傳輸介質之間行為規範的協議,起到的均是對資料格式化的作用,但由於如今超高速傳輸早就完完全全基於比特流序列,不再透過定義以字元為邊界的區塊來封裝數據,所以再叫做行規程就有點詞不達意了,但本質上都是一樣的,都是定義在某種介質上如何把資料包封裝的協定。
關於unix98偽終端機
關於偽終端的這部分內容參見:SVR4/4.3BSD與Linux對待偽終端的不同方式
全域的視角圖解幾個終端機
好了,是總結的時候了。
在上一篇文章徹底理解Linux的各種終端類型以及概念,我是採用環的方式給出了一個關於終端的總圖,後來有人發來郵件反映,所有的終端類型進入一張圖,雖然是很統一,但是太複雜了,所以本文我還是決定把這些分開,略去比較多的細節,在全局的角度來看一下終端的結構。
站在bash的角度,bash本身並不知道其終端到底是直連的,串口連接的,還是說SSH連過來的,這意味著內核裡有一個適配層,在這個層之上,所有的終端看起來是一模一樣的,在這個層以下,卻盡顯個性:
##我們接下來就來看看這些不同點在哪裡。
本機終端
#序列埠線連接的終端機
SSH偽終端
#Tmux偽終端機
本來是想把Tmux跟Screen一起說的,但是Screen和Tmux原理幾乎是一模一樣,所以就省掉了Screen,這裡只說Tmux:
還是有點複雜是不是?
其實確實比較複雜,這裡只需要知道兩點就好了,首先,把Tmux Server以及它Fork當作不會斷的SSH就好了,其次,當你在一個SSH偽終端機運行Tmux Client的時候,Tmux Client相當於把該SSH偽終端機的pts借給了Tmux Server,Tmux Server和SSHd是並列的。
Tmux Server開啟一對偽終端,自己持有主設備,將次設備繼承給它Fork出來的Bash,此一對進程進入後台,不再歸屬任何終端。
#一旦Tmux Client運行於某個SSH終端,它會把目前終端的pts傳遞給Tmux Server,從而讓Tmux Server作為一個資料代理程式傳遞輸入和輸出。
一旦Tmux Client運行,它就成為了當前Bash的前台進程,通過重定向之後,當前Tmux Client便成為了Bash0的前端,接收Bash0的輸入與輸出。文件句柄轉交後的流程如下:#
<span style="font-size: 16px;">1. 有人在远端的Windows主机上敲入一个字符***“a”***;2. 字符***“a”***经由SSH客户端加密后传输到Linux SSH服务器SSHd并解密;3. 字符***“a”***通过SSHd的ptmx写入4. Tmux Server从pts/2将字符***“a”***读出并写入ptmx;5. Bash0将字符***“a”***从pts/1读出并执行;6. Bash0将***-bash: a: command not found***按原路返回给Windows。<br></span>
注释:关于文件句柄传递
有人说Linux可以靠一个ioctl系统调用在不同进程之间传递文件描述符,然而当你真的去自己尝试时,却发现这是骗人的。那么同样的功能如何来实现?你如何不通过调用open,accept,socket这类系统调用打开一个文件句柄呢?
答案就是使用SCM_RIGHTS。具体怎么做,百度一下,你就知道。
题外话
最后,依然说点题外话。
现如今关于终端等人机接口的内容被淡化了,然而关于TCP/IP的内容却得到了强化,我认为这是不公平的。
当然,这是近来不断提高软件地位而降低硬件地位的后果,大多数人都知道socket如何到socket,却只有很少的人知道socket如何到网线,而后者才是基础。数据从哪里来?
没有数据何谈通信?数据不可能凭空就存在于计算机,它必然靠某种设备从外界输入,比如键盘,扫描仪,传感器等,首先这些设备和计算机之间的数据传输协议才基础中的基础,此后针对数据的加工才会用到TCP/IP,IPC这种对等层通信协议。
随着物联网的发展,关于数据如何进入计算机这个问题还会有很多新的解答,因此以上的局面得以改观。
牢骚
———————–截止2017/12/16 11:08文章已写完———————–
东北极寒天吃饭,要乱炖多点肉喝点酒;河南的冷天吃饭,要吃大烩菜,一人盛一碗,陕西山西冷天吃饭,羊排锅加竹叶青酒超爽…但是现在在华南,深圳的今天气温比较低,这天气说冷不冷,但确实有点寒意,我决定今天穿上长裤…准备出发去吃好爽的火锅底料。
华南的深圳,北纬22°不到23°,这是热带的边缘,正因为其地理因素,冬季会受到北方冷空气的影响,所以这里被归为一个叫做亚热带的尴尬区域,所谓亚热带主要就是为了照顾北方的冬天,北方人不是怕冷吗?那就为北方制造一个叫做亚热带的地方,可谓仁慈。不管怎样,我现在依然还是短衣短裤的…我是迫于众人的目光压力穿上长裤的,不然会被认为是傻逼,但是在室内或者刚吃完饭后,真觉得热…唉!
昨晚的圣诞晚会嗨爆全场,灯光音响很棒,然而最终还是没有中奖…回到家已经午夜,喝了一瓶真露想再写篇关于终端的随笔以解惑,但不知不觉就困了,于是就睡了,早上本来想早起,自然醒来已经七点半了,醒来并没有意识到今天很冷,第一件事反而是想中午一家人去吃顿川味火锅底料,这也算是响应老板们的号召了。所以说,我必须在11点前把这篇文章写完。
Line discipline,到底翻译成行规程还是线路规程,没有统一的标准,我选用行规程,但这并不意味着操作的单位就是一行,特此澄清。
什么是行规程
当我们在一个终端上按下按键“l”的时候,终端只是把字母“l”回显了回来,紧接着按下按键“s”,依然是回显字母“s”,随后我们按下回车键,回显的不再是回车键(请问怎么回显),而是列出并显示了当前目录下的所有文件,这些规则是如何定义的?
当我们按下组合键“Ctrl-C”的时候,当前的进程就终止了,这个又是如何规定的?为什么不是组合键“Shift-B”来完成同样的事?
如果你对键盘足够了解(我了解,但并不足够),就会知道有很多的组合键可以使用,这些组合键分别在不同的系统,不同的终端上如何定义的,谁来规定按下什么键发生什么事?
所有这些问题都可以用行规程来回答。那么什么是行规程?
行规程是一套约定俗成的协议。约定双方可以是计算机和终端(包括输出设备和人体输入设备)。在这个意义上,终端就是所谓的人机接口。
我来简单解释一下。行规程规定了键盘,串口,打印机,显示器等输入输出设备和用户态Shell等程序之间的行为规范,键盘上的按键事件被行规程解释成了Shell可以理解的输入并给出相应的输出。人们要想操作计算机,这套规程是必不可少的,它事实上规定了信息从外部进入计算机的规范。
可以使用stty命令来展示你的终端行规程的配置:
理解行规程
以Linux为例,下图是行规程在整个体系结构中的位置:
我们可以看出信息流的方向,是一个纵向的通路,一端是计算机程序,另一端是某种硬件(这里还有伪终端的概念,参见彻底理解Linux的各种终端类型以及概念),作为对比,我们来看看另外一种方向的数据通路,即横向的通路,典型的例子就是TCP/IP协议栈:
TCP/IP协议通信和终端行规程完全不同,终端行规程完全是一个纵向的协议,而TCP/IP则侧重于横向的对等层通信,和终端行规程作为人机接口不同的是,TCP/IP更重要的作用是处理任意进程之间的通信。但抽掉这种数据通路方向上的不同,剩下的东西它们就是一致的了,即它们都是某种约定俗成的协议,约定的双方是否同质对等造成了唯一的区别。
SLIP的位置
作为一个综合的例子,我们来看点关于SLIP的内容。
SLIP就是Serial Line Internet Protocol(串行线路网际协议)可能现在很少有人再使用它了,毕竟现如今都是以太网和光纤的天下了,谁还会用串口线来传输网络数据包。
但是它在以前很长一段时间一直作为连接运行TCP/IP协议的主机的专用链路存在的。
我们知道,TCP/IP是对等层通信协议,但是最终的数据包不得不通过某种物理介质传输,因此还需要一种纵向的协议才可以让对等层通信得以实现。我们把横向的对等层协议叫做通信协议,而纵向的协议叫做传输协议,行规程事实上就是一种传输协议,SLIP实际上就是一种行规程,SLIP行规程把串口线上传输的字符解释成IP数据报文并向上递送。这种行规程和TCP/IP的关系如下所示:
可以看得出,SLIP作為一中行規程,並沒有把解析後的資料繼續提交到與之綁定的TTY緩衝區,而是將解析後的資料作為IP資料報直接遞送給了TCP/IP協定棧來處理。
這裡摘取百度百科上的一段話:
<span style="font-size: 16px;">SLIP只是一个包组帧协议,仅仅定义了在串行线路上将数据包封装成帧的一系列字符。它没有提供寻址、包类型标识、错误检查/修正或者压缩机制。<br></span>
廣義地來講,其實像乙太網路規範這種也可以叫做某種行規程,畢竟它也是約定IP層軟體和傳輸介質之間行為規範的協議,起到的均是對資料格式化的作用,但由於如今超高速傳輸早就完完全全基於比特流序列,不再透過定義以字元為邊界的區塊來封裝數據,所以再叫做行規程就有點詞不達意了,但本質上都是一樣的,都是定義在某種介質上如何把資料包封裝的協定。
關於unix98偽終端機
關於偽終端的這部分內容參見:SVR4/4.3BSD與Linux對待偽終端的不同方式
全域的視角圖解幾個終端機
好了,是總結的時候了。
在上一篇文章徹底理解Linux的各種終端類型以及概念,我是採用環的方式給出了一個關於終端的總圖,後來有人發來郵件反映,所有的終端類型進入一張圖,雖然是很統一,但是太複雜了,所以本文我還是決定把這些分開,略去比較多的細節,在全局的角度來看一下終端的結構。
站在bash的角度,bash本身並不知道其終端到底是直連的,串口連接的,還是說SSH連過來的,這意味著內核裡有一個適配層,在這個層之上,所有的終端看起來是一模一樣的,在這個層以下,卻盡顯個性:
##我們接下來就來看看這些不同點在哪裡。
本機終端
#序列埠線連接的終端機
SSH偽終端
#Tmux偽終端機
本來是想把Tmux跟Screen一起說的,但是Screen和Tmux原理幾乎是一模一樣,所以就省掉了Screen,這裡只說Tmux:
還是有點複雜是不是?
其實確實比較複雜,這裡只需要知道兩點就好了,首先,把Tmux Server以及它Fork當作不會斷的SSH就好了,其次,當你在一個SSH偽終端機運行Tmux Client的時候,Tmux Client相當於把該SSH偽終端機的pts借給了Tmux Server,Tmux Server和SSHd是並列的。
Tmux Server開啟一對偽終端,自己持有主設備,將次設備繼承給它Fork出來的Bash,此一對進程進入後台,不再歸屬任何終端。
#一旦Tmux Client運行於某個SSH終端,它會把目前終端的pts傳遞給Tmux Server,從而讓Tmux Server作為一個資料代理程式傳遞輸入和輸出。
一旦Tmux Client運行,它就成為了當前Bash的前台進程,通過重定向之後,當前Tmux Client便成為了Bash0的前端,接收Bash0的輸入與輸出。文件句柄轉交後的流程如下:#
<span style="font-size: 16px;">1. 有人在远端的Windows主机上敲入一个字符***“a”***;2. 字符***“a”***经由SSH客户端加密后传输到Linux SSH服务器SSHd并解密;3. 字符***“a”***通过SSHd的ptmx写入4. Tmux Server从pts/2将字符***“a”***读出并写入ptmx;5. Bash0将字符***“a”***从pts/1读出并执行;6. Bash0将***-bash: a: command not found***按原路返回给Windows。<br></span>
注释:关于文件句柄传递
有人说Linux可以靠一个ioctl系统调用在不同进程之间传递文件描述符,然而当你真的去自己尝试时,却发现这是骗人的。那么同样的功能如何来实现?你如何不通过调用open,accept,socket这类系统调用打开一个文件句柄呢?
答案就是使用SCM_RIGHTS。具体怎么做,百度一下,你就知道。
题外话
最后,依然说点题外话。
现如今关于终端等人机接口的内容被淡化了,然而关于TCP/IP的内容却得到了强化,我认为这是不公平的。
当然,这是近来不断提高软件地位而降低硬件地位的后果,大多数人都知道socket如何到socket,却只有很少的人知道socket如何到网线,而后者才是基础。数据从哪里来?
没有数据何谈通信?数据不可能凭空就存在于计算机,它必然靠某种设备从外界输入,比如键盘,扫描仪,传感器等,首先这些设备和计算机之间的数据传输协议才基础中的基础,此后针对数据的加工才会用到TCP/IP,IPC这种对等层通信协议。
随着物联网的发展,关于数据如何进入计算机这个问题还会有很多新的解答,因此以上的局面得以改观。
相关推荐:
以上是最詳細的Linux終端機和Line discipline圖解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

在Linux中,文件和目錄管理使用ls、cd、mkdir、rm、cp、mv命令,權限管理使用chmod、chown、chgrp命令。 1.文件和目錄管理命令如ls-l列出詳細信息,mkdir-p遞歸創建目錄。 2.權限管理命令如chmod755file設置文件權限,chownuserfile改變文件所有者,chgrpgroupfile改變文件所屬組。這些命令基於文件系統結構和用戶、組系統,通過系統調用和元數據實現操作和控制。

MaintenancemodeInuxisAspecialBootenvironmentforforcalsystemmaintenancetasks.itallowsadMinistratorStoperFormTaskSlikerSettingPassingPassingPasswords,RepairingFilesystems,andRecoveringFrombootFailuresFailuresFailuresInamInimAlenimalenimalenrenmentrent.ToEnterMainterMainterMaintErmaintErmaintEncemememodeBoode,Interlecttheboo

Linux的核心組件包括內核、文件系統、Shell、用戶空間與內核空間、設備驅動程序以及性能優化和最佳實踐。 1)內核是系統的核心,管理硬件、內存和進程。 2)文件系統組織數據,支持多種類型如ext4、Btrfs和XFS。 3)Shell是用戶與系統交互的命令中心,支持腳本編寫。 4)用戶空間與內核空間分離,確保系統穩定性。 5)設備驅動程序連接硬件與操作系統。 6)性能優化包括調整系統配置和遵循最佳實踐。

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

Linux的維護模式可以通過GRUB菜單進入,具體步驟為:1)在GRUB菜單中選擇內核並按'e'編輯,2)在'linux'行末添加'single'或'1',3)按Ctrl X啟動。維護模式提供了一個安全環境,適用於系統修復、重置密碼和系統升級等任務。

進入Linux恢復模式的步驟是:1.重啟系統並按特定鍵進入GRUB菜單;2.選擇帶有(recoverymode)的選項;3.在恢復模式菜單中選擇操作,如fsck或root。恢復模式允許你以單用戶模式啟動系統,進行文件系統檢查和修復、編輯配置文件等操作,幫助解決系統問題。

Linux的核心組件包括內核、文件系統、Shell和常用工具。 1.內核管理硬件資源並提供基本服務。 2.文件系統組織和存儲數據。 3.Shell是用戶與系統交互的接口。 4.常用工具幫助完成日常任務。

Linux的基本結構包括內核、文件系統和Shell。 1)內核管理硬件資源,使用uname-r查看版本。 2)EXT4文件系統支持大文件和日誌,使用mkfs.ext4創建。 3)Shell如Bash提供命令行交互,使用ls-l列出文件。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)