內部命令VS外部命令

原文地址:

http://blog.chinaunix.net/uid-25679817-id-3158845.html


Linux/Unix命令通常被分爲兩類:
內部命令:cd、source、fg
外部命令:ls、cat
我們來看看它們的區別。
內部命令:內部命令被構建在shell之中。當執行shell命令時,內部命令的執行速度非常快。這是因爲沒有其他的進程因爲執行這條命令而被創建。比如說,當我們執行“cd”命令時,沒有進程被創建。在執行過程中只是簡單的改變當前的目錄。
外部命令:外部命令並沒有被構建在shell中。這些可執行的外部命令保存在一個獨立的文件當中。當一個外部命令被執行時,一個新的進程即被創建同時命令被執行。比如說,當我們執行“cat”(通常被保存在/usr/bin目錄下)命令時,然後/usr/bin/cat被執行。
如何得到內部命令列表?
如果你使用的是bash shell,你可以通過“help”命令得到所有內部命令列表

點擊(此處)摺疊或打開

  1. $ help
  2. alias [-p] [name[=value] ... ] bg [job_spec ...]
  3. bind [-lpvsPVS] [-m keymap] [-f fi break [n]
  4. builtin [shell-builtin [arg ...]] caller [EXPR]
  5. case WORD in [PATTERN [| PATTERN]. cd [-L|-P] [dir]
  6. command [-pVv] command [arg ...] compgen [-abcdefgjksuv] [-o option
  7. .....
如何知道一個命令是內部命令還是外部命令?
你可以使用type命令:

點擊(此處)摺疊或打開

  1. $ type cd
  2. cd is a shell builtin
  3. $ type cat
  4. cat is /bin/cat
如果命令爲內部命令,則type命令會明確的指出該命令是shell內嵌的。如果命令時外部命令,type則會給出該命令的執行路徑。
內部VS外部?
我們該使用外部命令還是內部命令或者哪一種命令更好?像這樣的問題是沒有任何意義的。因爲大多數情況下我們只要達成我們的目標,而不必在意使用的是內部命令還是外部命令。
內部命令和外部命令最大的區別之處就是性能。內部命令由於構建在shell中而不必創建多餘的進程,要比外部命令執行快得多。因此和執行更大的腳本道理一樣,執行包含很多外部命令的腳本會損害腳本的性能。
我們並不是總要面對內部命令與外部命令的選擇。但是在我們腳本聯繫的過程中只要我們認真的觀察,我們可以發現有些地方我們可以避免使用外部命令。
比如說:將變量x與變量y求和賦予變量z。
外部命令:

點擊(此處)摺疊或打開

  1. z=`expr $x+$y`

內部命令

點擊(此處)摺疊或打開

  1. let z=x+y

 let命令是shell的內嵌命令,然而expr則是外部命令。使用expr執行速度要慢一些。或許在一次性實例中這看起來微不足道。但是如果在執行大文件時,其區別則是顯而易見的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章