在 *nix 的世界裡,cd 指令是最為基礎的指令,它所做的是改變目前的工作目錄。 本文将深入講解關于 cd 的技術細節。

<a target="_blank"></a>
絕大多數的 linux 發行版都将 bash shell 用作預設的 shell。bash 有一些自己内部的指令,cd 就是其中一個。我将會解釋究竟什麼是内部指令,以及為什麼 cd 會是一個内部指令。
那麼首先,請檢查确認你的目前 shell 以及環境變量:
現在繼續使用 which 指令來檢查 cd 所在的路徑:
我們發現沒有輸出。因為在我們的系統中 cd 指令其實并沒有對應某個 binary,但是我們卻又仍然可以執行這個指令,這就是因為 cd 其實是 bash 的一個内部指令。内部指令都是被整合進入 shell 裡面的。接下來我們可以繼續使用 type 指令來檢視 cd 這個内部指令的更多資訊。
如果你嘗試去檢視内部指令的手冊,會發現并沒有為它們單獨設定手冊。
對于這些内部指令來說,并沒有建立單獨的程序,是以它們執行起來非常快。
我們可以使用 help 指令來檢視所有的内部指令(help 指令本身也是一個内部指令):
讓我們從簡單的開始聊起吧。我不會說太多繁瑣細節,但是想要弄明白這個問題,還是需要對 unix 程序有一點了解。
不管 bash 什麼時候建立了一個程序,這個程序事實上都是在 bash 的一個子 shell 中運作(也就是目前 bash 程序的子程序)。這些新的程序會做一些改變,或是顯示一些東西(如果需要的話),以及當這個程序死亡的時候,子 shell 并不會向目前 bash 傳回資訊。請注意,cd 所做的是改變 shell 的 pwd。 是以倘若 cd 是一個外部指令,那麼它改變的将會是子 shell 的 pwd,也不會向父 shell 傳回任何東西。是以,目前 shell 的 pwd 就不會做任何改變。所有能對目前 shell的環境作出改變的指令都必須是内部指令。是以如果我們将 cd 做成外部指令,就無法像原來一樣改變目前目錄了。
好了,現在讓我們再來聊聊 cd 指令的用法。
如果你不加任何參數地來使用 cd 指令,不管你現在在哪,都會把你帶到你的 home 目錄下。
其實波浪線符号(~)代表的也是 home 目錄,我們同樣可以用它回到 home(譯注:通常用~配合其下的子目錄名,來切換到自己home下的子目錄,如:cd ~/desktop)。
如果你是 root 使用者,你可以通過使用波浪号加任何一個使用者名來切換到該使用者的 home 目錄下。在一些 linux 發行版中,沒有特權的使用者預設是沒有權限通路其他使用者的 home 目錄的。
再來看,. 目錄代表的是目前目錄,而 .. 代表的是上級目錄。是以我們可以使用 .. 來回到上級目錄。
大部分情況下,cd . 是不會改變你的 pwd。舉例來看:
但是如果你的目前目錄已經被重命名了,那麼你的 pwd 就會發生改變:
在 bash 和大部分其他的 shell 中,你可以提供兩種不同的路徑:絕對路徑和相對路徑。絕對路徑以 / 開始,并且和你的 pwd 無關。而相對路徑不會以 / 開始,并且和你的 pwd 相關。
使用絕對路徑來改變 pwd:
使用相對路徑來改變 pwd:
我們可以在兩個目錄切換:
cd - 指令可以傳回上一次的工作目錄,我們可以使用它在兩個不同的目錄中快速切換。
我們上一次的工作目錄會被儲存在 oldpwd 這個變量中。但是如果你在一個新開啟的終端中來使用的話,會報出下面的錯誤:
你可以配合 cd 指令來使用一些 bash 小技巧。
比如,不妨使用 ? 這個萬能藥:
使用 *:
原文釋出時間為:2014-01-16
本文來自雲栖社群合作夥伴“linux中國”