Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

小云云
小云云Original
2017-12-18 11:17:515062Durchsuche

Liniendisziplin, egal ob es sich um Liniendisziplin oder Liniendisziplin handelt, es gibt keinen einheitlichen Standard. Ich wähle Liniendisziplin, aber das bedeutet nicht, dass die Betriebseinheit eine Linie ist. In diesem Artikel stellen wir Ihnen das ausführlichste grafische Tutorial zum Thema Linux-Terminal und Line-Discipline vor und hoffen, Ihnen weiterzuhelfen.

Was ist eine Zeilenprozedur?

Wenn wir auf einem Terminal die Taste „l“ drücken, ändert das Terminal einfach den Buchstaben „l“ Das Echo kam zurück, und dann wurde die Taste „s“ gedrückt, und der Buchstabe „s“ wurde immer noch wiederholt. Dann drückten wir die Eingabetaste, und das Echo war nicht mehr die Eingabetaste (wie man es wiederholt), sondern die Spalte Alle Dateien im aktuellen Verzeichnis werden ausgegeben und angezeigt. Wie sind diese Regeln definiert?

  Wenn wir die Tastenkombination „Strg-C“ drücken, wird der aktuelle Vorgang beendet. Warum nicht die Tastenkombination „Umschalt-B“, um dasselbe zu erreichen?

  Wenn Sie die Tastatur gut genug kennen (ich kenne sie, aber nicht genug), wissen Sie, dass es viele Tastenkombinationen gibt, die auf unterschiedliche Weise verwendet werden können Systeme und unterschiedliche Wie ist es auf dem Terminal definiert und wer bestimmt, was passiert, wenn eine Taste gedrückt wird?

  Alle diese Fragen können mithilfe von Regeln beantwortet werden. Was sind also die Verhaltensregeln?

  Die Regeln sind eine Reihe vereinbarter Vereinbarungen. Bei den vereinbarten Parteien kann es sich um Computer und Terminals (einschließlich Ausgabegeräte und menschliche Eingabegeräte) handeln. In diesem Sinne ist das Terminal die sogenannte Mensch-Maschine-Schnittstelle.

  Lassen Sie es mich kurz erklären. Zeilenprozeduren legen die Verhaltensspezifikationen zwischen Eingabe- und Ausgabegeräten wie Tastaturen, seriellen Schnittstellen, Druckern und Monitoren sowie Programmen wie Benutzermodus-Shells fest. Tastenereignisse auf der Tastatur werden von Zeilenprozeduren in Eingaben interpretiert, die die Shell verstehen und verarbeiten kann eine entsprechende Ausgabe bereitstellen. Dieser Satz von Verfahren ist für die Bedienung von Computern unerlässlich. Er legt tatsächlich die Spezifikationen für Informationen fest, die von außen in den Computer gelangen.

Mit dem stty-Befehl können Sie die Konfiguration Ihrer Terminalleitungsdisziplin anzeigen:

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin


Liniendisziplinen verstehen

Am Beispiel von Linux zeigt die folgende Abbildung die Stellung von Liniendisziplinen in der gesamten Architektur:

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

Wir können sehen, dass die Richtung des Informationsflusses ein vertikaler Kanal ist, mit einem Computerprogramm an einem Ende und einer Art Hardware am anderen Ende (hier gibt es auch das Konzept des Pseudoterminals, Für ein umfassendes Verständnis der verschiedenen Terminaltypen und Konzepte von Linux werfen wir zum Vergleich einen Blick auf den Datenpfad in einer anderen Richtung, nämlich dem horizontalen Pfad. Ein typisches Beispiel ist der TCP/IP-Protokollstapel:

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

Die TCP/IP-Protokollkommunikation unterscheidet sich völlig vom Terminalprotokoll. Das Terminalprotokoll ist vollständig ein vertikales Protokoll, während TCP/IP sich auf die horizontale Peer-Schicht konzentriert Kommunikation unterscheidet sich vom Terminalprotokoll als Mensch-Maschine-Schnittstelle. Die wichtigere Rolle von TCP/IP besteht darin, die Kommunikation zwischen beliebigen Prozessen abzuwickeln. Aber wenn man diesen Unterschied in der Richtung des Datenpfads wegnimmt, sind die übrigen Dinge konsistent, das heißt, es handelt sich bei allen um eine Art konventionelle Vereinbarung, und der einzige Unterschied besteht darin, ob die beiden Parteien der Vereinbarung homogen und gleich sind.

Der Ort von SLIP

Als umfassendes Beispiel schauen wir uns etwas über SLIP an.

SLIP ist Serial Line Internet Protocol (Serial Line Internet Protocol). Es wird mittlerweile von wenigen Menschen dominiert, die es noch nutzen wollen Es wird eine serielle Portleitung zur Übertragung von Netzwerkdatenpaketen verwendet.

  Aber es existiert schon seit langer Zeit als dedizierte Verbindung, die Hosts verbindet, die das TCP/IP-Protokoll ausführen.

Wir wissen, dass TCP/IP ein Peer-to-Peer-Kommunikationsprotokoll ist, aber das endgültige Datenpaket muss über ein physisches Medium übertragen werden, daher ist ein vertikales Peer-Protokoll erforderlich Layer-Kommunikation ist aktiviert. Wir nennen das horizontale Peer-Layer-Protokoll ein Kommunikationsprotokoll und das vertikale Protokoll ein Übertragungsprotokoll. Das SLIP-Leitungsprotokoll interpretiert die auf der seriellen Schnittstelle übertragenen Zeichen IP-Datagramme und nach oben geliefert. Die Beziehung zwischen diesem Protokoll und TCP/IP ist wie folgt:

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

Es ist ersichtlich, dass SLIP als Bank of China-Verfahren die geparsten Daten nicht weiter an den daran gebundenen TTY-Puffer übermittelt, sondern die geparsten Daten direkt als IP-Datagramm an das TCP/ Zur Handhabung wird der IP-Protokollstack verwendet.

  Hier ist ein Auszug aus der Baidu-Enzyklopädie:

<span style="font-size: 16px;">SLIP只是一个包组帧协议,仅仅定义了在串行线路上将数据包封装成帧的一系列字符。它没有提供寻址、包类型标识、错误检查/修正或者压缩机制。<br></span>

Im Großen und Ganzen sind Dinge wie die Ethernet-Spezifikation tatsächlich auch möglich Es handelt sich schließlich auch um ein Protokoll, das Verhaltensspezifikationen zwischen IP-Layer-Software und Übertragungsmedien festlegt. Es spielt jedoch eine Rolle bei der Datenformatierung Bitströme kapseln Daten nicht mehr durch die Definition von durch Zeichen begrenzten Blöcken, daher ist es etwas unklar, sie als Zeilenprozeduren zu bezeichnen, aber sie definieren alle, wie Datenpakete auf einem bestimmten Medium gekapselt werden.


Über das Unix98-Pseudo-Terminal

Diesen Teil über Pseudo-Terminal finden Sie unter: Wie SVR4/4.3BSD und Linux behandelt Pseudo-Terminals auf unterschiedliche Weise


Veranschaulichung mehrerer Terminals aus einer globalen Perspektive

Okay, es ist Zeit für eine Zusammenfassung.

  Im vorherigen Artikel habe ich die verschiedenen Terminaltypen und Konzepte von Linux gründlich verstanden. Ich habe eine Ringmethode verwendet, um ein allgemeines Diagramm des Terminals zu erstellen Um zu reflektieren, geben alle Terminaltypen ein Bild ein. Obwohl es sehr einheitlich ist, ist es zu kompliziert. Daher habe ich in diesem Artikel beschlossen, diese zu trennen, weitere Details wegzulassen und die Struktur des Terminals aus einer globalen Perspektive zu betrachten.

Aus Sicht von Bash weiß die Bash selbst nicht, ob ihr Terminal direkt, über die serielle Schnittstelle oder über SSH verbunden ist. Dies bedeutet, dass es im Kernel ein entsprechendes Terminal gibt . Passende Ebene, über dieser Ebene sehen alle Terminals genau gleich aus, aber unter dieser Ebene zeigen sie ihre Individualität:

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

uns Nehmen wir ein Schauen Sie sich als nächstes diese Unterschiede an.

Lokales Terminal

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

Terminal über serielle Leitung verbunden

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

SSH-Pseudoterminal

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

Tmux-Pseudoterminal

Ursprünglich wollte ich gemeinsam über Tmux und Screen sprechen, aber die Prinzipien von Screen und Tmux sind fast identisch, daher habe ich Screen weggelassen und hier nur über Tmux gesprochen:

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

Es ist immer noch etwas kompliziert, oder?

   Es ist eigentlich ziemlich kompliziert. Sie müssen hier nur zwei Punkte kennen: Erstens, wenn Sie einen SSH-Pseudo-Terminal verwenden Läuft Tmux Client, Tmux Client entspricht dem Verleihen der Punkte des SSH-Pseudoterminals an Tmux Server und SSHd sind parallel.

  • Tmux Server öffnet ein Paar Pseudo-Terminals, hält das Hauptgerät selbst und erbt das sekundäre Gerät an den Bash, in den es eingeht Der Hintergrund gehört keinem Terminal mehr.

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

  • Sobald der Tmux-Client in einem SSH-Terminal ausgeführt wird, speichert er die Punkte des aktuelles Terminal Wird an den Tmux-Server übergeben, sodass der Tmux-Server als Daten-Proxy für die Weitergabe von Eingaben und Ausgaben fungieren kann.

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

Sobald der Tmux-Client ausgeführt wird, wird er zum Vordergrundprozess des aktuellen Bash. Nach der Umleitung wird der aktuelle Tmux-Client Es wird zum Frontend von Bash0 und empfängt die Eingabe und Ausgabe von Bash0. Der Vorgang nach der Übertragung des Dateihandles ist wie folgt:

<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命令来展示你的终端行规程的配置:

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin


理解行规程

以Linux为例,下图是行规程在整个体系结构中的位置:

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

我们可以看出信息流的方向,是一个纵向的通路,一端是计算机程序,另一端是某种硬件(这里还有伪终端的概念,参见彻底理解Linux的各种终端类型以及概念),作为对比,我们来看看另外一种方向的数据通路,即横向的通路,典型的例子就是TCP/IP协议栈:

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

TCP/IP协议通信和终端行规程完全不同,终端行规程完全是一个纵向的协议,而TCP/IP则侧重于横向的对等层通信,和终端行规程作为人机接口不同的是,TCP/IP更重要的作用是处理任意进程之间的通信。但抽掉这种数据通路方向上的不同,剩下的东西它们就是一致的了,即它们都是某种约定俗成的协议,约定的双方是否同质对等造成了唯一的区别。

SLIP的位置

作为一个综合的例子,我们来看点关于SLIP的内容。

  SLIP就是Serial Line Internet Protocol(串行线路网际协议)可能现在很少有人再使用它了,毕竟现如今都是以太网和光纤的天下了,谁还会用串口线来传输网络数据包。

  但是它在以前很长一段时间一直作为连接运行TCP/IP协议的主机的专用链路存在的。

  我们知道,TCP/IP是对等层通信协议,但是最终的数据包不得不通过某种物理介质传输,因此还需要一种纵向的协议才可以让对等层通信得以实现。我们把横向的对等层协议叫做通信协议,而纵向的协议叫做传输协议,行规程事实上就是一种传输协议,SLIP实际上就是一种行规程,SLIP行规程把串口线上传输的字符解释成IP数据报文并向上递送。这种行规程和TCP/IP的关系如下所示:

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

Es ist ersichtlich, dass SLIP als Bank of China-Verfahren die geparsten Daten nicht weiter an den daran gebundenen TTY-Puffer übermittelt, sondern die geparsten Daten direkt als IP-Datagramm an das TCP/ Zur Handhabung wird der IP-Protokollstack verwendet.

  Hier ist ein Auszug aus der Baidu-Enzyklopädie:

<span style="font-size: 16px;">SLIP只是一个包组帧协议,仅仅定义了在串行线路上将数据包封装成帧的一系列字符。它没有提供寻址、包类型标识、错误检查/修正或者压缩机制。<br></span>

Im Großen und Ganzen sind Dinge wie die Ethernet-Spezifikation tatsächlich auch möglich Es handelt sich schließlich auch um ein Protokoll, das Verhaltensspezifikationen zwischen IP-Layer-Software und Übertragungsmedien festlegt. Es spielt jedoch eine Rolle bei der Datenformatierung Bitströme kapseln Daten nicht mehr durch die Definition von durch Zeichen begrenzten Blöcken, daher ist es etwas unklar, sie als Zeilenprozeduren zu bezeichnen, aber sie definieren alle, wie Datenpakete auf einem bestimmten Medium gekapselt werden.


Über das Unix98-Pseudo-Terminal

Diesen Teil über Pseudo-Terminal finden Sie unter: Wie SVR4/4.3BSD und Linux behandelt Pseudo-Terminals auf unterschiedliche Weise


Veranschaulichung mehrerer Terminals aus einer globalen Perspektive

Okay, es ist Zeit für eine Zusammenfassung.

  Im vorherigen Artikel habe ich die verschiedenen Terminaltypen und Konzepte von Linux gründlich verstanden. Ich habe eine Ringmethode verwendet, um ein allgemeines Diagramm des Terminals zu erstellen Um zu reflektieren, geben alle Terminaltypen ein Bild ein. Obwohl es sehr einheitlich ist, ist es zu kompliziert. Daher habe ich in diesem Artikel beschlossen, diese zu trennen, weitere Details wegzulassen und die Struktur des Terminals aus einer globalen Perspektive zu betrachten.

Aus Sicht von Bash weiß die Bash selbst nicht, ob ihr Terminal direkt, über die serielle Schnittstelle oder über SSH verbunden ist. Dies bedeutet, dass es im Kernel ein entsprechendes Terminal gibt . Passende Ebene, über dieser Ebene sehen alle Terminals genau gleich aus, aber unter dieser Ebene zeigen sie ihre Individualität:

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

uns Nehmen wir ein Schauen Sie sich als nächstes diese Unterschiede an.

Lokales Terminal

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

Terminal über serielle Leitung verbunden

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

SSH-Pseudoterminal

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

Tmux-Pseudoterminal

Ursprünglich wollte ich gemeinsam über Tmux und Screen sprechen, aber die Prinzipien von Screen und Tmux sind fast identisch, daher habe ich Screen weggelassen und hier nur über Tmux gesprochen:

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

Es ist immer noch etwas kompliziert, oder?

   Es ist eigentlich ziemlich kompliziert. Sie müssen hier nur zwei Punkte kennen: Erstens, wenn Sie einen SSH-Pseudo-Terminal verwenden Läuft Tmux Client, Tmux Client entspricht dem Verleihen der Punkte des SSH-Pseudoterminals an Tmux Server und SSHd sind parallel.

  • Tmux Server öffnet ein Paar Pseudo-Terminals, hält das Hauptgerät selbst und erbt das sekundäre Gerät an den Bash, in den es eingeht Der Hintergrund gehört keinem Terminal mehr.

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

  • Sobald der Tmux-Client in einem SSH-Terminal ausgeführt wird, speichert er die Punkte des aktuelles Terminal Wird an den Tmux-Server übergeben, sodass der Tmux-Server als Daten-Proxy für die Weitergabe von Eingaben und Ausgaben fungieren kann.

Die detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin

Sobald der Tmux-Client ausgeführt wird, wird er zum Vordergrundprozess des aktuellen Bash. Nach der Umleitung wird der aktuelle Tmux-Client Es wird zum Frontend von Bash0 und empfängt die Eingabe und Ausgabe von Bash0. Der Vorgang nach der Übertragung des Dateihandles ist wie folgt:

<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终端类型的详解

Linux-Terminal zeigt verstümmelte Zeichen auf Chinesisch an

Linux-Terminal lernt eins

Das obige ist der detaillierte Inhalt vonDie detaillierteste Darstellung der Linux-Terminal- und Line-Disziplin. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn