網(wǎng)站優(yōu)怎么做百度一下百度網(wǎng)頁版
此時(shí)此刻,我們已經(jīng)準(zhǔn)備好了做些真正的工作!這一章節(jié)將會(huì)介紹以下命令:
? cp —復(fù)制文件和目錄
? mv —移動(dòng)/重命名文件和目錄
? mkdir —?jiǎng)?chuàng)建目錄
? rm —?jiǎng)h除文件和目錄
? ln —?jiǎng)?chuàng)建硬鏈接和符號(hào)鏈接
圖形文件管理器能輕松地實(shí)現(xiàn)簡單的文件操作,但是對(duì)于復(fù)雜的文件操作任務(wù),則使用命令行程序比較容易完成。例如,怎樣拷貝一個(gè)目錄下所有的 HTML 文件到目標(biāo)目錄, 同時(shí)保證只拷貝目標(biāo)目錄不存在或者版本比目標(biāo)目錄的文件更新的文件?要完成這個(gè)任務(wù),使用文件管理器相當(dāng)難,使用命令行相當(dāng)容易:
cp -u *.html destination
通配符
在開始使用命令之前,我們需要介紹一個(gè)使命令行如此強(qiáng)大的 shell 特性。因?yàn)閟hell 頻繁地使用文件名,shell 提供了特殊字符來幫助你快速指定一組文件名。這些特殊字符叫做通配符。使用通配符允許你依據(jù)字符的組合模式來選擇文件名。表1列出這些通配符以及它們所選擇的對(duì)象,表2列出了最常使用的字符類:
表4-1: 通配符
通配符 | 意義 |
---|---|
* | 匹配任意多個(gè)字符(包括零個(gè)或一個(gè)) |
? | 匹配任意一個(gè)字符(不包括零個(gè)) |
[characters] | 匹配任意一個(gè)屬于字符集(characters)中的字符 |
[!characters] | 匹配任意一個(gè)不是字符集中的字符 |
[[:class:]] | 匹配任意一個(gè)屬于指定字符類中的字符 |
表4-2: 列出了最常使用的字符類:
字符類 | 意義 |
---|---|
[:alnum:] | 匹配任意一個(gè)字母或數(shù)字 |
[:alpha:] | 匹配任意一個(gè)字母 |
[:digit:] | 匹配任意一個(gè)數(shù)字 |
[:lower:] | 匹配任意一個(gè)小寫字母 |
[:upper:] | 匹配任意一個(gè)大寫字母 |
借助通配符,為文件名構(gòu)建非常復(fù)雜的選擇標(biāo)準(zhǔn)成為可能。下面是一些類型匹配的范例:
表4-3: 通配符范例
字符類 | 意義 |
---|---|
* | 所有文件 |
g* | 文件名以“g”開頭的文件 |
b*.txt | 以"b"開頭,中間有零個(gè)或任意多個(gè)字符,并以".txt"結(jié)尾的文件 |
Data??? | 以“Data”開頭,其后緊接著3個(gè)字符的文件 |
[abc]* | 文件名以"a",“b”,或"c"開頭的文件 |
BACKUP.[0-9][0-9][0-9] | 以"BACKUP."開頭,并緊接著3個(gè)數(shù)字的文件 |
[[:upper:]]* | 以大寫字母開頭的文件 |
[![:digit:]]* | 不以數(shù)字開頭的文件 |
*[[:lower:]123] | 文件名以小寫字母結(jié)尾,或以 “1”,“2”,或 “3” 結(jié)尾的文件 |
接受文件名作為參數(shù)的任何命令,都可以使用通配符。
mkdir - 創(chuàng)建目錄
mkdir 命令是用來創(chuàng)建目錄的。它這樣工作:
# 會(huì)創(chuàng)建一個(gè)名為”dir1”的目錄
mkdir dir1#會(huì)創(chuàng)建三個(gè)目錄,名為 dir1, dir2, dir3。
mkdir dir1 dir2 dir3
cp - 復(fù)制文件和目錄
# 復(fù)制單個(gè)文件或目錄”item1”到文件或目錄”item2”
cp item1 item2#復(fù)制多個(gè)項(xiàng)目(文件或目錄)到一個(gè)目錄下
cp item... directory
表4-4:cp選項(xiàng)
選項(xiàng) | 意義 |
---|---|
-a, --archive | 復(fù)制文件和目錄,以及它們的屬性,包括擁有者和所有權(quán)。 通常情況下,文件拷貝具有執(zhí)行拷貝操作的用戶的默認(rèn)屬性。 |
-i, --interactive | 在覆蓋已存在文件之前,提示用戶確認(rèn)。如果這個(gè)選項(xiàng)不指定, cp 命令會(huì)默認(rèn)覆蓋文件。 |
-r, --recursive | 遞歸地復(fù)制目錄及目錄中的內(nèi)容。當(dāng)復(fù)制目錄時(shí), 需要這個(gè)選項(xiàng)(或者 -a 選項(xiàng))。 |
-u, --update | 當(dāng)把文件從一個(gè)目錄復(fù)制到另一個(gè)目錄時(shí),僅復(fù)制 目標(biāo)目錄中不存在的文件,或者是文件內(nèi)容新于目標(biāo)目錄中已經(jīng)存在文件的內(nèi)容的文件。 |
-v, --verbose | 顯示翔實(shí)的命令操作信息 |
表4-5: cp 實(shí)例
命令 | 運(yùn)行結(jié)果 |
---|---|
cp file1 file2 | 復(fù)制文件 file1 內(nèi)容到文件 file2。如果 file2 已經(jīng)存在, file2 的內(nèi)容會(huì)被 file1 的內(nèi)容覆蓋。如果 file2 不存在,則會(huì)創(chuàng)建 file2。 |
cp -i file1 file2 | 這條命令和上面的命令一樣,除了如果文件 file2 存在的話,在文件 file2 被覆蓋之前, 會(huì)提示用戶確認(rèn)信息。 |
cp file1 file2 dir1 | 復(fù)制文件 file1 和文件 file2 到目錄 dir1。目錄 dir1 必須存在。 |
cp dir1/* dir2 | 使用一個(gè)通配符,在目錄 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)容)將會(huì)被復(fù)制到 dir2 中。 |
mv - 移動(dòng)和重命名文件
mv 命令可以執(zhí)行文件移動(dòng)和文件命名任務(wù),這取決于你怎樣使用它。任何一種 情況下,完成操作之后,原來的文件名不再存在。mv 使用方法與 cp 很相像:
# 把文件或目錄 “item1” 移動(dòng)或重命名為 “item2”
mv item1 item2# 把一個(gè)或多個(gè)條目從一個(gè)目錄移動(dòng)到另一個(gè)目錄中
mv item... directory
表4-6: mv 選項(xiàng)
選項(xiàng) | 意義 |
---|---|
-i --interactive | 在覆蓋一個(gè)已經(jīng)存在的文件之前,提示用戶確認(rèn)信息。 如果不指定這個(gè)選項(xiàng),mv 命令會(huì)默認(rèn)覆蓋文件內(nèi)容。 |
-u --update | 當(dāng)把文件從一個(gè)目錄移動(dòng)另一個(gè)目錄時(shí),只是移動(dòng)不存在的文件, 或者文件內(nèi)容新于目標(biāo)目錄相對(duì)應(yīng)文件的內(nèi)容的文件。 |
-v --verbose | 當(dāng)操作 mv 命令時(shí),顯示翔實(shí)的操作信息。 |
表4-7: mv 實(shí)例
mv file1 file2 | 移動(dòng) file1 到 file2。如果 file2 存在,它的內(nèi)容會(huì)被 file1 的內(nèi)容覆蓋。 如果 file2 不存在,則創(chuàng)建 file2。 這兩種情況下,file1 都不再存在。 |
mv -i file1 file2 | 除了如果 file2 存在的話,在 file2 被覆蓋之前,用戶會(huì)得到 提示信息外,這個(gè)和上面的選項(xiàng)一樣。 |
mv file1 file2 dir1 | 移動(dòng) file1 和 file2 到目錄 dir1 中。dir1 必須已經(jīng)存在。 |
mv dir1 dir2 | 如果目錄 dir2 不存在,創(chuàng)建目錄 dir2,并且移動(dòng)目錄 dir1 的內(nèi)容到 目錄 dir2 中,同時(shí)刪除目錄 dir1。如果目錄 dir2 存在,移動(dòng)目錄 dir1(及它的內(nèi)容)到目錄 dir2。 |
rm - 刪除文件和目錄
rm 命令用來刪除文件和目錄:
# “item”代表一個(gè)或多個(gè)文件或目錄。
rm item...
表4-8: rm 選項(xiàng)
選項(xiàng) | 意義 |
---|---|
-i --interactive | 在刪除已存在的文件前,提示用戶確認(rèn)信息。 如果不指定這個(gè)選項(xiàng),rm 會(huì)默默地刪除文件。 |
-r, --recursive | 遞歸地刪除文件,這意味著,如果要?jiǎng)h除一個(gè)目錄,而此目錄 又包含子目錄,那么子目錄也會(huì)被刪除。要?jiǎng)h除一個(gè)目錄,必須指定這個(gè)選項(xiàng)。 |
-f, --force | 忽視不存在的文件,不顯示提示信息。這選項(xiàng)覆蓋了“–interactive”選項(xiàng)。 |
-v --verbose | 在執(zhí)行 rm 命令時(shí),顯示翔實(shí)的操作信息。 |
表4-9: rm 實(shí)例
mv file1 file2 | 移動(dòng) file1 到 file2。如果 file2 存在,它的內(nèi)容會(huì)被 file1 的內(nèi)容覆蓋。 如果 file2 不存在,則創(chuàng)建 file2。 這兩種情況下,file1 都不再存在。 |
mv -i file1 file2 | 除了如果 file2 存在的話,在 file2 被覆蓋之前,用戶會(huì)得到 提示信息外,這個(gè)和上面的選項(xiàng)一樣。 |
mv file1 file2 dir1 | 移動(dòng) file1 和 file2 到目錄 dir1 中。dir1 必須已經(jīng)存在。 |
mv dir1 dir2 | 如果目錄 dir2 不存在,創(chuàng)建目錄 dir2,并且移動(dòng)目錄 dir1 的內(nèi)容到 目錄 dir2 中,同時(shí)刪除目錄 dir1。如果目錄 dir2 存在,移動(dòng)目錄 dir1(及它的內(nèi)容)到目錄 dir2。 |
tips: Linux,沒有復(fù)原命令。一旦你用 rm 刪除了一些東西, 它就消失了。 當(dāng)你使用帶有通配符的 rm 命令時(shí)(除了仔細(xì)檢查輸入的內(nèi)容外), 先用 ls 命令來測(cè)試通配符。這會(huì)讓你看到將要被刪除的文件是什么。然后按下上箭頭按鍵,重新調(diào)用 剛剛執(zhí)行的命令,用 rm 替換 ls。
思考一下這個(gè)經(jīng)典的例子。假如說,你只想刪除一個(gè)目錄中的 HTML 文件。輸入:
rm .html
這是正確的,如果你不小心在 “” 和 “.html” 之間多輸入了一個(gè)空格,就像這樣:
rm * .html
這個(gè) rm 命令會(huì)刪除目錄中的所有文件,還會(huì)抱怨沒有文件叫做 “.html”。
ln — 創(chuàng)建鏈接
ln 命令既可創(chuàng)建硬鏈接,也可以創(chuàng)建符號(hào)鏈接??梢杂脙烧咧械娜我庖环N形式來使用它:
#創(chuàng)建硬鏈接
ln file link# 創(chuàng)建符號(hào)鏈接,”item” 可以是一個(gè)文件或是一個(gè)目錄。
ln -s item link
與更加現(xiàn)代的符號(hào)鏈接相比,硬鏈接是最初 Unix 創(chuàng)建鏈接的方式。每個(gè)文件默認(rèn)會(huì)有一個(gè)硬鏈接, 這個(gè)硬鏈接給予文件名字。我們每創(chuàng)建一個(gè)硬鏈接,就為一個(gè)文件創(chuàng)建了一個(gè)額外的目錄項(xiàng)。
硬鏈接有兩個(gè)重要局限性:
1.一個(gè)硬鏈接不能關(guān)聯(lián)它所在文件系統(tǒng)之外的文件。這是說一個(gè)鏈接不能關(guān)聯(lián) 與鏈接本身不在同一個(gè)磁盤分區(qū)上的文件。
2.一個(gè)硬鏈接不能關(guān)聯(lián)一個(gè)目錄。
一個(gè)硬鏈接和文件本身表面上看不出什么區(qū)別。它跟符號(hào)鏈接很不一樣,當(dāng)你列出一個(gè)包含硬鏈接的目錄 內(nèi)容時(shí),你會(huì)看不到有什么特殊說明來表示這是一個(gè)鏈接。當(dāng)一個(gè)硬鏈接被刪除時(shí),這個(gè)鏈接 被刪除,但是文件本身的內(nèi)容仍然存在(這是說,它所占的磁盤空間不會(huì)被釋放), 直到所有關(guān)聯(lián)這個(gè)文件的鏈接都刪除掉。知道硬鏈接很重要,因?yàn)槟憧赡苡袝r(shí) 會(huì)遇到它們,但現(xiàn)在實(shí)際中更喜歡使用符號(hào)鏈接,下一步我們會(huì)討論符號(hào)鏈接。
符號(hào)鏈接
創(chuàng)建符號(hào)鏈接是為了克服硬鏈接的局限性。符號(hào)鏈接生效,是通過創(chuàng)建一個(gè) 特殊類型的文件,這個(gè)文件包含一個(gè)關(guān)聯(lián)文件或目錄的文本指針。在這一方面, 它們和 Windows 的快捷方式差不多,當(dāng)然,符號(hào)鏈接早于 Windows 的快捷方式 很多年;-)
一個(gè)符號(hào)鏈接指向一個(gè)文件,而且這個(gè)符號(hào)鏈接本身與其它的符號(hào)鏈接幾乎沒有區(qū)別。 例如,如果你往一個(gè)符號(hào)鏈接里面寫入東西,那么相關(guān)聯(lián)的文件也被寫入。然而, 當(dāng)你刪除一個(gè)符號(hào)鏈接時(shí),只有這個(gè)鏈接被刪除,而不是文件自身。如果先于符號(hào)鏈接 刪除文件,這個(gè)鏈接仍然存在,但是不指向任何東西。在這種情況下,這個(gè)鏈接被稱為 壞鏈接。在許多實(shí)現(xiàn)中,ls 命令會(huì)以不同的顏色展示壞鏈接,比如說紅色,來顯示它們 的存在。
實(shí)戰(zhàn)演習(xí)
#下面我們將要做些真正的文件操作,讓我們先建立一個(gè)安全地帶, 來玩一下文件操作命令。
#首先,我們需要一個(gè)工作目錄。在我們的 家目錄下創(chuàng)建一個(gè)叫做“playground”的目錄。
[SI@localhost /]$ mkdir playground#在 playground 目錄下創(chuàng)建一對(duì)目錄 ,分別叫做 “dir1” 和 “dir2”。
[SI@localhost /]$ cd playground/
[SI@localhost playground]$ mkdir dir1 dir2
[SI@localhost playground]$ ls
dir1 dir2#我們使用 cp 命令從 /etc 目錄復(fù)制 passwd 文件到當(dāng)前工作目錄下,我們使用命令末尾的一個(gè)圓點(diǎn)來簡化當(dāng)前工作目錄的寫法:
[SI@localhost playground]$ cp /etc/passwd .#如果我們執(zhí)行 ls 命令, 可以看到我們的文件:
[SI@localhost playground]$ ls -l
總用量 4
drwxr-xr-x 2 root root 6 2月 20 17:35 dir1
drwxr-xr-x 2 root root 6 2月 20 17:35 dir2
-rw-r--r-- 1 root root 2742 2月 20 17:36 passwd#如果希望得到警告的話,需要加入“-i”(互動(dòng))選項(xiàng),在提示信息后輸入”y”,文件就會(huì)被覆蓋:
[SI@localhost playground]$ cp -i /etc/passwd .
cp:是否覆蓋"./passwd"? y
[SI@localhost playground]$ ls
dir1 dir2 passwd#重復(fù)操作復(fù)制命令,使用”-v”選項(xiàng)(詳細(xì)),看看它做了些什么:
[SI@localhost playground]$ cp -v /etc/passwd .
cp:是否覆蓋"./passwd"? y
"/etc/passwd" -> "./passwd"#文件名 "passwd" 修改為fun
[SI@localhost playground]$ mv passwd fun#讓我們來傳送 fun 文件,通過移動(dòng)重命名的文件到各個(gè)子目錄, 然后再把它移回到當(dāng)前目錄:
[SI@localhost playground]$ mv fun dir1
[SI@localhost playground]$ mv dir1/fun dir2
[SI@localhost playground]$ mv dir2/fun .
[SI@localhost playground]$ mv fun dir1#接下來看看移動(dòng)目錄的效果
[SI@localhost playground]$ mv fun dir1
[SI@localhost playground]$ mv dir1 dir2
[SI@localhost playground]$ ls -l dir2/dir1
總用量 4
-rw-r--r-- 1 root root 2742 2月 20 17:38 fun#創(chuàng)建硬鏈接
# fun 和 fun-hard 共享一樣的索引節(jié)點(diǎn)號(hào),這就證實(shí)這兩個(gè)文件是同一個(gè)文件。
[SI@localhost playground]$ ln fun fun-hard
[SI@localhost playground]$ ln fun dir1/fun-hard
[SI@localhost playground]$ ln fun dir2/fun-hard
[SI@localhost playground]$ ls -li
總用量 83627206 drwxr-xr-x 2 root root 22 2月 20 17:47 dir1
280464103 drwxr-xr-x 2 root root 22 2月 20 17:48 dir2
807328518 -rw-r--r-- 4 root root 2742 2月 20 17:38 fun
807328518 -rw-r--r-- 4 root root 2742 2月 20 17:38 fun-hard#創(chuàng)建符號(hào)鏈接
#
[SI@localhost playground]$ ln -s fun fun-sym
[SI@localhost playground]$ ln -s ../fun dir1/fun-sym
[SI@localhost playground]$ ln -s ../fun dir2/fun-sym
[SI@localhost playground]$ ls -li
總用量 83627206 drwxr-xr-x 2 root root 37 2月 20 18:38 dir1
280464103 drwxr-xr-x 2 root root 37 2月 20 18:38 dir2
807328518 -rw-r--r-- 4 root root 2742 2月 20 17:38 fun
807328518 -rw-r--r-- 4 root root 2742 2月 20 17:38 fun-hard
808578603 lrwxrwxrwx 1 root root 3 2月 20 18:38 fun-sym -> fun#除了普通文件,符號(hào)鏈接也能關(guān)聯(lián)目錄:
[SI@localhost playground]$ ln -s dir1 dir1-sym
[SI@localhost playground]$ ls -li
總用量 83627206 drwxr-xr-x 2 root root 37 2月 20 18:38 dir1
808578613 lrwxrwxrwx 1 root root 4 2月 20 18:41 dir1-sym -> dir1
280464103 drwxr-xr-x 2 root root 37 2月 20 18:38 dir2
807328518 -rw-r--r-- 4 root root 2742 2月 20 17:38 fun
807328518 -rw-r--r-- 4 root root 2742 2月 20 17:38 fun-hard
808578603 lrwxrwxrwx 1 root root 3 2月 20 18:38 fun-sym -> fun#rm 命令被用來刪除文件和目錄:
[SI@localhost playground]$ rm fun-hard
[SI@localhost playground]$ rm -i fun#讓我們看一下 ls 的輸出結(jié)果。注意,fun-sym 發(fā)生了 什么事? 因?yàn)樗且粋€(gè)符號(hào)鏈接,指向已經(jīng)不存在的文件,鏈接已經(jīng)壞了大多數(shù) Linux 的發(fā)行版本配置 ls 顯示損壞的鏈接。壞的鏈接以閃爍的 紅色文本顯示!損壞鏈接的出現(xiàn),并不危險(xiǎn),但是相當(dāng)混亂:
[root@localhost playground]# ls -li
總用量 03627206 drwxr-xr-x 2 root root 37 2月 20 18:38 dir1
808578613 lrwxrwxrwx 1 root root 4 2月 20 18:41 dir1-sym -> dir1
280464103 drwxr-xr-x 2 root root 37 2月 20 18:38 dir2
808578603 lrwxrwxrwx 1 root root 3 2月 20 18:38 fun-sym -> fun#刪除fun-sym,刪除playground
[SI@localhost playground]$ rm fun-sym
[SI@localhost playground]$ cd ..
[SI@localhost /]$ rm -r playground