幾個操作文件和目錄的命令

前面講了 shell 是什么?如何在 Linux 寫切換工作目錄?還有幾個對使用 Linux 系統(tǒng)有幫助的命令(ls、file、less/more)。如果聽到這些概念你還不知道說的是什么,那建議你回過頭去看看前面幾天的內(nèi)容,掌握了這些內(nèi)容,我們也就算是能把 Linux 系統(tǒng)用起來了,但這還遠(yuǎn)遠(yuǎn)不夠,今天我們繼續(xù)學(xué)習(xí)幾個操作文件和目錄的 Linux 命令。

  • cp:拷貝文件和目錄的命令
  • mv:移動或者重名了文件和目錄的命令
  • mkdir:創(chuàng)建目錄的命令
  • rm:刪除文件或者目錄的命令
  • ln:創(chuàng)建符號鏈接的命令

以上這 5 個命令在我們使用 Linux 系統(tǒng)的過程中經(jīng)常會用到,它們都是可以操作文件或者目錄的。

我們的 Ubuntu 18.04 Desktop 這個操作系統(tǒng)也是帶圖形界面的,在圖形界面的文件管理器這個軟件中,我們可以輕松的完成文件或者目錄的移動、重命名、刪除等操作,那為什么還要學(xué)習(xí)命令行工具 cp、mv、mkdir、rm、ln 呢?

答案是命令行工具比圖像界面工具強(qiáng)大,特別是對于復(fù)雜的文件或者目錄的操作,使用命令行工具往往更占優(yōu)勢,比如:我們要復(fù)制一個目錄下的所有以 .html 結(jié)尾的文件到另一個目錄,而且另一個目錄如果包含相同的文件的話,只有當(dāng)前目錄的文件比另一個目錄的文件更新時才復(fù)制,否則不復(fù)制。在這個例子中,不是說我們不能使用圖形界面的文件管理器工具完成,只是會比較麻煩,但是使用命令行工具的話,就是一行命令就搞定了:cp -u *.html destination。

在介紹上面 5 個操作文件或者目錄的命令行工具之前,先來看看 shell 命令的一些特性,這些特性對我們操作文件或者目錄相當(dāng)?shù)挠杏谩hell 提供一些特殊的字符來匹配具有相同屬性的文件或者目錄,例如上面的拷貝的例子中就有 * 這個特殊字符。我們把這些特殊字符叫做通配符,下面是 shell 中常用的通配符:

  • *:匹配任意多個字符(包括零個或一個)
  • ?:匹配任意一個字符(不包括零個)
  • [characters]:匹配任意一個屬于字符集中的字符
  • [!characters]:匹配任意一個不是字符集中的字符
  • [[:class:]]:匹配任意一個屬于指定字符類中的字符

除了通配符外,shell 還提供了字符類供 shell 命令匹配使用,如下:

  • [:alnum:]:匹配任意一個字母或數(shù)字
  • [:alpha:]:匹配任意一個字母
  • [:digit:]:匹配任意一個數(shù)字
  • [:lower:] :匹配任意一個小寫字母
  • [:upper:]:匹配任意一個大寫字母

借助通配符,為文件名構(gòu)建非常復(fù)雜的選擇標(biāo)準(zhǔn)成為可能。下面是一些類型匹配的范例:

  • *:所有文件
  • g*:所有文件名以 "g" 開頭的文件
  • b*.txt:以 "b" 開頭,中間有零個或任意多個字符,并以 ".txt" 結(jié)尾的文件
  • Data???:以 "Data" 開頭,其后緊接著 3 個字符的文件
  • [abc]*:文件名以 "a", "b" , 或 "c" 開頭的文件
  • BACKUP.[0-9][0-9][0-9]:以 "BACKUP." 開頭,并緊接著 3 個數(shù)字的文件
  • [[:upper:]]*:以大寫字母開頭的文件
  • [![:digit:]]*:不以數(shù)字開頭的文件
  • *[[:lower:]123]:文件名以小寫字母結(jié)尾,或以 "1" , "2" 或 "3" 結(jié)尾的文件

上面這些通配符和字符類非常重要,這對我們更好的使用 Linux 系統(tǒng)是很有幫助的,所以一定要結(jié)合例子深入的理解。下面我們正式開始介紹今天的 5 的命令。

1. mkdir

用法:mkdir directory...
說明:在描述一個命令時(如上所示),當(dāng)有三個圓點(diǎn)跟在一個命令的參數(shù)后面, 這意味著那個參數(shù)可以重復(fù),就像這樣:

  • mkdir dir1:會創(chuàng)建一個名為 "dir1" 的目錄
  • mkdir dir1 dir2 dir3:會創(chuàng)建三個目錄,名為 dir1, dir2,dir3。

2. cp

cp 命令,復(fù)制文件或者目錄。它有兩種使用方法:

  • cp item1 item2:復(fù)制單個文件或目錄 "item1" 到文件或目錄 "item2"
  • cp item... directory:復(fù)制多個項(xiàng)目(文件或目錄)到一個目錄下。

cp 命令也是可以帶參數(shù)的,下面是一些常用的參數(shù):

  • a:復(fù)制文件和目錄,以及它們的屬性,包括所有權(quán)和權(quán)限。 通常,副本具有用戶所操作文件的默認(rèn)屬性。
  • i:在重寫已存在文件之前,提示用戶確認(rèn)。如果這個選項(xiàng)不指定, cp 命令會默認(rèn)重寫文件。
  • r:遞歸地復(fù)制目錄及目錄中的內(nèi)容。當(dāng)復(fù)制目錄時, 需要這個選項(xiàng)(或者-a 選項(xiàng))。
  • u:當(dāng)把文件從一個目錄復(fù)制到另一個目錄時,僅復(fù)制 目標(biāo)目錄中不存在的文件,或者是文件內(nèi)容新于目標(biāo)目錄中已經(jīng)存在的文件。
  • v:顯示翔實(shí)的命令操作信息

下面是 cp 命令的寫使用示例,請大家練習(xí)使用:

  • cp file1 file2:復(fù)制文件 file1 內(nèi)容到文件 file2。如果 file2 已經(jīng)存在, file2 的內(nèi)容會被 file1 的內(nèi)容重寫。如果 file2 不存在,則會創(chuàng)建 file2。
  • cp -i file1 file2:這條命令和上面的命令一樣,除了如果文件 file2 存在的話,在文件 file2 被重寫之前, 會提示用戶確認(rèn)信息。
  • cp file1 file2 dir1:復(fù)制文件 file1 和文件 file2 到目錄 dir1。目錄 dir1 必須存在。
  • cp dir1/* dir2:使用一個通配符,在目錄 dir1 中的所有文件都被復(fù)制到目錄 dir2 中。 dir2 必須已經(jīng)存在。
  • cp -r dir1 dir2:復(fù)制目錄 dir1 中的內(nèi)容到目錄 dir2。如果目錄 dir2 不存在, 創(chuàng)建目錄 dir2,操作完成后,目錄 dir2 中的內(nèi)容和 dir1 中的一樣。 如果目錄 dir2 存在,則目錄 dir1 (和目錄中的內(nèi)容)將會被復(fù)制到 dir2 中。

3. mv

mv 命令可以執(zhí)行文件移動和文件命名任務(wù),這依賴于你怎樣使用它。任何一種 情況下,完成操作之后,原來的文件名不再存在。mv 使用方法與 cp 很相像:

  • mv item1 item2:把文件或目錄 "item1" 移動或重命名為 "item2"
  • mv item... directory:把一個或多個條目從一個目錄移動到另一個目錄中。

mv 命令的常用的參數(shù)如下:

  • i:在重寫一個已經(jīng)存在的文件之前,提示用戶確認(rèn)信息。 如果不指定這個選項(xiàng),mv 命令會默認(rèn)重寫文件內(nèi)容。
  • u:當(dāng)把文件從一個目錄移動另一個目錄時,只是移動不存在的文件, 或者文件內(nèi)容新于目標(biāo)目錄相對應(yīng)文件的內(nèi)容。
  • v:當(dāng)操作 mv 命令時,顯示翔實(shí)的操作信息。

mv 命令的使用示例,請大家練習(xí)使用:

  • mv file1 file2:移動 file1 到 file2。如果 file2 存在,它的內(nèi)容會被 file1 的內(nèi)容重寫。 如果 file2 不存在,則創(chuàng)建 file2。 這兩種情況下,file1 都不再存在。
  • mv -i file1 file2:除了如果 file2 存在的話,在 file2 被重寫之前,用戶會得到 提示信息外,這個和上面的選項(xiàng)一樣。
  • mv file1 file2 dir1:移動 file1 和 file2 到目錄 dir1 中。dir1 必須已經(jīng)存在。
  • mv dir1 dir2:如果目錄 dir2 不存在,創(chuàng)建目錄 dir2,并且移動目錄 dir1 的內(nèi)容到 目錄 dir2 中,同時刪除目錄 dir1。如果目錄 dir2 存在,移動目錄 dir1(及它的內(nèi)容)到目錄 dir2。

4. rm

rm 命令用來移除(刪除)文件和目錄:

  • rm item...:"item" 代表一個或多個文件或目錄。

rm 命令的常用參數(shù)如下:

  • i:在刪除已存在的文件前,提示用戶確認(rèn)信息。 如果不指定這個選項(xiàng),rm 會默默地刪除文件
  • r:遞歸地刪除文件,這意味著,如果要刪除一個目錄,而此目錄 又包含子目錄,那么子目錄也會被刪除。要刪除一個目錄,必須指定這個選項(xiàng)。
  • f:忽視不存在的文件,不顯示提示信息。這選項(xiàng)會使 i 選項(xiàng)失效。
  • v:在執(zhí)行 rm 命令時,顯示翔實(shí)的操作信息。

rm 命令的使用示例,請大家練習(xí)使用:

  • rm file1:默默地刪除文件 file1
  • rm -i file1:除了在刪除文件之前,提示用戶確認(rèn)信息之外,和上面的命令作用一樣
  • rm -r file1 dir1:刪除文件 file1,,目錄 dir1,及 dir1 中的內(nèi)容。
  • rm -rf file1 dir1:同上,除了如果文件 file1,或目錄 dir1 不存在的話,rm 仍會繼續(xù)執(zhí)行。

特別注意:
類 Unix 的操作系統(tǒng),比如說 Linux,沒有復(fù)原命令。一旦你用 rm 刪除了一些東西, 它就消失了。

尤其要小心通配符。思考一下這個經(jīng)典的例子。假如說,你只想刪除一個目錄中的 HTML 文件。輸入:rm *.html

這是正確的,如果你不小心在 “*” 和 “.html” 之間多輸入了一個空格,就像這樣:rm * .html

這個 rm 命令會刪除目錄中的所有文件,還會抱怨沒有文件叫做 ".html"。

小貼士: 當(dāng)你使用帶有通配符的 rm 命令時(除了仔細(xì)檢查輸入的內(nèi)容外), 先用 ls 命令來測試通配符。這會讓你看到將要被刪除的文件是什么。然后按下上箭頭按鍵,重新調(diào)用 剛剛執(zhí)行的命令,用 rm 替換 ls。

5. ln

ln 命令既可創(chuàng)建硬鏈接,也可以創(chuàng)建符號鏈接??梢杂闷渲幸环N方法來使用它("item" 可以是一個文件或是一個目錄。):

  • ln file link:創(chuàng)建硬鏈接
  • ln -s item link:創(chuàng)建符號鏈接

5.1. 硬鏈接

與更加現(xiàn)代的符號鏈接相比,硬鏈接是最初 Unix 創(chuàng)建鏈接的方式。每個文件默認(rèn)會有一個硬鏈接, 這個硬鏈接給予文件名字。我們每創(chuàng)建一個硬鏈接,就為一個文件創(chuàng)建了一個額外的目錄項(xiàng)。 硬鏈接有兩個重要局限性:

  • 一個硬鏈接不能關(guān)聯(lián)它所在文件系統(tǒng)之外的文件。這是說一個鏈接不能關(guān)聯(lián) 與鏈接本身不在同一個磁盤分區(qū)上的文件。
  • 一個硬鏈接不能關(guān)聯(lián)一個目錄。

一個硬鏈接和文件本身沒有什么區(qū)別。不像符號鏈接,當(dāng)你列出一個包含硬鏈接的目錄 內(nèi)容時,你會看到?jīng)]有特殊的鏈接指示說明。當(dāng)一個硬鏈接被刪除時,這個鏈接 被刪除,但是文件本身的內(nèi)容仍然存在(這是說,它所占的磁盤空間不會被重新分配), 直到所有關(guān)聯(lián)這個文件的鏈接都刪除掉。知道硬鏈接很重要,因?yàn)槟憧赡苡袝r 會遇到它們,但現(xiàn)在實(shí)際中更喜歡使用符號鏈接,下一步我們會討論符號鏈接。

5.2. 符號鏈接

創(chuàng)建符號鏈接是為了克服硬鏈接的局限性。符號鏈接生效,是通過創(chuàng)建一個 特殊類型的文件,這個文件包含一個關(guān)聯(lián)文件或目錄的文本指針。在這一方面, 它們和 Windows 的快捷方式差不多,當(dāng)然,符號鏈接早于 Windows 的快捷方式 很多年。

一個符號鏈接指向一個文件,而且這個符號鏈接本身與其它的符號鏈接幾乎沒有區(qū)別。 例如,如果你往一個符號鏈接里面寫入東西,那么相關(guān)聯(lián)的文件也被寫入。然而, 當(dāng)你刪除一個符號鏈接時,只有這個鏈接被刪除,而不是文件自身。如果先于符號鏈接 刪除文件,這個鏈接仍然存在,但是不指向任何東西。在這種情況下,這個鏈接被稱為壞鏈接。在許多實(shí)現(xiàn)中,ls 命令會以不同的顏色展示壞鏈接,比如說紅色,來顯示它們的存在。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容