Linux中國

實例學習 Linux 的 cd 命令,及對內部命令的解釋

cd 命令:一個內部命令

絕大多數的 Linux 發行版都將 Bash Shell 用作默認的 Shell。Bash 有一些自己內部的命令,cd 就是其中一個。我將會解釋究竟什麼是內部命令,以及為什麼 cd 會是一個內部命令

那麼首先,請檢查確認你的當前 shell 以及環境變數:

現在繼續使用 which 命令來檢查 cd 所在的路徑:

我們發現沒有輸出。因為在我們的系統中 cd 命令其實並沒有對應某個 binary,但是我們卻又仍然可以執行這個命令,這就是因為 cd 其實是 BASH 的一個內部命令。內部命令都是被整合進入 shell 裡面的。接下來我們可以繼續使用 type 命令來查看 cd 這個內部命令的更多信息。

如果你嘗試去查看內部命令的手冊,會發現並沒有為它們單獨設置手冊。

對於這些內部命令來說,並沒有創建單獨的進程,因此它們執行起來非常快。

我們可以使用 help 命令來查看所有的內部命令(help 命令本身也是一個內部命令):

為什麼 cd 會是一個內部命令

讓我們從簡單的開始聊起吧。我不會說太多繁瑣細節,但是想要弄明白這個問題,還是需要對 Unix 進程有一點了解。

不管 BASH 什麼時候創建了一個進程,這個進程事實上都是在 BASH 的一個子 shell 中運行(也就是當前 BASH 進程的子進程)。這些新的進程會做一些改變,或是顯示一些東西(如果需要的話),以及當這個進程死亡的時候,子 shell 並不會向當前 BASH 返回信息。請注意,cd 所做的是改變 shell 的 PWD。 因此倘若 cd 是一個外部命令,那麼它改變的將會是子 shell 的 PWD,也不會向父 shell 返回任何東西。所以,當前 shell 的 PWD 就不會做任何改變。所有能對當前 shell的環境作出改變的命令都必須是內部命令。 因此如果我們將 cd 做成外部命令,就無法像原來一樣改變當前目錄了。

好了,現在讓我們再來聊聊 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 小技巧

比如,不妨使用 ? 這個萬能葯:

使用 *:

via: http://linoxide.com/linux-command/linux-cd-command-examples/

譯者:ailurus1991 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國