当你打开终端并输入命令时会发生什么?(下)

这篇具有很好参考价值的文章主要介绍了当你打开终端并输入命令时会发生什么?(下)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当你打开终端并输入命令时会发生什么?(下)

哈喽大家好,我是咸鱼

我们先来大致回顾一下文章《当你打开终端并输入命令时会发生什么?(上)》的内容

终端设备是由电传打字机演变过来的,电传打字机通过物理线与大型计算机连接在一块来实现输入输出
当你打开终端并输入命令时会发生什么?(下)
当你打开终端并输入命令时会发生什么?(下)
如上图,分别是二战时期的电传打字机和西门子 “Fernscheiber 100” 电传打字机

随着技术的不断发展(尤其是显示技术),带显示屏的终端设备随之诞生
当你打开终端并输入命令时会发生什么?(下)
而现在随着个人电脑的普及,出现了基于屏幕显示的图形用户界面(GUI),演变成了现在的计算机终端

现在的终端大多都是计算机上的一个应用程序,它们通常被称为终端模拟器,充当用户与操作系统交互的界面(比如说 Linux 中的 Xterm、Xshell,Windows 中的控制台),而不必使用专门的终端。输出系统是屏幕,输入系统是键盘

以 Linux 为例,当我们打开终端时,通常会启动一个 shell 进程,用于与用户交互。用户在终端中输入的命令将传递给 shell 进程,然后由 shell 解释和执行这些命令
当你打开终端并输入命令时会发生什么?(下)

这个过程包括将用户输入的命令解析为操作系统可以理解的指令,执行这些指令,并将执行结果返回给终端显示给用户

输入命令

当我们在终端中输入命令时,键盘输入的字符会被转换成相应的字符编码(比如说 backspace 键被转译成 ASCII 字符 0x08

这些字符通过终端写入到 PTY leader,接着 TTY driver 从 PTY leader 中读取字符并存储到 line discipline 中(line discipline 为 PTY 两端之间的中间缓冲区)

不但如此,line discipline 还负责解释来自 PTY leader 的字符然后根据自己的规则去处理它们(比如进行回退、删除字符等,或者处理特殊字符)
当你打开终端并输入命令时会发生什么?(下)
举个例子,line discipline 收到 backspace 时,它会根据自己的规则解释成 ERASE 字符,然后进行编辑,方法是删除最后一个字符

接着将删除操作返回给 PTY leader,这样终端就可以从 PTY leader 那里读取到更改并将其反映在终端显示中

需要注意的是,上面这段过程里字符还没有被写入到 PTY follower 中,只是处在【编辑】部分

当我们在键盘敲下 CTRL+C 时,line discipline 会解释成 INTR (INTERRUPT 的缩写),这时候就会向 PTY follower 发送一个 SIGINT 信号去中断在前台运行的任何进程

如果不是特殊字符(比如输入 ls),line discipline 会将字符返回给 PTY leader,终端程序读取并显示在屏幕上,这就是为什么你在键盘敲一个字符,显示器就会显示一个字符(echo 功能)

现在 shell 进程也会缓冲用户的输入,以实现一些高级的功能:比如命令历史记录或 tab 键自动补全

执行并解析命令

当我们输入完命令之后,就要按下回车键(Enter)来执行命令了

一旦按下回车键,line discipline 解释为换行字符(newline),通常表示为 NL

然后一并将用户的命令转发到 PTY follower ,而 shell 进程跟 follower 相连,shell 拿到命令之后就会去解析并执行

当 shell 进程接收到用户的输入和换行符时,它会开始解析并执行命令。这个过程包括命令解析、查找可执行文件或内置命令,以及执行相应的操作

首先对命令解析成一个一个 token 并进行语法/语义分析,以 ls 命令为例:

  • ls > foo.txt :正确
  • ls > :语法不正确, > 后面缺少内容
  • ls | foo.txt :语义不正确,管道的两端都需要是可运行的进程

然后接着解析那些不是 shell 关键字或者路径的 token,shell 需要知道这些 token 的含义,所以 shell 会去根据下面几个部分去递归查找 token 引用的内容:

  • aliases:命令别名,通常用于缩写复杂的命令(例如 alias ll="ls -lh"
  • function:函数
  • environment variables:环境变量
  • builtins:shell 内嵌命令(例如 cd pwd exit kill
  • PATH executables:shell 可以找到(通过 $PATH 变量)并运行的外部命令

我们可以通过 type 命令知道对应的类型

[root@minion1 ~]# type ll
ll 是 'ls -l --color=auto' 的别名

[root@minion1 ~]# type cd
cd 是 shell 内嵌

[root@minion1 ~]# type python
python 是 /usr/bin/python

与 shell 内嵌命令不同的是,可执行命令是单独的程序或脚本文件,具有执行权限,可以作为单独的进程执行

当用户在 shell 中输入一个命令时,shell 会查找可执行文件的位置,并在找到后创建一个新的子进程来运行该可执行文件,并将相应的命令参数传递给这个新的子进程

我们可以通过 pstree 命令来查看进程之间的关系

返回输出

当 shell 执行完命令之后,把生成的输出写入到 PTY follower ,接着传到 line discipline 中,line discipline 不会处理这些输出,而是转发给 PTY leader,然后终端就会读取并显示到屏幕上
当你打开终端并输入命令时会发生什么?(下)
参考文章:https://www.warp.dev/blog/what-happens-when-you-open-a-terminal-and-enter-ls文章来源地址https://www.toymoban.com/news/detail-760516.html

到了这里,关于当你打开终端并输入命令时会发生什么?(下)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决ubuntu桌面无法打开终端命令行

    打不开终端命令行,主要就是和语言设置有关系 首先用ctrl+alt+f2进入命令界面,输入root,密码登录管理员账号 然后找到语言文件 最后一行加上以下语句后保存 重启后就可以了

    2024年02月11日
    浏览(44)
  • Linux·从 URL 输入到页面展现到底发生什么?

    打开浏览器从输入网址到网页呈现在大家面前,背后到底发生了什么?经历怎么样的一个过程?先给大家来张总体流程图,具体步骤请看下文分解! 总体来说分为以下几个过程: DNS 解析:将域名解析成 IP 地址 TCP 连接:TCP 三次握手 发送 HTTP 请求 服务器处理请求并返回 HTTP 报

    2024年02月16日
    浏览(65)
  • 在浏览器中输入地址之后发生了什么过程?

    当我们在浏览器地址栏中输入某个网址之后,虽然页面内容几乎瞬间就显示出来,但其中经历了很多个步骤。 1.域名解析 网络上各个计算机之间相互通信均是以其IP地址来识别的,而我们输入的网址仅仅是方便我们记忆而取的别名,计算机不能直接识别,所以就需要将输入的

    2024年02月12日
    浏览(41)
  • 浏览器地址栏输入url以后发生了什么

    1.DNS对域名进行解析; 2.建立TCP连接(三次握手); 3.发送HTTP请求; 4.服务器处理请求; 5.返回响应结果; 6.关闭TCP连接(四次挥手); 7.浏览器解析HTML; 8.浏览器布局渲染; 1.浏览器对输入的地址补全,然后DNS域名解析  如果你搜索的是baidu.com的时候,实际访问的还是h

    2024年02月13日
    浏览(52)
  • 从输入URL到网页显示,期间发生了什么(详解)

    Internet上的每一个网页都具有一个唯一的名称标识,通常称之为 URL (Uniform Resource Locator, 统一资源定位器)。它是www的统一资源定位标志,简单地说URL 就是web地址,俗称“网址”。 URL格式 首先浏览器的第一步是对URL进行解析 ,从而 发送给Web服务器的请求信息。 假如说 没有

    2023年04月08日
    浏览(58)
  • 从输入URL到页面展示这中间发生了什么

    浏览器进程 主要负责用户交互、子进程管理和文件储存等功能。 网络进程 是面向渲染进程和浏览器进程等提供网络资源加载。 渲染进程 也称为浏览器内核,JavaScript引擎V8都是运行在该进程中, 默认会为每个标签窗口页面开辟一个独立的进程 ,负责将网络下载的HTML、Java

    2024年02月08日
    浏览(39)
  • 在浏览器中输入URL后都会发生什么

    浏览器补全地址和DNS对域名进行解析; 1当搜索baidu.com,实际访问的是http://www.baidu.com,浏览器会补全地址。 因为一个URL由协议、主机名、路径、搜索内容、哈希组成。 2DNS解析过程:客户机先插本地缓存,找不到再将域名发到DNS服务器,它先查它管理的区域,如果就查本地缓

    2024年02月16日
    浏览(40)
  • 说说地址栏输入 URL 敲下回车后发生了什么?

    简单的分析,从输入  URL 到回车后发生的行为如下: URL解析 DNS 查询 TCP 连接 HTTP 请求 响应请求 页面渲染 首先判断你输入的是一个合法的 URL  还是一个待搜索的,并且根据你输入的内容进行对应操作 URL 的解析第过程中的第一步,一个 url 的结构解析如下: 在之前文

    2024年04月08日
    浏览(39)
  • 【解决】Linux 桌面 无法打开终端 一打就关 闪退 总是退出终端 自定义命令

    原本只是想要每次打开终端,默认是 zsh ,方便使用 oh-my-zsh。但谁能料到这个配置有个史前大坑! 顶部菜单栏的 终端 首选项配置: 未命名 命令 运行自定义命令 命令退出时:退出终端。 只要这条命令出错,或者执行完毕,就会结束退出了 (太痛了!) 然后网上搜半天, 系统

    2024年02月09日
    浏览(42)
  • 面试:浏览器从输入url到渲染页面,发生了什么

    用户输入阶段 合成 URL :浏览区会判断用户输入是合法 URL,比如用户输入的是搜索的,默认的搜索引擎会合成新的,如果符合url规则会根据url协议,在这段内容加上协议合成合法的url      查找缓存 网络进程获取到 URL,先去本地缓存中查找是否有缓存资源,如果有则

    2024年02月06日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包