1.查看CentOS7系統默認使用的shell類型
[root@CentOS7 ~]#echo $SHELL
/bin/bash
默認是bash,在系統啟動時就已經加載到內存中。通常,我們把集成在shell中的命令就稱為內部命令,可直接運行。
為鶴山等地區用戶提供了全套網頁設計制作服務,及鶴山網站建設行業解決方案。主營業務為做網站、成都網站設計、鶴山網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業、用心的態度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!2.shell中的命令類型
內部命令:集成在shell中,可直接在內存中運行。
3.如何判斷一個命令的類型
[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
根據上面所劃分的類型可以看出more是一個外部命令,pwd是一個內部命令。
ps:內部命令集成在shell中,系統優先使用內部命令。
4.內部命令管理工具
[root@CentOS7 /]#help enable
enable: enable [-a] [-dnps] [-f filename] [name ...]
Enable and disable shell builtins.
a.查看內部命令
[root@CentOS7 ~]#enable
enable .
enable :
enable [
enable alias
enable bg
enable bind
enable break
enable builtin
enable caller
enable cd
...
b.啟用內部命令
enable cmd
c.禁用內部命令或顯示已禁用的內部命令列表
禁用
enable -n cmd
[root@CentOS7 ~]#enable -n cd
[root@CentOS7 ~]#enable -n echo
顯示
[root@CentOS7 ~]#enable -n
enable -n cd
enable -n echo
5.外部命令執行后發生了什么?
先來看下用type命令判斷兩個外部命令發生的結果:
[root@CentOS7 ~]#type uname
uname is hashed (/usr/bin/uname)
[root@CentOS7 ~]#type ifconfig
ifconfig is /usr/sbin/ifconfig
因為在執行命令的時候,系統會先判斷執行的命令是啥類型,如果是內部命令則直接運行,如果是外部命令就會根據系統PATH變量路徑來查找該命令所在的路徑然后運行,并且運行后會把該命令路徑緩存在內存中,當下次運行時就不用再從PATH路徑中挨個搜索了,而是直接在內存中找,這樣不僅能減少磁盤壓力,而且還能提高命令的執行效率。ifconfig命令的判斷結果中之所以沒出現hashed字樣,是因為這個命令還沒有被執行過。
6.命令緩存在內存中除了能提高執行效率還有啥“優勢”?
[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
有時候會因為一些需要或者誤操作移動了命令的路徑,再次執行的時候就會報“-bash: xxx: No such file or directory”這種錯誤,這是為啥呢?根據上面的示例來分析一下:
a.當外部命令第一次執行后就會被緩存到內存中,當下次再執行這條命令的時候bash就會直接從內存中去找;
b.但是,由于命令路徑被移動了,而內存中緩存的卻是原來的路徑,故會報錯,通過上面的hash命令來可以發現命令的當前路徑和緩存在內存中的路徑是不一致的。
可通過以下方法來解決該問題:
執行hash -d cmd來刪除命令被緩存在內存中的位置,再次執行就會使用被移動后的路徑;
7.總結
前面比較了內部命令和外部命令的區別,發現內部命令的執行效率要比外部命令的高,因為內部命令直接內置在shell中,而外部命令是存在磁盤中的。但事實上還有一種命令優先級比內部命令還要高。
[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
可以看出顯示的結果是別名執行得到的,當別名和原始命令同名,但是要使用原始命令的時候可以通過以下方式執行:
[root@CentOS7 ~]#\history 1
179 \history 1
[root@CentOS7 ~]#'history' 1
180 'history' 1
通過以上測試可以得出Linux命令執行的順序如下:
另外有需要云服務器可以了解下創新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
新聞名稱:Linux命令執行過程-創新互聯
鏈接URL:http://m.newbst.com/article44/cogsee.html
成都網站建設公司_創新互聯,為您提供網站維護、網站營銷、做網站、網站設計、網站建設、響應式網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯