Linux shell 內部命令與外部命令有什么區別以及怎么辨別

內部命令實際上是shell程序的一部分,其中包含的是一些比較簡單的linux系統命令,這些命令由shell程序識別并在shell程序內部完成運行,通常在linux系統加載運行時shell就被加載并駐留在系統內存中。內部命令是寫在bashy源碼里面的,其執行速度比外部命令快,因為解析內部命令shell不需要創建子進程。比如:exit,history,cd,echo等。

外部命令是linux系統中的實用程序部分,因為實用程序的功能通常都比較強大,所以其包含的程序量也會很大,在系統加載時并不隨系統一起被加載到內存中,而是在需要時才將其調用內存。通常外部命令的實體并不包含在shell中,但是其命令執行過程是由shell程序控制的。shell程序管理外部命令執行的路徑查找、加載存放,并控制命令的執行。外部命令是在bash之外額外安裝的,通常放在/bin,/usr/bin,/sbin,/usr/sbin......等等。可通過“echo $PATH”命令查看外部命令的存儲路徑,比如:ls、vi等。

內部命令和外部命令最大的區別之處就是性能。內部命令由于構建在shell中而不必創建多余的進程,要比外部命令執行快得多。因此和執行更大的腳本道理一樣,執行包含很多外部命令的腳本會損害腳本的性能。

1.內部命令在系統啟動時就調入內存,是常駐內存的,所以執行效率高。

2.外部命令是系統的軟件功能,用戶需要時才從硬盤中讀入內存。

type可以用來判斷一個命令是否為內置命令


type: usage: type [-afptP] name [name ...]
[root@linuxeye ~]# type type
type is a shell builtin
[root@linuxeye ~]# type -p type
[root@linuxeye ~]# type -t type
builtin
[root@linuxeye ~]# type type
type is a shell builtin
[root@linuxeye ~]# type -t type
builtin
[root@linuxeye ~]# type pwd
pwd is a shell builtin
[root@linuxeye ~]# type whiptail
whiptail is /usr/bin/whiptail
[root@linuxeye ~]# type -t whiptail
file

enable既可以查看內部命令,同時也可以判斷是否為內部命令

[root@linuxeye ~]# enable -a #查看內部命令
[root@linuxeye ~]# enable whiptail #非內部命令
-bash: enable: whiptail: not a shell builtin
[root@linuxeye ~]# enable pwd #是內部命令

內部命令用戶輸入時系統調用的速率快,不是內置命令,系統將會讀取環境變量文件.bash_profile、/etc/profile去找PATH路徑。

然后在提一下命令的調用,有些歷史命令使用過后,會存在在hash表中,當你再次輸入該命令它的調用會是這樣一個過程。

hash——>內置命令——>PATH?? 命令的調用其實應該是這樣一個過程。

[root@linuxeye ~]# type pwd
pwd is a shell builtin
[root@linuxeye ~]# type cat
cat is /usr/bin/cat
[root@linuxeye ~]# pwd
/root
[root@linuxeye ~]# ls linuxeye*
linuxeye.pem linuxeye.txt
[root@linuxeye ~]# cat linuxeye.txt
linuxeye
[root@linuxeye ~]# hash -l #顯示hash表
builtin hash -p /usr/bin/cat cat
builtin hash -p /usr/bin/ls ls
[root@linuxeye ~]# type cat
cat is hashed (/usr/bin/cat)
[root@linuxeye ~]# hash -r #清除hash表
[root@linuxeye ~]# type cat
cat is /usr/bin/cat

從上面操作可以看出。hash表不存放系統內置命令。

轉載于:https://www.cnblogs.com/gavinpan/p/11248279.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248364.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248364.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248364.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉]矩陣分解在推薦系統中的應用

矩陣分解是最近幾年比較火的算法,經過kddcup和netflix比賽的多人多次檢驗,矩陣分解可以帶來更好的結果,而且可以充分地考慮各種因素的影響,有非常好的擴展性,因為要考慮多種因素的綜合作用,往往需要構造cos…

iPhone 系統刷機

1. 下載好固件(愛思 或者 pp助手) e.g. http://jailbreak.25pp.com/gujian/ 2. 將電腦與手機連接上,彈出iTunes軟件即可 3. 長按手機電源鍵 關閉手機 4. 按住電源健,出現屏幕亮出現蘋果標志后再按住Home健 5. 屏幕黑屏時松開電源健,繼續按照H…

hdu4044

題意:給你一顆樹有n個節點,樹的根節點為1,表示為敵人的基地,其他葉子節點為你的基地,你一開始有m元,給你每個節點可以建造的塔的數量和塔的價格和可以照成的傷害,每個節點至多建立一座塔。敵人的…

RS100項目進展更新

1. 添加手機界面訪問網頁,畢竟PDA的屏幕大小和PC機大小不一致,完成了一自適應網頁,便于在手機上觀看實時畫面; 2. 此項目為一個遠程視頻監控遠程開關項目,遠程PC機或者手機能操作到監控端的開關,所以在遠程…

python os操作

1 # 常用的文件管理操作2 # https://www.cnblogs.com/dkblog/archive/2011/03/25/1995537.html3 import os4 import shutil5 6 # 切換工作目錄,默認是在當前目錄下7 # os.chdir("xx")8 9 # 當前的工作目錄 D:\pythonworkspace\py_base\cn\tele\io 10 print(os.getcw…

洛谷模板,樹狀數組二 差分

題目鏈接:https://www.luogu.org/problemnew/show/P3368 先介紹下差分: 設數組a[]{1,6,8,5,10},那么差分數組b[]{1,5,2,-3,5} 也就是說b[i]a[i]-a[i-1];(a[0]0;),那么a[i]b[1]....b[i];(這個很好證的)。 假如區間[2,4]都加上2的話…

KMS安裝后激活機器

slmgr /skms 192.168.26.82 slmgr /ato轉載于:https://www.cnblogs.com/EllieSoft/p/3410320.html

Java內存模型深度解析:總結

處理器內存模型 順序一致性內存模型是一個理論參考模型,JMM和處理器內存模型在設計時通常會把順序一致性內存模型作為參照。JMM和處理器內存模型在設計時會對順序一致性模型做一些放松,因為如果完全按照順序一致性模型來實現處理器和JMM,那么…

sourcetree,創建工作流報錯:Fatal: Not a gitflow-enabled repo yet. Please run 'git flow init' first.-》解決辦法...

1、打開項目下.git/config文件,或者如下圖操作: 2、打開config文件以后,刪除所有 [gitflow *條目并保存文件 3、關閉并重新打開sourcetree 4、倉庫-》Git 工作流-》初始化倉庫即可轉載于:https://www.cnblogs.com/yxfeng/p/10536955.html

關于a標簽的href屬性的注意事項

今天在做一個lightbox效果的時候出現了一個問題。 當往下滾動再點擊按鈕出現lightbox的時候,lightbox的遮罩層不能鋪滿(即滾動高度處不能鋪上),如下圖所示。原因是提交按鈕使用的是a標簽,當給a標簽寫上href屬性的時候&…

爬蟲開發4.三種數據解析方式

數據解析三種方式引言:回顧requests實現數據爬取的流程 指定url基于requests模塊發起請求獲取響應對象中的數據進行持久化存儲其實,在上述流程中還需要較為重要的一步,就是在持久化存儲之前需要進行指定數據解析。因為大多數情況下的需求&…

在mac上安裝gitlab

參考鏈接: https://www.cnblogs.com/floodwater/p/10138265.html 注意事項: 在安裝gitlab-ce時,配置hostname域名后,通過域名訪問gitlab時,需要配置本機hosts文件,不然不能訪問 本地hosts文件中配置后 就可…

org.apache.maven.archiver.MavenArchiver.getManifest錯誤

org.apache.maven.archiver.MavenArchiver.getManifest錯誤 網上普遍要add,,,,, 正解: 接到一個新需求,開始搭建項目時遇到了如標題錯誤。查詢網絡普遍得到是更新maven插件版本。 之前已安裝過此…

d3.js 入門指南

說到數據可視化,我們會行到很多優秀的框架,像echarts、highcharts,這些框架很優雅,健壯,能滿足我們對可視化的大部分需求,但是缺點也很明顯,就是這些框架幾乎是不可定制化的,當遇到特…

【LeetCode】200. 島嶼的個數

題目 給定一個由 1(陸地)和 0(水)組成的的二維網格,計算島嶼的數量。一個島被水包圍,并且它是通過水平方向或垂直方向上相鄰的陸地連接而成的。你可以假設網格的四個邊均被水包圍。 示例 1:輸入: 11110 110…

AI 模擬退火算法

模擬退火算法轉載于:https://www.cnblogs.com/yangwenhuan/p/10548171.html

keep用法

keep 是英語中用法靈活的動詞之一,下面筆者就其用法歸納如下: 一、用作系動詞,意為“保持(某種狀態)”,其后常接形容詞作表語。如: Please keep quiet / silent! 請保持安靜! Aft…

Kubernetes系列之Helm介紹篇

本次系列使用的所需部署包版本都使用的目前最新的或最新穩定版,安裝包地址請到公眾號內回復【K8s實戰】獲取 介紹 Helm 是 Deis 開發的一個用于 Kubernetes 應用的包管理工具,主要用來管理 Charts。有點類似于 Ubuntu 中的 APT 或 CentOS 中的 YUM。Helm…

HTNL筆記整合

簡述概括了HTML 的部分內容,不是很完善,希望能給予你們相對的幫助。 一下文件的整合百度云鏈接:HTML整合筆記 第一章 HTML入門 課時1:HTML初識 1、英文名(Hyper Text Markup Language)超文本標簽語言 對…

EXCEL 圖表 只在拐點的時候顯示數字

EXCEL圖表只在折線的拐點顯示數值,中間不需要顯示。同時往下拐的,顯示在上方,往上的顯示在下方,這樣數值不會擋住線。 首先,做一些模擬數據 因為起點和終點數值必須顯示,所以單元格,C2 D2 C19 D…