在 Linux 上操作目錄

在 Linux 上操作目錄

編譯自: https://www.linux.com/blog/learn/2018/5/manipulating-directories-linux

讓我們繼續學習一下 Linux 文件系統的樹形結構,並展示一下如何在其中創建你的目錄。

如果你不熟悉本系列(以及 Linux), 請查看我們的第一部分 。在那篇文章中,我們貫穿了 Linux 文件系統的樹狀結構(或者更確切地說是 文件層次結構標準(File Hierarchy Standard),FHS)。我建議你仔細閱讀,確保你理解自己能安全的做哪些操作。因為這一次,我將向你展示目錄操作的魅力。

新建目錄

在破壞之前,先讓我們來創建。首先,打開一個終端窗口並使用命令 mkdir 創建一個新目錄,如下所示:

mkdir

如果你只輸入了目錄名稱,該目錄將顯示在您當前所在目錄中。如果你剛剛打開一個終端,你當前位置為你的家目錄。在這個例子中,我們展示了將要創建的目錄與你當前所處位置的關係:

$ pwd # 告知你當前所在位置(參見第一部分)

/home/

$ mkdir newdirectory # 創建 /home//newdirectory

(注:你不用輸入 # 後面的文本。# 後面的文本為註釋內容,用於解釋發生了什麼。它會被 shell 忽略,不會被執行)。

你可以在當前位置中已經存在的某個目錄下創建新的目錄,方法是在命令行中指定它:

mkdir Documents/Letters

這將在 Documents 目錄中創建 Letters 目錄。

你還可以在路徑中使用 .. 在當前目錄的上一級目錄中創建目錄。假設你進入剛剛創建的 Documents/Letters/ 目錄,並且想要創建Documents/Memos/ 目錄。你可以這樣做:

cd Documents/Letters # 進入到你剛剛創建的 Letters/ 目錄

mkdir ../Memos

同樣,以上所有內容都是相對於你當前的位置做的。這就是使用了相對路徑。

你還可以使用目錄的絕對路徑:這意味著告訴 mkdir 命令將目錄放在和根目錄(/)有關的位置:

mkdir /home//Documents/Letters

在上面的命令中將 更改為你的用戶名,這相當於從你的主目錄執行 mkdir Documents/Letters,通過使用絕對路徑你可以在目錄樹中的任何位置完成這項工作。

無論你使用相對路徑還是絕對路徑,只要命令成功執行,mkdir 將靜默的創建新目錄,而沒有任何明顯的反饋。只有當遇到某種問題時,mkdir才會在你敲下回車鍵後打印一些反饋。

與大多數其他命令行工具一樣,mkdir 提供了幾個有趣的選項。 -p 選項特別有用,因為它允許你嵌套創建目錄,即使目錄不存在也可以。例如,要在 Documents/ 中創建一個目錄存放寫給媽媽的信,你可以這樣做:

mkdir -p Documents/Letters/Family/Mom

mkdir 會創建 Mom/ 之上的整個目錄分支,並且也會創建 Mom/ 目錄,無論其上的目錄在你敲入該命令時是否已經存在。

你也可以用空格來分隔目錄名,來同時創建幾個目錄:

mkdir Letters Memos Reports

這將在當前目錄下創建目錄 Letters、Memos 和 Reports。

目錄名中可怕的空格

……這帶來了目錄名稱中關於空格的棘手問題。你能在目錄名中使用空格嗎?是的你可以。那麼建議你使用空格嗎?不,絕對不建議。空格使一切變得更加複雜,並且可能是危險的操作。

假設您要創建一個名為 letters mom/ 的目錄。如果你不知道如何更好處理,你可能會輸入:

mkdir letters mom

但這是錯誤的!錯誤的!錯誤的!正如我們在上面介紹的,這將創建兩個目錄 letters/ 和 mom/,而不是一個目錄 letters mom/。

得承認這是一個小麻煩:你所要做的就是刪除這兩個目錄並重新開始,這沒什麼大不了。

可是等等!刪除目錄可是個危險的操作。想象一下,你使用圖形工具 Dolphin 或 Nautilus 創建了目錄 letters mom/。如果你突然決定從終端刪除目錄 letters mom,並且您在同一目錄下有另一個名為 letters 的目錄,並且該目錄中包含重要的文檔,結果你為了刪除錯誤的目錄嘗試了以下操作:

rmdir letters mom

你將會有刪除目錄 letters 的風險。這裡說“風險”,是因為幸運的是rmdir 這條用於刪除目錄的指令,有一個內置的安全措施,如果你試圖刪除一個非空目錄時,它會發出警告。

但是,下面這個:

rm -Rf letters mom

(注:這是刪除目錄及其內容的一種非常標準的方式)將完全刪除 letters/ 目錄,甚至永遠不會告訴你剛剛發生了什麼。)

rm 命令用於刪除文件和目錄。當你將它與選項 -R(遞歸刪除)和 -f(強制刪除)一起使用時,它會深入到目錄及其子目錄中,刪除它們包含的所有文件,然後刪除子目錄本身,然後它將刪除所有頂層目錄中的文件,再然後是刪除目錄本身。

rm -Rf 是你必須非常小心處理的命令。

我的建議是,你可以使用下劃線來代替空格,但如果你仍然堅持使用空格,有兩種方法可以使它們起作用。您可以使用單引號或雙引號,如下所示:

mkdir 'letters mom'

mkdir "letters dad"

或者,你可以轉義空格。有些字符對 shell 有特殊意義。正如你所見,空格用於在命令行上分隔選項和參數。 “分離選項和參數”屬於“特殊含義”範疇。當你想讓 shell 忽略一個字符的特殊含義時,你需要轉義,你可以在它前面放一個反斜槓(\)如:

mkdir letters\ mom

mkdir letter\ dad

還有其他特殊字符需要轉義,如撇號或單引號('),雙引號(“)和&符號(&):

mkdir mom\ \&\ dad\'s\ letters

我知道你在想什麼:如果反斜槓有一個特殊的含義(即告訴 shell 它必須轉義下一個字符),這也使它成為一個特殊的字符。然後,你將如何轉義轉義字符(\)?

事實證明,你轉義任何其他特殊字符都是同樣的方式:

mkdir special\\characters

這將生成一個名為 special\characters/ 的目錄。

感覺困惑?當然。這就是為什麼你應該避免在目錄名中使用特殊字符,包括空格。

以防誤操作你可以參考下面這個記錄特殊字符的列表。(LCTT 譯註:此處原文鏈接丟失。)

總結

  • 使用 mkdir 創建新目錄。
  • 使用 rmdir 刪除目錄(僅在目錄為空時才有效)。
  • 使用 rm -Rf 來完全刪除目錄及其內容 —— 請務必謹慎使用。
  • 使用相對路徑創建相對於當前目錄的目錄: mkdir newdir。
  • 使用絕對路徑創建相對於根目錄(/)的目錄: mkdir /home//newdir。
  • 使用 .. 在當前目錄的上級目錄中創建目錄: mkdir ../newdir。
  • 你可以通過在命令行上使用空格分隔目錄名來創建多個目錄: mkdir onedir twodir threedir。
  • 同時創建多個目錄時,你可以混合使用相對路徑和絕對路徑: mkdir onedir twodir /home//threedir。
  • 在目錄名稱中使用空格和特殊字符真的會讓你很頭疼,你最好不要那樣做。

有關更多信息,您可以查看 mkdir、rmdir 和 rm 的手冊:

man mkdir

man rmdir

man rm

要退出手冊頁,請按鍵盤 q 鍵。

下次預告

在下一部分中,你將學習如何創建、修改和刪除文件,以及你需要了解的有關權限和特權的所有信息!

通過 Linux 基金會和 edX 免費提供的 “Introduction to Linux” 課程瞭解有關Linux的更多信息。


via: https://www.linux.com/blog/learn/2018/5/manipulating-directories-linux

作者: Paul Brown 選題: lujun9972 譯者: way-ww 校對: wxy

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


分享到:


相關文章: