cd 命令是 *nix 系統中最基本的命令,它所做的事情是改變你當前所在的目錄。本文詳細介紹該命令,它所能完成的功能以及關於該命令內在的東西。
cd 命令:一個內置命令
BASH Shell 是大多 Linux 發行版的默認 shell,BASH 有一些自己的內置命令,cd 就是其中的一個。我將解釋什么是內置命令,以及為什么 cd 是一個內置命令。首先,用 SHELL
環境變量確認你當前的 shell:
現在用 which
命令檢查 cd 命令二進制文件所在的路徑(如果存在的話):
結果什么都沒有輸出,這是因為系統中不存在 cd 命令的二進制文件。但是你仍然可以運行該命令,這是因為 cd 是 BASH 的內置命令。內置命令就是內建在 shell 里的命令,另一個內置命令 type
會給你顯示 cd 命令是一個內置命令的信息:
如果你嘗試獲得任何內置命令的幫助文檔,將不存在它們獨立的幫助頁:
對於這些內置命令,不會創建獨立的進程來運行它們,因此他們運行效率較高。
為了得到所有的內置命令,你可以使用 help
命令(這里 help 本身也是一個內置命令):
為什么 cd 是內置命令
為了描述簡單,我就不討論更多的細節了,但是要理解這個問題的答案,還需要知道一點 Unix 進程相關的知識。
BASH 創建的任何進程,它會由一個 BASH 的子 shell(當前 BASH 進程的子進程)來執行該進程,新建的進程運行實例、輸出(如果需要的話),當該進程結束時,改子 shell 的任何屬性都不會返回給父 shell。注意到的是,cd 命令用來改變 shell 當前所在的路徑,如果 cd 是一個外部命令,它將改變子 shell 的當前路徑,當運行完返回時,他所做的改變對父 shell 沒有關系。因此,shell 的當前路徑還是沒有改變!所有改變當前 shell 環境的命令,在實現上都必須實現成內置命令。如果實現成外部命令,我們將不會得到預期的結果。
下面我們探索 cd 命令的用法:
cd 命令用法
如果你直接輸入 cd 命令而不帶任何參數,它將切換到你的 home 目錄下,不管你當前所在的目錄是什么:
波浪線(~)符號也代表 home 目錄,你也可以使用它來切換到 home 目錄下:
如果你是 root 用戶,你可以切換到任何用戶的 home 目錄,使用波浪線后跟用戶名。在一些 Linux 發行版中,沒有特權的用戶默認沒有權限切換到其它用戶的 home 目錄:
點(.)代表當前目錄,兩個點(..)代表父目錄,要想切換到父目錄,只需要使用..:
只使用 . 大多情況下將不會將會你當前的目錄,例如:
但是如果你當前目錄重命名為其它名字,那么使用 . 將會改變當前目錄:
在 BASH 以及大多數其它 shell 中,你可以提供兩種類型的路徑表示方式:絕對路徑和相對路徑。絕對路徑使用 / 開始,和你當前所在目錄無關;另一個相對路徑不是以 / 開始,依賴於你當前所在的目錄。
使用絕對路徑改變當前目錄:
使用相對路徑改變當前目錄:
可以使用 cd -
命令,回到上一次工作的目錄,實現在兩個目錄間來回切換:
上次工作的目錄保存在變量 OLDPWD
中,如果你試着在新的終端下使用該命令,它會顯示下面的錯誤:
你還可以在 cd 命令中使用一些 bash 的技巧,例如使用通配符“?”、“*” 等。
編譯自:http://linoxide.com/linux-command/linux-cd-command-examples/