真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Linux命令執(zhí)行過程

1.查看CentOS7系統(tǒng)默認使用的shell類型
[root@CentOS7 ~]#echo $SHELL
/bin/bash

默認是bash,在系統(tǒng)啟動時就已經(jīng)加載到內(nèi)存中。通常,我們把集成在shell中的命令就稱為內(nèi)部命令,可直接運行。

為企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站建設、網(wǎng)站優(yōu)化、全網(wǎng)營銷推廣、競價托管、品牌運營等營銷獲客服務。成都創(chuàng)新互聯(lián)公司擁有網(wǎng)絡營銷運營團隊,以豐富的互聯(lián)網(wǎng)營銷經(jīng)驗助力企業(yè)精準獲客,真正落地解決中小企業(yè)營銷獲客難題,做到“讓獲客更簡單”。自創(chuàng)立至今,成功用技術(shù)實力解決了企業(yè)“網(wǎng)站建設、網(wǎng)絡品牌塑造、網(wǎng)絡營銷”三大難題,同時降低了營銷成本,提高了有效客戶轉(zhuǎn)化率,獲得了眾多企業(yè)客戶的高度認可!

2.shell中的命令類型
  • 內(nèi)部命令:集成在shell中,可直接在內(nèi)存中運行。

  • 外部命令:表現(xiàn)為一個磁盤文件,會顯示完整路徑。外部命令一開始并沒有加載到內(nèi)存中,而是在用戶執(zhí)行命令的時候,系統(tǒng)臨時地通過PATH變量從磁盤中查找外部命令所在路徑并且加載到內(nèi)存中運行的。
3.如何判斷一個命令的類型
type
[root@CentOS7 /]#help type
type: type [-afptP] name [name ...]
    Display information about command type.

例如:

[root@CentOS7 ~]#type more
more is /usr/bin/more
[root@CentOS7 ~]#type pwd
pwd is a shell builtin

根據(jù)上面所劃分的類型可以看出more是一個外部命令,pwd是一個內(nèi)部命令。

ps:內(nèi)部命令集成在shell中,系統(tǒng)優(yōu)先使用內(nèi)部命令。

4.內(nèi)部命令管理工具
enable
[root@CentOS7 /]#help enable
enable: enable [-a] [-dnps] [-f filename] [name ...]
    Enable and disable shell builtins.

a.查看內(nèi)部命令

[root@CentOS7 ~]#enable
enable .
enable :
enable [
enable alias
enable bg
enable bind
enable break
enable builtin
enable caller
enable cd
...

b.啟用內(nèi)部命令

enable cmd

c.禁用內(nèi)部命令或顯示已禁用的內(nèi)部命令列表

禁用

enable -n cmd
[root@CentOS7 ~]#enable -n cd
[root@CentOS7 ~]#enable -n echo

顯示

[root@CentOS7 ~]#enable -n
enable -n cd
enable -n echo
5.外部命令執(zhí)行后發(fā)生了什么?

先來看下用type命令判斷兩個外部命令發(fā)生的結(jié)果:

[root@CentOS7 ~]#type uname
uname is hashed (/usr/bin/uname)
[root@CentOS7 ~]#type ifconfig
ifconfig is /usr/sbin/ifconfig
是否發(fā)現(xiàn)uname命令的判斷結(jié)果中多了個hashed字樣,這是為啥?

因為在執(zhí)行命令的時候,系統(tǒng)會先判斷執(zhí)行的命令是啥類型,如果是內(nèi)部命令則直接運行,如果是外部命令就會根據(jù)系統(tǒng)PATH變量路徑來查找該命令所在的路徑然后運行,并且運行后會把該命令路徑緩存在內(nèi)存中,當下次運行時就不用再從PATH路徑中挨個搜索了,而是直接在內(nèi)存中找,這樣不僅能減少磁盤壓力,而且還能提高命令的執(zhí)行效率。ifconfig命令的判斷結(jié)果中之所以沒出現(xiàn)hashed字樣,是因為這個命令還沒有被執(zhí)行過。

6.命令緩存在內(nèi)存中除了能提高執(zhí)行效率還有啥“優(yōu)勢”?
[root@CentOS7 ~]#tty
/dev/pts/0
[root@CentOS7 ~]#uname -r
3.10.0-957.el7.x86_64
[root@CentOS7 ~]#which uname
/usr/bin/uname
[root@CentOS7 ~]#mv `!!` /usr/sbin/
mv `which uname` /usr/sbin/
[root@CentOS7 ~]#uname -r
bash: /usr/bin/uname: No such file or directory
[root@CentOS7 ~]#hash
hits    command
   1    /usr/bin/tty
   1    /usr/bin/which
   1    /usr/bin/mv
   2    /usr/bin/uname

有時候會因為一些需要或者誤操作移動了命令的路徑,再次執(zhí)行的時候就會報“-bash: xxx: No such file or directory”這種錯誤,這是為啥呢?根據(jù)上面的示例來分析一下:

a.當外部命令第一次執(zhí)行后就會被緩存到內(nèi)存中,當下次再執(zhí)行這條命令的時候bash就會直接從內(nèi)存中去找;

b.但是,由于命令路徑被移動了,而內(nèi)存中緩存的卻是原來的路徑,故會報錯,通過上面的hash命令來可以發(fā)現(xiàn)命令的當前路徑和緩存在內(nèi)存中的路徑是不一致的。

可通過以下方法來解決該問題:

  • 執(zhí)行hash -d cmd來刪除命令被緩存在內(nèi)存中的位置,再次執(zhí)行就會使用被移動后的路徑;

  • 使用沒有執(zhí)行過該命令的新虛擬終端或者偽終端來執(zhí)行,但,執(zhí)行時使用的會是移動后的路徑,如下圖:

Linux命令執(zhí)行過程

ps:hits表示該命令路徑被緩存命中的次數(shù)。
7.總結(jié)

前面比較了內(nèi)部命令和外部命令的區(qū)別,發(fā)現(xiàn)內(nèi)部命令的執(zhí)行效率要比外部命令的高,因為內(nèi)部命令直接內(nèi)置在shell中,而外部命令是存在磁盤中的。但事實上還有一種命令優(yōu)先級比內(nèi)部命令還要高。

別名
[root@CentOS7 ~]#alias history='uname -r'
[root@CentOS7 ~]#history
3.10.0-957.el7.x86_64
[root@CentOS7 ~]#hash
hits    command
   1    /usr/bin/uname

可以看出顯示的結(jié)果是別名執(zhí)行得到的,當別名和原始命令同名,但是要使用原始命令的時候可以通過以下方式執(zhí)行:

  • 'cmd'
  • '\cmd'
  • '/usr/bin/cmd'(外部命令)
    [root@CentOS7 ~]#\history 1
    179  \history 1
    [root@CentOS7 ~]#'history' 1
    180  'history' 1

    通過以上測試可以得出Linux命令執(zhí)行的順序如下:

別名>內(nèi)部命令>hash緩存外部命令>PATH變量路徑>command not found

分享名稱:Linux命令執(zhí)行過程
URL網(wǎng)址:http://weahome.cn/article/jsepph.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部