>  기사  >  운영 및 유지보수  >  Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

小云云
小云云원래의
2017-12-18 11:17:515062검색

라인 규율을 라인 규율로 번역하든, 라인 규율을 선택하는 통일된 기준은 없지만, 이것이 작동 단위가 하나라는 것을 의미하지는 않습니다. 이 기사에서는 Linux 터미널 및 Line 분야에 대한 가장 자세한 그래픽 튜토리얼을 공유하여 도움이 되기를 바랍니다.

라인 프로시저란 무엇입니까

터미널에서 "l" 키를 누르면 터미널은 문자 "l"을 다시 에코한 다음 "s" 키를 누르지만 여전히 문자 "s "가 에코된 다음 Enter 키를 누릅니다. 에코되는 것은 더 이상 Enter 키가 아니지만(에코하는 방법) 현재 디렉터리의 모든 파일이 나열되고 표시됩니다. 이러한 규칙은 어떻게 정의됩니까?

  "Ctrl-C" 키 조합을 누르면 현재 프로세스가 종료됩니다. 어떻게 지정하나요? 동일한 작업을 수행하려면 "Shift-B" 키 조합을 사용하면 안 될까요?

    키보드에 대해 충분히 알고 있다면(알지만 충분하지 않음) 사용할 수 있는 키 조합이 많다는 것을 알게 될 것입니다. 이러한 키 조합은 다른 시스템과 다른 터미널에서 어떻게 정의됩니까? 키를 누르면 어떻게 되나요?

  이 모든 질문은 규칙을 사용하여 답할 수 있습니다. 그렇다면 행동 규칙은 무엇입니까?

 비즈니스 규칙은 합의된 계약의 집합입니다. 합의된 당사자는 컴퓨터와 터미널(출력 장치 및 인간 입력 장치 포함)이 될 수 있습니다. 이런 의미에서 터미널은 소위 인간-기계 인터페이스입니다.

  간단히 설명하겠습니다. 라인 프로시저는 키보드, 직렬 포트, 프린터 및 모니터와 같은 입력 및 출력 장치 간의 동작 사양을 규정하고 키보드의 키 이벤트는 라인 프로시저를 통해 쉘이 이해할 수 있는 입력으로 해석됩니다. 해당 출력을 제공합니다. 이 절차는 사람들이 컴퓨터를 작동하는 데 필수적입니다. 이는 실제로 외부에서 컴퓨터에 입력되는 정보에 대한 사양을 규정합니다.

  stty 명령을 사용하여 터미널 라인 규칙의 구성을 표시할 수 있습니다.

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림


라인 규칙 이해

Linux를 예로 들면 다음 그림은 터미널 라인 규칙의 위치를 ​​보여줍니다. 전체 아키텍처의 라인 규율 :

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

정보 흐름의 방향은 한쪽 끝에는 컴퓨터 프로그램이 있고 다른 쪽 끝에는 일종의 하드웨어가 있는 수직 경로임을 알 수 있습니다(개념도 있음) 여기서는 의사 터미널의 다양한 측면을 살펴보고 Linux 터미널 유형과 개념을 철저히 이해하세요. 비교를 위해 다른 방향의 데이터 경로, 즉 수평 경로를 살펴보겠습니다. 대표적인 예가 TCP/IP 프로토콜입니다. 스택:

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

TCP/IP 프로토콜 통신 및 터미널 터미널 프로토콜은 완전히 수직 프로토콜인 반면 TCP/IP는 터미널과 달리 수평 P2P 계층 통신에 중점을 둡니다. 프로토콜은 인간-기계 인터페이스로서 TCP/IP의 더 중요한 역할은 임의 프로세스 간의 통신을 처리하는 것입니다. 그러나 데이터 경로 방향의 차이를 없애면 나머지 사항은 일관성이 있습니다. 즉, 유일한 차이점은 두 당사자가 동질적이고 동등한지 여부입니다.

SLIP의 위치

포괄적인 예로 SLIP에 대해 살펴보겠습니다.

SLIP은 직렬 회선 인터넷 프로토콜(Serial Line Internet Protocol)입니다. 결국 이제는 이더넷과 광섬유를 사용하여 네트워크 데이터를 전송하는 사람이 거의 없을 것입니다.

  하지만 오랫동안 TCP/IP 프로토콜을 실행하는 호스트를 연결하는 전용 링크로 존재해 왔습니다.

우리는 TCP/IP가 P2P 계층 통신 프로토콜이라는 것을 알고 있지만 최종 데이터 패킷은 일부 물리적 매체를 통해 전송되어야 하므로 P2P 계층 통신을 활성화하려면 수직 프로토콜이 필요합니다. . 수평 피어 계층 프로토콜을 통신 프로토콜이라고 하며, 수직 프로토콜을 전송 프로토콜이라고 합니다. SLIP 라인 프로토콜은 실제로 직렬 포트 라인에서 전송되는 문자를 해석합니다. IP 데이터그램을 위쪽으로 전달합니다. 이 프로토콜과 TCP/IP의 관계는 다음과 같습니다.

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

BOC 절차인 SLIP은 바인딩된 TTY 버퍼에 구문 분석된 데이터를 계속 제출하지 않고, 구문 분석된 데이터를 처리할 IP 데이터그램으로 TCP/IP에 직접 전달하는 것을 볼 수 있습니다.

  다음은 Baidu 백과사전에서 발췌한 내용입니다.

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

실제로 이더넷 사양과 같은 것도 일종의 프로토콜이라고 할 수 있습니다. 이는 결국 IP 계층 소프트웨어 간의 관례이기도 합니다. 행동 간 프로토콜은 데이터 형식화에 중요한 역할을 합니다. 그러나 초고속 전송은 이제 완전히 비트 스트림 시퀀스를 기반으로 하며 더 이상 문자 경계로 블록을 정의하여 데이터를 캡슐화하지 않으므로 프로토콜이라고 부릅니다. 약간 불분명하지만 본질적으로 모두 동일합니다. 이는 특정 매체에서 데이터 패킷을 캡슐화하는 방법을 정의하는 프로토콜입니다.


unix98 의사 터미널 정보

의사 터미널의 이 부분에 대해서는 다음을 참조하세요. SVR4/4.3BSD와 Linux가 의사 터미널을 처리하는 다양한 방법


글로벌 관점의 그림 여러 터미널

자, 이제 마무리할 시간입니다.

  이전 글에서는 리눅스의 다양한 터미널 유형과 개념을 완벽하게 이해했습니다. 터미널의 일반적인 다이어그램을 링 방법을 사용했습니다. 나중에 누군가가 모든 터미널 유형이 입력되었음을 알리는 이메일을 보냈습니다. 하나 다이어그램은 매우 통일되어 있지만 너무 복잡하므로 이 기사에서는 자세한 내용을 생략하고 이들을 분리하여 전체적인 관점에서 터미널의 구조를 살펴보기로 결정했습니다.

  bash의 관점에서 bash 자체는 터미널이 직접 연결되었는지, 직렬 포트에 연결되었는지, SSH를 통해 연결되었는지 알 수 없습니다. 이는 커널에 적응 계층이 있고 이 계층 위에 모든 터미널이 있음을 의미합니다. 똑같지만 이 레이어 아래에는 개성이 넘칩니다.

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

다음으로 이러한 차이점을 살펴보겠습니다.

로컬 터미널

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

직렬 회선으로 연결된 터미널

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

SSH 의사 터미널

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

Tmux 의사 터미널

원래는 Tmux와 Screen을 결합하고 싶었습니다. 네, 하지만 Screen과 Tmux의 원리는 거의 똑같기 때문에 Screen은 생략하고 여기서는 Tmux만 언급합니다.

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

아직 좀 복잡하지 않나요?

  여기서 두 가지 사항만 알면 됩니다. 첫째, Tmux 서버와 해당 포크를 중단 없는 SSH로 취급하십시오. 둘째, SSH 의사 터미널에서 Tmux 클라이언트를 실행할 때. 클라이언트는 SSH 의사 터미널의 pts를 Tmux 서버에 빌려주는 것과 동일하며 SSHd는 병렬입니다.

  • Tmux 서버는 의사 터미널 쌍을 열고 기본 장치 자체를 보유하며 이 프로세스 쌍은 백그라운드로 들어가고 더 이상 어떤 터미널에도 속하지 않습니다.

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

  • Tmux 클라이언트가 SSH 터미널에서 실행되면 현재 터미널의 pts를 Tmux Server로 전달하여 Tmux Server가 입력 및 출력을 전달하는 데이터 프록시 역할을 할 수 있도록 합니다.

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

Tmux 클라이언트가 실행되면 현재 Bash의 포그라운드 프로세스가 됩니다. 리디렉션 후 현재 Tmux 클라이언트는 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为例,下图是行规程在整个体系结构中的位置:

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

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

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

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

SLIP的位置

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

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

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

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

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

BOC 절차인 SLIP은 바인딩된 TTY 버퍼에 구문 분석된 데이터를 계속 제출하지 않고, 구문 분석된 데이터를 처리할 IP 데이터그램으로 TCP/IP에 직접 전달하는 것을 볼 수 있습니다.

  다음은 Baidu 백과사전에서 발췌한 내용입니다.

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

실제로 이더넷 사양과 같은 것도 일종의 프로토콜이라고 할 수 있습니다. 이는 결국 IP 계층 소프트웨어 간의 관례이기도 합니다. 행동 간 프로토콜은 데이터 형식화에 중요한 역할을 합니다. 그러나 초고속 전송은 이제 완전히 비트 스트림 시퀀스를 기반으로 하며 더 이상 문자 경계로 블록을 정의하여 데이터를 캡슐화하지 않으므로 프로토콜이라고 부릅니다. 약간 불분명하지만 본질적으로 모두 동일합니다. 이는 특정 매체에서 데이터 패킷을 캡슐화하는 방법을 정의하는 프로토콜입니다.


unix98 의사 터미널 정보

의사 터미널의 이 부분에 대해서는 다음을 참조하세요. SVR4/4.3BSD와 Linux가 의사 터미널을 처리하는 다양한 방법


글로벌 관점의 그림 여러 터미널

자, 이제 마무리할 시간입니다.

  이전 글에서는 리눅스의 다양한 터미널 유형과 개념을 완벽하게 이해했습니다. 터미널의 일반적인 다이어그램을 링 방법을 사용했습니다. 나중에 누군가가 모든 터미널 유형이 입력되었음을 알리는 이메일을 보냈습니다. 하나 다이어그램은 매우 통일되어 있지만 너무 복잡하므로 이 기사에서는 자세한 내용을 생략하고 이들을 분리하여 전체적인 관점에서 터미널의 구조를 살펴보기로 결정했습니다.

  bash의 관점에서 bash 자체는 터미널이 직접 연결되었는지, 직렬 포트에 연결되었는지, SSH를 통해 연결되었는지 알 수 없습니다. 이는 커널에 적응 계층이 있고 이 계층 위에 모든 터미널이 있음을 의미합니다. 똑같지만 이 레이어 아래에는 개성이 넘칩니다.

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

다음으로 이러한 차이점을 살펴보겠습니다.

로컬 터미널

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

직렬 회선으로 연결된 터미널

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

SSH 의사 터미널

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

Tmux 의사 터미널

원래는 Tmux와 Screen을 결합하고 싶었습니다. 네, 하지만 Screen과 Tmux의 원리는 거의 똑같기 때문에 Screen은 생략하고 여기서는 Tmux만 언급합니다.

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

아직 좀 복잡하지 않나요?

  여기서 두 가지 사항만 알면 됩니다. 첫째, Tmux 서버와 해당 포크를 중단 없는 SSH로 취급하십시오. 둘째, SSH 의사 터미널에서 Tmux 클라이언트를 실행할 때. 클라이언트는 SSH 의사 터미널의 pts를 Tmux 서버에 빌려주는 것과 동일하며 SSHd는 병렬입니다.

  • Tmux 서버는 의사 터미널 쌍을 열고 기본 장치 자체를 보유하며 이 프로세스 쌍은 백그라운드로 들어가고 더 이상 어떤 터미널에도 속하지 않습니다.

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

  • Tmux 클라이언트가 SSH 터미널에서 실행되면 현재 터미널의 pts를 Tmux Server로 전달하여 Tmux Server가 입력 및 출력을 전달하는 데이터 프록시 역할을 할 수 있도록 합니다.

Linux 터미널 및 라인 규율에 대한 가장 자세한 그림

Tmux 클라이언트가 실행되면 현재 Bash의 포그라운드 프로세스가 됩니다. 리디렉션 후 현재 Tmux 클라이언트는 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终端类型的详解

Linux 터미널은 중국어로 잘못된 문자를 표시합니다

Linux 터미널 학습 1

위 내용은 Linux 터미널 및 라인 규율에 대한 가장 자세한 그림의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.