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

前面講了 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ù)制多個項目(文件或目錄)到一個目錄下翻具。

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

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

下面是 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)信息钧忽。 如果不指定這個選項毯炮,mv 命令會默認(rèn)重寫文件內(nèi)容逼肯。
  • u:當(dāng)把文件從一個目錄移動另一個目錄時,只是移動不存在的文件桃煎, 或者文件內(nèi)容新于目標(biāo)目錄相對應(yīng)文件的內(nèi)容篮幢。
  • v:當(dāng)操作 mv 命令時,顯示翔實的操作信息为迈。

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

  • mv file1 file2:移動 file1 到 file2。如果 file2 存在葫辐,它的內(nèi)容會被 file1 的內(nèi)容重寫搜锰。 如果 file2 不存在,則創(chuàng)建 file2耿战。 這兩種情況下蛋叼,file1 都不再存在。
  • mv -i file1 file2:除了如果 file2 存在的話剂陡,在 file2 被重寫之前狈涮,用戶會得到 提示信息外,這個和上面的選項一樣鸭栖。
  • 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)信息同规。 如果不指定這個選項循狰,rm 會默默地刪除文件
  • r:遞歸地刪除文件,這意味著券勺,如果要刪除一個目錄绪钥,而此目錄 又包含子目錄,那么子目錄也會被刪除关炼。要刪除一個目錄程腹,必須指定這個選項。
  • f:忽視不存在的文件儒拂,不顯示提示信息寸潦。這選項會使 i 選項失效色鸳。
  • v:在執(zhí)行 rm 命令時,顯示翔實的操作信息见转。

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)建符號鏈接逾条。可以用其中一種方法來使用它("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)建了一個額外的目錄項。 硬鏈接有兩個重要局限性:

  • 一個硬鏈接不能關(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)這個文件的鏈接都刪除掉。知道硬鏈接很重要芳誓,因為你可能有時 會遇到它們余舶,但現(xiàn)在實際中更喜歡使用符號鏈接,下一步我們會討論符號鏈接锹淌。

5.2. 符號鏈接

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

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赚哗,一起剝皮案震驚了整個濱河市她紫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屿储,老刑警劉巖贿讹,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異够掠,居然都是意外死亡民褂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門疯潭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赊堪,“玉大人,你說我怎么就攤上這事袁勺”⑹常” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵期丰,是天一觀的道長群叶。 經(jīng)常有香客問我,道長钝荡,這世上最難降的妖魔是什么街立? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮埠通,結(jié)果婚禮上赎离,老公的妹妹穿的比我還像新娘。我一直安慰自己端辱,他們只是感情好梁剔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舞蔽,像睡著了一般荣病。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渗柿,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天个盆,我揣著相機(jī)與錄音,去河邊找鬼。 笑死颊亮,一個胖子當(dāng)著我的面吹牛柴梆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播终惑,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绍在,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了狠鸳?” 一聲冷哼從身側(cè)響起揣苏,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎件舵,沒想到半個月后卸察,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铅祸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年坑质,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片临梗。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡涡扼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盟庞,到底是詐尸還是另有隱情吃沪,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布什猖,位于F島的核電站票彪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏不狮。R本人自食惡果不足惜降铸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望摇零。 院中可真熱鬧推掸,春花似錦、人聲如沸驻仅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽噪服。三九已至铃彰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芯咧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敬飒,地道東北人邪铲。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像无拗,于是被迫代替她去往敵國和親带到。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容