Maison  >  Article  >  Opération et maintenance  >  L'illustration la plus détaillée du terminal Linux et de la discipline Line

L'illustration la plus détaillée du terminal Linux et de la discipline Line

小云云
小云云original
2017-12-18 11:17:515062parcourir

Discipline de ligne, qu'elle soit traduite par discipline de ligne ou discipline de ligne, il n'y a pas de norme unifiée. Je choisis la discipline de ligne, mais cela ne signifie pas que l'unité d'opération est une seule ligne. Dans cet article, nous partagerons avec vous le tutoriel graphique le plus détaillé sur le terminal Linux et la discipline Line, en espérant vous aider.

Qu'est-ce qu'une procédure de ligne

Quand on appuie sur la touche "l" sur un terminal, le terminal change juste la lettre "l" L'écho est revenu, puis la touche "s" a été enfoncée, et la lettre "s" était toujours répercutée. Ensuite, nous avons appuyé sur la touche Entrée, et l'écho n'était plus la touche Entrée (comment l'écho), mais la. colonne Tous les fichiers du répertoire courant sont exportés et affichés. Comment ces règles sont-elles définies ?

  Lorsque nous appuyons sur la combinaison de touches "Ctrl-C", le processus en cours est terminé. Comment cela est-il spécifié ? Pourquoi pas la combinaison de touches « Shift-B » pour accomplir la même chose ?

  Si vous connaissez assez bien le clavier (je le connais, mais pas assez), vous saurez qu'il existe de nombreuses combinaisons de touches qui peuvent être utilisées. Ces combinaisons de touches sont utilisées de différentes manières. systèmes et différents Comment est-il défini sur le terminal, et qui détermine ce qui se passe lorsqu'une touche est enfoncée ?

  Toutes ces questions peuvent trouver une réponse à l'aide de règles. Alors, quelles sont les règles de conduite ?

  Les règles sont un ensemble d'accords convenus. Les parties convenues peuvent être des ordinateurs et des terminaux (y compris des périphériques de sortie et des périphériques d'entrée humaine). En ce sens, le terminal est ce qu’on appelle l’interface homme-machine.

  Laissez-moi vous expliquer brièvement. Les procédures de ligne stipulent les spécifications comportementales entre les périphériques d'entrée et de sortie tels que les claviers, les ports série, les imprimantes et les moniteurs, et les programmes tels que les shells en mode utilisateur. Les événements de touche du clavier sont interprétés par des procédures de ligne en entrée que le shell peut comprendre et. fournir une sortie correspondante. Cet ensemble de procédures est essentiel pour permettre aux utilisateurs d'utiliser des ordinateurs. Il stipule en fait les spécifications relatives aux informations entrant dans l'ordinateur de l'extérieur.

Vous pouvez utiliser la commande stty pour afficher la configuration de votre discipline de ligne de terminal :

Lillustration la plus détaillée du terminal Linux et de la discipline Line


Comprendre les disciplines de ligne

En prenant Linux comme exemple, la figure suivante montre la position des disciplines de ligne dans l'ensemble de l'architecture :

Lillustration la plus détaillée du terminal Linux et de la discipline Line

On peut voir que la direction du flux d'informations est un canal vertical, avec un programme informatique à une extrémité et une sorte de matériel à l'autre extrémité (il y a aussi la notion de pseudo-terminal ici, voir pour une compréhension approfondie des différents types de terminaux et concepts de Linux), à titre de comparaison, examinons le chemin des données dans une autre direction, c'est-à-dire le chemin horizontal. Un exemple typique est la pile de protocole TCP/IP : <.>

Lillustration la plus détaillée du terminal Linux et de la discipline Line

La communication du protocole TCP/IP est complètement différente du protocole du terminal. Le protocole du terminal est complètement un protocole vertical, tandis que TCP/IP se concentre sur la couche homologue horizontale. communication. Il est différent du protocole de terminal en tant qu'interface homme-machine, le rôle le plus important de TCP/IP est de gérer la communication entre tous les processus. Mais en faisant abstraction de cette différence dans la direction du chemin des données, le reste est cohérent, c'est-à-dire qu'il s'agit tous d'accords certains. La seule différence est de savoir si les deux parties sont homogènes et égales.

L'emplacement de SLIP

À titre d'exemple complet, regardons quelque chose à propos de SLIP.

SLIP est Serial Line Internet Protocol (Serial Line Internet Protocol). Peut-être que peu de gens l'utilisent encore. Après tout, il est désormais dominé par Ethernet et la fibre optique. Est-ce qu'une ligne de port série sera utilisée pour transmettre les paquets de données réseau.

  Mais il existe depuis longtemps sous la forme d'un lien dédié reliant les hôtes exécutant le protocole TCP/IP.

Nous savons que TCP/IP est un protocole de communication peer-to-peer, mais le paquet de données final doit être transmis via un support physique, un protocole vertical est donc nécessaire. la communication entre les couches est activée. Nous appelons le protocole de couche homologue horizontale un protocole de communication et le protocole vertical un protocole de transmission. Le protocole de ligne est en fait un protocole de transmission. Le protocole de ligne SLIP interprète les caractères transmis sur la ligne du port série. Datagrammes IP et livrés vers le haut. La relation entre ce protocole et TCP/IP est la suivante :

Lillustration la plus détaillée du terminal Linux et de la discipline Line

On peut voir que SLIP, en tant que procédure BOC, ne continue pas à soumettre les données analysées au tampon TTY qui lui est lié, mais transmet directement les données analysées sous forme de datagramme IP au protocole TCP/IP. stack est utilisé pour le gérer.

  Voici un extrait de l'Encyclopédie Baidu :

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

D'une manière générale, en fait, des choses comme la spécification Ethernet sont également possibles. être appelé un certain protocole. Après tout, c'est aussi un protocole qui stipule des spécifications comportementales entre le logiciel de couche IP et les supports de transmission. Cependant, parce que la transmission ultra-rapide d'aujourd'hui a longtemps été entièrement basée sur. Les flux binaires. Les séquences n'encapsulent plus les données en définissant des blocs délimités par des caractères, il est donc un peu flou de les appeler procédures de ligne, mais elles sont essentiellement les mêmes qui définissent comment encapsuler les paquets de données sur un certain support.


À propos du pseudo-terminal Unix98

Pour cette partie sur le pseudo-terminal, veuillez vous référer à : Comment SVR4/4.3BSD et Linux traite les pseudo-terminaux de différentes manières


Illustrer plusieurs terminaux dans une perspective globale

D'accord, il est temps de résumer.

  Dans l'article précédent, j'ai bien compris les différents types et concepts de terminaux de Linux. J'ai utilisé une méthode en anneau pour donner un schéma général du terminal. Plus tard, quelqu'un m'a envoyé un e-mail. pour refléter, tous les types de terminaux entrent dans une seule image, bien qu'elle soit très unifiée, mais c'est trop compliqué, j'ai donc décidé de les séparer dans cet article, d'omettre plus de détails et d'examiner la structure du terminal d'un point de vue global.

Du point de vue de bash, bash lui-même ne sait pas si son terminal est directement connecté, connecté au port série ou connecté via SSH. Cela signifie qu'il existe un terminal approprié dans le noyau. . Couche correspondante, au-dessus de cette couche, tous les terminaux se ressemblent exactement, mais en dessous de cette couche, ils montrent leur individualité :

Lillustration la plus détaillée du terminal Linux et de la discipline Line

nous Prenons un. regardez ces différences ensuite.

Terminal local

Lillustration la plus détaillée du terminal Linux et de la discipline Line

Terminal connecté par câble série

Lillustration la plus détaillée du terminal Linux et de la discipline Line

Pseudo-terminal SSH

Lillustration la plus détaillée du terminal Linux et de la discipline Line

Pseudo-terminal Tmux

À l'origine, je voulais parler de Tmux et Screen ensemble, mais les principes de Screen et Tmux sont presque exactement les mêmes, j'ai donc omis Screen et n'ai parlé que de Tmux ici :

Lillustration la plus détaillée du terminal Linux et de la discipline Line

C'est quand même un peu compliqué, non ?

   C'est en fait assez compliqué. Il vous suffit de connaître deux points ici. Premièrement, traitez le serveur Tmux et son Fork comme un SSH ininterrompu. exécute le client Tmux, le client Tmux équivaut à prêter les pts du pseudo-terminal SSH au serveur Tmux. Le serveur Tmux et SSHd sont parallèles.

  • Le serveur Tmux ouvre une paire de pseudo-terminaux, contient le périphérique principal lui-même et hérite du périphérique secondaire du Bash qu'il forke. Cette paire de processus entre dans le. arrière-plan. N’appartient plus à aucun terminal.

Lillustration la plus détaillée du terminal Linux et de la discipline Line

  • Une fois le client Tmux exécuté dans un terminal SSH, il enregistrera les points du terminal actuel Transmis au serveur Tmux, permettant au serveur Tmux d'agir comme un proxy de données pour transmettre les entrées et les sorties.

Lillustration la plus détaillée du terminal Linux et de la discipline Line

Une fois le client Tmux exécuté, il devient le processus de premier plan du Bash actuel. Après la redirection, le client Tmux actuel. Il devient le frontal de Bash0, recevant l'entrée et la sortie de Bash0. Le processus après le transfert du descripteur de fichier est le suivant :

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

Lillustration la plus détaillée du terminal Linux et de la discipline Line


理解行规程

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

Lillustration la plus détaillée du terminal Linux et de la discipline Line

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

Lillustration la plus détaillée du terminal Linux et de la discipline Line

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

SLIP的位置

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

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

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

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

Lillustration la plus détaillée du terminal Linux et de la discipline Line

On peut voir que SLIP, en tant que procédure BOC, ne continue pas à soumettre les données analysées au tampon TTY qui lui est lié, mais transmet directement les données analysées sous forme de datagramme IP au protocole TCP/IP. stack est utilisé pour le gérer.

  Voici un extrait de l'Encyclopédie Baidu :

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

D'une manière générale, en fait, des choses comme la spécification Ethernet sont également possibles. être appelé un certain protocole. Après tout, c'est aussi un protocole qui stipule des spécifications comportementales entre le logiciel de couche IP et les supports de transmission. Cependant, parce que la transmission ultra-rapide d'aujourd'hui a longtemps été entièrement basée sur. Les flux binaires. Les séquences n'encapsulent plus les données en définissant des blocs délimités par des caractères, il est donc un peu flou de les appeler procédures de ligne, mais elles sont essentiellement les mêmes qui définissent comment encapsuler les paquets de données sur un certain support.


À propos du pseudo-terminal Unix98

Pour cette partie sur le pseudo-terminal, veuillez vous référer à : Comment SVR4/4.3BSD et Linux traite les pseudo-terminaux de différentes manières


Illustrer plusieurs terminaux dans une perspective globale

D'accord, il est temps de résumer.

  Dans l'article précédent, j'ai bien compris les différents types et concepts de terminaux de Linux. J'ai utilisé une méthode en anneau pour donner un schéma général du terminal. Plus tard, quelqu'un m'a envoyé un e-mail. pour refléter, tous les types de terminaux entrent dans une seule image, bien qu'elle soit très unifiée, mais c'est trop compliqué, j'ai donc décidé de les séparer dans cet article, d'omettre plus de détails et d'examiner la structure du terminal d'un point de vue global.

Du point de vue de bash, bash lui-même ne sait pas si son terminal est directement connecté, connecté au port série ou connecté via SSH. Cela signifie qu'il existe un terminal approprié dans le noyau. . Couche correspondante, au-dessus de cette couche, tous les terminaux se ressemblent exactement, mais en dessous de cette couche, ils montrent leur individualité :

Lillustration la plus détaillée du terminal Linux et de la discipline Line

nous Prenons un. regardez ces différences ensuite.

Terminal local

Lillustration la plus détaillée du terminal Linux et de la discipline Line

Terminal connecté par câble série

Lillustration la plus détaillée du terminal Linux et de la discipline Line

Pseudo-terminal SSH

Lillustration la plus détaillée du terminal Linux et de la discipline Line

Pseudo-terminal Tmux

À l'origine, je voulais parler de Tmux et Screen ensemble, mais les principes de Screen et Tmux sont presque exactement les mêmes, j'ai donc omis Screen et n'ai parlé que de Tmux ici :

Lillustration la plus détaillée du terminal Linux et de la discipline Line

C'est quand même un peu compliqué, non ?

   C'est en fait assez compliqué. Il vous suffit de connaître deux points ici. Premièrement, traitez le serveur Tmux et son Fork comme un SSH ininterrompu. exécute le client Tmux, le client Tmux équivaut à prêter les pts du pseudo-terminal SSH au serveur Tmux. Le serveur Tmux et SSHd sont parallèles.

  • Le serveur Tmux ouvre une paire de pseudo-terminaux, contient le périphérique principal lui-même et hérite du périphérique secondaire du Bash qu'il forke. Cette paire de processus entre dans le. arrière-plan. N’appartient plus à aucun terminal.

Lillustration la plus détaillée du terminal Linux et de la discipline Line

  • Une fois le client Tmux exécuté dans un terminal SSH, il enregistrera les points du terminal actuel Transmis au serveur Tmux, permettant au serveur Tmux d'agir comme un proxy de données pour transmettre les entrées et les sorties.

Lillustration la plus détaillée du terminal Linux et de la discipline Line

Une fois le client Tmux exécuté, il devient le processus de premier plan du Bash actuel. Après la redirection, le client Tmux actuel. Il devient le frontal de Bash0, recevant l'entrée et la sortie de Bash0. Le processus après le transfert du descripteur de fichier est le suivant :

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

Le terminal Linux affiche des caractères tronqués en chinois

Le terminal Linux en apprend un

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn