linux命令有內部命令(內建命令)和外部命令之分,內部命令和外部命令功能基本相同,但也有些細微差別。
內部命令實際上是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等。
用type命令可以分辨內部命令與外部命令
[root@localhost account]# type cd
cd is a shell builtin
pwd命令用於顯示當前工作目錄,是linux系統下最常用的命令之一。在不太能確定當前位置時,可以使用pwd命令來判斷目錄在檔案系統內的確切位置。而涉及pwd指令,就不得不提及三個環境變數:path、oldpwd、pwd。
path:執行檔案路徑的變數;"echo $path"(path前面加$表示後面接的是變數)
oldpwd:表示前一次的工作目錄;
pwd:表示當前的工作目錄。
問題緣由:當輸入「man pwd」時可以檢視pwd的幫助文件,而輸入「pwd --help」就提示有錯誤bash: pwd: --: invalid option;若輸入「 /bin/pwd --help」就能正常顯示pwd的幫助文件。
從網上查詢原因並經過整合可知,這主要是由於內部命令和外部命令的區別,pwd是內部命令,而/bin/pwd就是外部命令。在顯示當前目錄時,/bin/pwd能顯示當前工作目錄的完整檔案路徑,能更準確些。在多人共享同一臺linux機器時,經常會發現當前目錄被別人刪除後,pwd命令仍然會顯示那個目錄。
後續試驗:切換至root許可權下,將/bin目錄下的執行檔案ls移動到非正規目錄中去,mv /bin/ls /root(#mv為移動,可將檔案在不同的目錄間進行移動操作),然後不管在哪個目錄底下輸入任何與ls相關的指令,都不能順利執行ls了(因為/root這個目錄並不在path指定的目錄中,外部命令ls是沒法通過path路徑找到執行檔案ls),除非用/root/ls 才行。
如果想要讓root在任何目錄下均可執行/root底下的ls,那麼可以將/root加入到path當中,該命令path="$path":/root即可。若有兩個ls指令在不同的目錄中,例如/usr/local/bin/ls 和/bin/ls ,那麼當我下達 ls命令時,是根據path裡面哪個目錄先被查詢到,則那個目錄下的指令就先被執行。
而即使採用相同的方法移動/bin目錄下的執行檔案pwd,仍可以輸入pwd命令執行,因為這時仍是呼叫內部命令pwd指令。
故shell命令直譯器在執行命令時,是應先執行內部指令,若要執行的指令不是內部指令,則應是呼叫的外部指令。
區分Linux內建命令和外部命令 pwd
linux命令有內部命令 內建命令 和外部命令之分,內部命令和外部命令功能基本相同,但也有些細微差別。內部命令實際上是shell程式的一部分,其中包含的是一些比較簡單的linux系統命令,這些命令由shell程式識別並在shell程式內部完成執行,通常在 linux系統載入執行時shell就被載入並...
Linux內建命令和外部命令
1 linux的命令可以分為內部命令和外部命令 內建命令在系統啟動時就調入記憶體,是常駐記憶體的,所以執行效率高。而外部命令是系統的軟體功能,使用者需要時才從硬碟中讀入記憶體。2 type display information about command type 檢視當前系統的命令是否為內建命令...
說說Linux shell外部命令與內建命令
linux 命令有內部命令 內建命令 和外部命令之分,內部命令和外部命令功能基本相同,但也有些細微差別。內部命令 內部命令不需要使用子程序來執行,它們已經和shell編譯成一體,作為shell工具的組成部分存在。不需要借助外部程式檔案來執行。它們是一些比較簡單的linux系統命令,如exit,his...