国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

當(dāng)你打開終端并輸入命令時會發(fā)生什么?(下)

這篇具有很好參考價值的文章主要介紹了當(dāng)你打開終端并輸入命令時會發(fā)生什么?(下)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

當(dāng)你打開終端并輸入命令時會發(fā)生什么?(下)

哈嘍大家好,我是咸魚

我們先來大致回顧一下文章《當(dāng)你打開終端并輸入命令時會發(fā)生什么?(上)》的內(nèi)容

終端設(shè)備是由電傳打字機(jī)演變過來的,電傳打字機(jī)通過物理線與大型計(jì)算機(jī)連接在一塊來實(shí)現(xiàn)輸入輸出
當(dāng)你打開終端并輸入命令時會發(fā)生什么?(下)
當(dāng)你打開終端并輸入命令時會發(fā)生什么?(下)
如上圖,分別是二戰(zhàn)時期的電傳打字機(jī)和西門子 “Fernscheiber 100” 電傳打字機(jī)

隨著技術(shù)的不斷發(fā)展(尤其是顯示技術(shù)),帶顯示屏的終端設(shè)備隨之誕生
當(dāng)你打開終端并輸入命令時會發(fā)生什么?(下)
而現(xiàn)在隨著個人電腦的普及,出現(xiàn)了基于屏幕顯示的圖形用戶界面(GUI),演變成了現(xiàn)在的計(jì)算機(jī)終端

現(xiàn)在的終端大多都是計(jì)算機(jī)上的一個應(yīng)用程序,它們通常被稱為終端模擬器,充當(dāng)用戶與操作系統(tǒng)交互的界面(比如說 Linux 中的 Xterm、Xshell,Windows 中的控制臺),而不必使用專門的終端。輸出系統(tǒng)是屏幕,輸入系統(tǒng)是鍵盤

以 Linux 為例,當(dāng)我們打開終端時,通常會啟動一個 shell 進(jìn)程,用于與用戶交互。用戶在終端中輸入的命令將傳遞給 shell 進(jìn)程,然后由 shell 解釋和執(zhí)行這些命令
當(dāng)你打開終端并輸入命令時會發(fā)生什么?(下)

這個過程包括將用戶輸入的命令解析為操作系統(tǒng)可以理解的指令,執(zhí)行這些指令,并將執(zhí)行結(jié)果返回給終端顯示給用戶

輸入命令

當(dāng)我們在終端中輸入命令時,鍵盤輸入的字符會被轉(zhuǎn)換成相應(yīng)的字符編碼(比如說 backspace 鍵被轉(zhuǎn)譯成 ASCII 字符 0x08

這些字符通過終端寫入到 PTY leader,接著 TTY driver 從 PTY leader 中讀取字符并存儲到 line discipline 中(line discipline 為 PTY 兩端之間的中間緩沖區(qū))

不但如此,line discipline 還負(fù)責(zé)解釋來自 PTY leader 的字符然后根據(jù)自己的規(guī)則去處理它們(比如進(jìn)行回退、刪除字符等,或者處理特殊字符)
當(dāng)你打開終端并輸入命令時會發(fā)生什么?(下)
舉個例子,line discipline 收到 backspace 時,它會根據(jù)自己的規(guī)則解釋成 ERASE 字符,然后進(jìn)行編輯,方法是刪除最后一個字符

接著將刪除操作返回給 PTY leader,這樣終端就可以從 PTY leader 那里讀取到更改并將其反映在終端顯示中

需要注意的是,上面這段過程里字符還沒有被寫入到 PTY follower 中,只是處在【編輯】部分

當(dāng)我們在鍵盤敲下 CTRL+C 時,line discipline 會解釋成 INTR (INTERRUPT 的縮寫),這時候就會向 PTY follower 發(fā)送一個 SIGINT 信號去中斷在前臺運(yùn)行的任何進(jìn)程

如果不是特殊字符(比如輸入 ls),line discipline 會將字符返回給 PTY leader,終端程序讀取并顯示在屏幕上,這就是為什么你在鍵盤敲一個字符,顯示器就會顯示一個字符(echo 功能)

現(xiàn)在 shell 進(jìn)程也會緩沖用戶的輸入,以實(shí)現(xiàn)一些高級的功能:比如命令歷史記錄或 tab 鍵自動補(bǔ)全

執(zhí)行并解析命令

當(dāng)我們輸入完命令之后,就要按下回車鍵(Enter)來執(zhí)行命令了

一旦按下回車鍵,line discipline 解釋為換行字符(newline),通常表示為 NL。

然后一并將用戶的命令轉(zhuǎn)發(fā)到 PTY follower ,而 shell 進(jìn)程跟 follower 相連,shell 拿到命令之后就會去解析并執(zhí)行

當(dāng) shell 進(jìn)程接收到用戶的輸入和換行符時,它會開始解析并執(zhí)行命令。這個過程包括命令解析、查找可執(zhí)行文件或內(nèi)置命令,以及執(zhí)行相應(yīng)的操作

首先對命令解析成一個一個 token 并進(jìn)行語法/語義分析,以 ls 命令為例:

  • ls > foo.txt :正確
  • ls > :語法不正確, > 后面缺少內(nèi)容
  • ls | foo.txt :語義不正確,管道的兩端都需要是可運(yùn)行的進(jìn)程

然后接著解析那些不是 shell 關(guān)鍵字或者路徑的 token,shell 需要知道這些 token 的含義,所以 shell 會去根據(jù)下面幾個部分去遞歸查找 token 引用的內(nèi)容:

  • aliases:命令別名,通常用于縮寫復(fù)雜的命令(例如 alias ll="ls -lh"
  • function:函數(shù)
  • environment variables:環(huán)境變量
  • builtins:shell 內(nèi)嵌命令(例如 cd pwd exit kill
  • PATH executables:shell 可以找到(通過 $PATH 變量)并運(yùn)行的外部命令

我們可以通過 type 命令知道對應(yīng)的類型

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

[root@minion1 ~]# type cd
cd 是 shell 內(nèi)嵌

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

與 shell 內(nèi)嵌命令不同的是,可執(zhí)行命令是單獨(dú)的程序或腳本文件,具有執(zhí)行權(quán)限,可以作為單獨(dú)的進(jìn)程執(zhí)行

當(dāng)用戶在 shell 中輸入一個命令時,shell 會查找可執(zhí)行文件的位置,并在找到后創(chuàng)建一個新的子進(jìn)程來運(yùn)行該可執(zhí)行文件,并將相應(yīng)的命令參數(shù)傳遞給這個新的子進(jìn)程

我們可以通過 pstree 命令來查看進(jìn)程之間的關(guān)系

返回輸出

當(dāng) shell 執(zhí)行完命令之后,把生成的輸出寫入到 PTY follower ,接著傳到 line discipline 中,line discipline 不會處理這些輸出,而是轉(zhuǎn)發(fā)給 PTY leader,然后終端就會讀取并顯示到屏幕上
當(dāng)你打開終端并輸入命令時會發(fā)生什么?(下)
參考文章:https://www.warp.dev/blog/what-happens-when-you-open-a-terminal-and-enter-ls文章來源地址http://www.zghlxwxcb.cn/news/detail-760516.html

到了這里,關(guān)于當(dāng)你打開終端并輸入命令時會發(fā)生什么?(下)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 解決ubuntu桌面無法打開終端命令行

    打不開終端命令行,主要就是和語言設(shè)置有關(guān)系 首先用ctrl+alt+f2進(jìn)入命令界面,輸入root,密碼登錄管理員賬號 然后找到語言文件 最后一行加上以下語句后保存 重啟后就可以了

    2024年02月11日
    瀏覽(20)
  • 在瀏覽器中輸入地址之后發(fā)生了什么過程?

    當(dāng)我們在瀏覽器地址欄中輸入某個網(wǎng)址之后,雖然頁面內(nèi)容幾乎瞬間就顯示出來,但其中經(jīng)歷了很多個步驟。 1.域名解析 網(wǎng)絡(luò)上各個計(jì)算機(jī)之間相互通信均是以其IP地址來識別的,而我們輸入的網(wǎng)址僅僅是方便我們記憶而取的別名,計(jì)算機(jī)不能直接識別,所以就需要將輸入的

    2024年02月12日
    瀏覽(21)
  • 瀏覽器地址欄輸入url以后發(fā)生了什么

    1.DNS對域名進(jìn)行解析; 2.建立TCP連接(三次握手); 3.發(fā)送HTTP請求; 4.服務(wù)器處理請求; 5.返回響應(yīng)結(jié)果; 6.關(guān)閉TCP連接(四次揮手); 7.瀏覽器解析HTML; 8.瀏覽器布局渲染; 1.瀏覽器對輸入的地址補(bǔ)全,然后DNS域名解析 ?如果你搜索的是baidu.com的時候,實(shí)際訪問的還是h

    2024年02月13日
    瀏覽(22)
  • 從輸入URL到頁面展示這中間發(fā)生了什么

    從輸入URL到頁面展示這中間發(fā)生了什么

    瀏覽器進(jìn)程 主要負(fù)責(zé)用戶交互、子進(jìn)程管理和文件儲存等功能。 網(wǎng)絡(luò)進(jìn)程 是面向渲染進(jìn)程和瀏覽器進(jìn)程等提供網(wǎng)絡(luò)資源加載。 渲染進(jìn)程 也稱為瀏覽器內(nèi)核,JavaScript引擎V8都是運(yùn)行在該進(jìn)程中, 默認(rèn)會為每個標(biāo)簽窗口頁面開辟一個獨(dú)立的進(jìn)程 ,負(fù)責(zé)將網(wǎng)絡(luò)下載的HTML、Java

    2024年02月08日
    瀏覽(16)
  • 從輸入URL到網(wǎng)頁顯示,期間發(fā)生了什么(詳解)

    從輸入URL到網(wǎng)頁顯示,期間發(fā)生了什么(詳解)

    Internet上的每一個網(wǎng)頁都具有一個唯一的名稱標(biāo)識,通常稱之為 URL (Uniform Resource Locator, 統(tǒng)一資源定位器)。它是www的統(tǒng)一資源定位標(biāo)志,簡單地說URL 就是web地址,俗稱“網(wǎng)址”。 URL格式 首先瀏覽器的第一步是對URL進(jìn)行解析 ,從而 發(fā)送給Web服務(wù)器的請求信息。 假如說 沒有

    2023年04月08日
    瀏覽(20)
  • Linux·從 URL 輸入到頁面展現(xiàn)到底發(fā)生什么?

    Linux·從 URL 輸入到頁面展現(xiàn)到底發(fā)生什么?

    打開瀏覽器從輸入網(wǎng)址到網(wǎng)頁呈現(xiàn)在大家面前,背后到底發(fā)生了什么?經(jīng)歷怎么樣的一個過程?先給大家來張總體流程圖,具體步驟請看下文分解! 總體來說分為以下幾個過程: DNS 解析:將域名解析成 IP 地址 TCP 連接:TCP 三次握手 發(fā)送 HTTP 請求 服務(wù)器處理請求并返回 HTTP 報(bào)

    2024年02月16日
    瀏覽(22)
  • 在瀏覽器中輸入URL后都會發(fā)生什么

    瀏覽器補(bǔ)全地址和DNS對域名進(jìn)行解析; 1當(dāng)搜索baidu.com,實(shí)際訪問的是http://www.baidu.com,瀏覽器會補(bǔ)全地址。 因?yàn)橐粋€URL由協(xié)議、主機(jī)名、路徑、搜索內(nèi)容、哈希組成。 2DNS解析過程:客戶機(jī)先插本地緩存,找不到再將域名發(fā)到DNS服務(wù)器,它先查它管理的區(qū)域,如果就查本地緩

    2024年02月16日
    瀏覽(30)
  • 說說地址欄輸入 URL 敲下回車后發(fā)生了什么?

    說說地址欄輸入 URL 敲下回車后發(fā)生了什么?

    簡單的分析,從輸入? URL 到回車后發(fā)生的行為如下: URL解析 DNS 查詢 TCP 連接 HTTP 請求 響應(yīng)請求 頁面渲染 首先判斷你輸入的是一個合法的 URL ?還是一個待搜索的,并且根據(jù)你輸入的內(nèi)容進(jìn)行對應(yīng)操作 URL 的解析第過程中的第一步,一個 url 的結(jié)構(gòu)解析如下: 在之前文

    2024年04月08日
    瀏覽(19)
  • 【解決】Linux 桌面 無法打開終端 一打就關(guān) 閃退 總是退出終端 自定義命令

    原本只是想要每次打開終端,默認(rèn)是 zsh ,方便使用 oh-my-zsh。但誰能料到這個配置有個史前大坑! 頂部菜單欄的 終端 首選項(xiàng)配置: 未命名 命令 運(yùn)行自定義命令 命令退出時:退出終端。 只要這條命令出錯,或者執(zhí)行完畢,就會結(jié)束退出了 (太痛了!) 然后網(wǎng)上搜半天, 系統(tǒng)

    2024年02月09日
    瀏覽(16)
  • 面試:瀏覽器從輸入url到渲染頁面,發(fā)生了什么

    用戶輸入階段 合成 URL :瀏覽區(qū)會判斷用戶輸入是合法 URL,比如用戶輸入的是搜索的,默認(rèn)的搜索引擎會合成新的,如果符合url規(guī)則會根據(jù)url協(xié)議,在這段內(nèi)容加上協(xié)議合成合法的url? ? ? 查找緩存 網(wǎng)絡(luò)進(jìn)程獲取到 URL,先去本地緩存中查找是否有緩存資源,如果有則

    2024年02月06日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包