此時此刻,我們已經準備好了做些真正的工作!這一章節將會介紹以下命令:
> * cp — 復制文件和目錄
> * mv — 移動/重命名文件和目錄
> * mkdir — 創建目錄
> * rm — 刪除文件和目錄
> * ln — 創建硬鏈接和符號鏈接
這五個命令屬于最常使用的 Linux 命令之列。它們用來操作文件和目錄。
現在,坦誠地說,用圖形文件管理器來完成一些由這些命令執行的任務會更容易些。使用文件管理器, 我們可以把文件從一個目錄拖放到另一個目錄,剪貼和粘貼文件,刪除文件等等。那么, 為什么還使用早期的命令行程序呢?
答案是命令行程序,功能強大靈活。雖然圖形文件管理器能輕松地實現簡單的文件操作,但是對于 復雜的文件操作任務,則使用命令行程序比較容易完成。例如,怎樣復制一個目錄下的 HTML 文件 到另一個目錄,但這些 HTML 文件不存在于目標目錄,或者是文件版本新于目標目錄里的文件? 要完成這個任務,使用文件管理器相當難,使用命令行相當容易:
~~~
cp -u *.html destination
~~~
## 通配符
在開始使用命令之前,我們需要介紹一個使命令行如此強大的 shell 特性。因為 shell 頻繁地使用 文件名,shell 提供了特殊字符來幫助你快速指定一組文件名。這些特殊字符叫做通配符。 使用通配符(也以文件名代換著稱)允許你依據字符類型來選擇文件名。下表列出這些通配符 以及它們所選擇的對象:
表5-1: 通配符
| 通配符 | 意義 |
|--------|-------|
| * | 匹配任意多個字符(包括零個或一個) |
| ? | 匹配任意一個字符(不包括零個) |
| [characters] | 匹配任意一個屬于字符集中的字符 |
| [!characters] | 匹配任意一個不是字符集中的字符 |
| [[:class:]] | 匹配任意一個屬于指定字符類中的字符 |
表5-2列出了最常使用的字符類:
表5-2: 普遍使用的字符類
| 字符類 | 意義 |
|--------|-------|
| [:alnum:] | 匹配任意一個字母或數字 |
| [:alpha:] | 匹配任意一個字母 |
| [:digit:] | 匹配任意一個數字 |
| [:lower:] | 匹配任意一個小寫字母 |
| [:upper] | 匹配任意一個大寫字母 |
借助通配符,為文件名構建非常復雜的選擇標準成為可能。下面是一些類型匹配的范例:
表5-3: 通配符范例
| 模式 | 匹配對象 |
|--------|-------|
| * | 所有文件 |
| g* | 文件名以“g”開頭的文件 |
| b*.txt | 以"b"開頭,中間有零個或任意多個字符,并以".txt"結尾的文件 |
| Data??? | 以“Data”開頭,其后緊接著3個字符的文件 |
| [abc]* | 文件名以"a","b",或"c"開頭的文件 |
| BACKUP.[0-9][0-9][0-9] | 以"BACKUP."開頭,并緊接著3個數字的文件 |
| [[:upper:]]* | 以大寫字母開頭的文件 |
| [![:digit:]]* | 不以數字開頭的文件 |
| *[[:lower:]123] | 文件名以小寫字母結尾,或以 “1”,“2”,或 “3” 結尾的文件 |
接受文件名作為參數的任何命令,都可以使用通配符,我們會在第八章更深入的談到這個知識點。
> 字符范圍
>
> 如果你用過別的類 Unix 系統的操作環境,或者是讀過這方面的書籍,你可能遇到過[A-Z]或 [a-z]形式的字符范圍表示法。這些都是傳統的 Unix 表示法,并且在早期的 Linux 版本中仍有效。 雖然它們仍然起作用,但是你必須小心地使用它們,因為它們不會產生你期望的輸出結果,除非 你合理地配置它們。從現在開始,你應該避免使用它們,并且用字符類來代替它們。
>
> 通配符在 GUI 中也有效
>
> 通配符非常重要,不僅因為它們經常用在命令行中,而且一些圖形文件管理器也支持它們。
>
> * 在 Nautilus (GNOME 文件管理器)中,可以通過 Edit/Select 模式菜單項來選擇文件。 輸入一個用通配符表示的文件選擇模式后,那么當前所瀏覽的目錄中,所匹配的文件名就會高亮顯示。
>
>
> * 在 Dolphin 和 Konqueror(KDE 文件管理器)中,可以在地址欄中直接輸入通配符。例如, 如果你想查看目錄 /usr/bin 中,所有以小寫字母 ‘u’ 開頭的文件, 在地址欄中敲入 ‘/usr/bin/u*‘,則 文件管理器會顯示匹配的結果。
>
>
>
> 最初源于命令行界面中的想法,在圖形界面中也適用。這就是使 Linux 桌面系統 如此強大的眾多原因中的一個
## mkdir - 創建目錄
mkdir 命令是用來創建目錄的。它這樣工作:
~~~
mkdir directory...
~~~
**注意表示法:**?在描述一個命令時(如上所示),當有三個圓點跟在一個命令的參數后面, 這意味著那個參數可以重復,就像這樣:
~~~
mkdir dir1
~~~
會創建一個名為”dir1”的目錄,而
~~~
mkdir dir1 dir2 dir3
~~~
會創建三個目錄,名為 dir1, dir2, dir3。
## cp - 復制文件和目錄
cp 命令,復制文件或者目錄。它有兩種使用方法:
~~~
cp item1 item2
~~~
復制單個文件或目錄”item1”到文件或目錄”item2”,和:
~~~
cp item... directory
~~~
復制多個項目(文件或目錄)到一個目錄下。
## 有用的選項和實例
這里列舉了 cp 命令一些有用的選項(短選項和等效的長選項):
表5-4: cp 選項
| 選項 | 意義 |
|--------|-------|
| -a, --archive | 復制文件和目錄,以及它們的屬性,包括所有權和權限。 通常,復本具有用戶所操作文件的默認屬性。 |
| -i, --interactive | 在重寫已存在文件之前,提示用戶確認。如果這個選項不指定, cp 命令會默認重寫文件。 |
| -r, --recursive | 遞歸地復制目錄及目錄中的內容。當復制目錄時, 需要這個選項(或者-a 選項)。 |
| -u, --update | 當把文件從一個目錄復制到另一個目錄時,僅復制 目標目錄中不存在的文件,或者是文件內容新于目標目錄中已經存在的文件。 |
| -v, --verbose | 顯示翔實的命令操作信息 |
表5-5: cp 實例
| 命令 | 運行結果 |
|--------|-------|
| cp file1 file2 | 復制文件 file1 內容到文件 file2。如果 file2 已經存在, file2 的內容會被 file1 的內容重寫。如果 file2 不存在,則會創建 file2。 |
| cp -i file1 file2 | 這條命令和上面的命令一樣,除了如果文件 file2 存在的話,在文件 file2 被重寫之前, 會提示用戶確認信息。 |
| cp file1 file2 dir1 | 復制文件 file1 和文件 file2 到目錄 dir1。目錄 dir1 必須存在。 |
| cp dir1/* dir2 | 使用一個通配符,在目錄 dir1 中的所有文件都被復制到目錄 dir2 中。 dir2 必須已經存在。 |
| cp -r dir1 dir2 | 復制目錄 dir1 中的內容到目錄 dir2。如果目錄 dir2 不存在, 創建目錄 dir2,操作完成后,目錄 dir2 中的內容和 dir1 中的一樣。 如果目錄 dir2 存在,則目錄 dir1 (和目錄中的內容)將會被復制到 dir2 中。 |
## mv - 移動和重命名文件
mv 命令可以執行文件移動和文件命名任務,這依賴于你怎樣使用它。任何一種 情況下,完成操作之后,原來的文件名不再存在。mv 使用方法與 cp 很相像:
~~~
mv item1 item2
~~~
把文件或目錄 “item1” 移動或重命名為 “item2”, 或者:
~~~
mv item... directory
~~~
把一個或多個條目從一個目錄移動到另一個目錄中。
## 有用的選項和實例
mv 與 cp 共享了很多一樣的選項:
表5-6: mv 選項
| 選項 | 意義 |
|--------|-------|
| -i --interactive | 在重寫一個已經存在的文件之前,提示用戶確認信息。?**如果不指定這個選項,mv 命令會默認重寫文件內容。** |
| -u --update | 當把文件從一個目錄移動另一個目錄時,只是移動不存在的文件, 或者文件內容新于目標目錄相對應文件的內容。 |
| -v --verbose | 當操作 mv 命令時,顯示翔實的操作信息。 |
表5-7: mv 實例
|||
|--------|-------|
| mv file1 file2 | 移動 file1 到 file2。**如果 file2 存在,它的內容會被 file1 的內容重寫。?**如果 file2 不存在,則創建 file2。**?每種情況下,file1 不再存在。** |
| mv -i file1 file2 | 除了如果 file2 存在的話,在 file2 被重寫之前,用戶會得到 提示信息外,這個和上面的選項一樣。 |
| mv file1 file2 dir1 | 移動 file1 和 file2 到目錄 dir1 中。dir1 必須已經存在。 |
| mv dir1 dir2 | 如果目錄 dir2 不存在,創建目錄 dir2,并且移動目錄 dir1 的內容到 目錄 dir2 中,同時刪除目錄 dir1。如果目錄 dir2 存在,移動目錄 dir1(及它的內容)到目錄 dir2。 |
### rm - 刪除文件和目錄
rm 命令用來移除(刪除)文件和目錄:
~~~
rm item...
~~~
“item”代表一個或多個文件或目錄。
### 有用的選項和實例
下表是一些普遍使用的 rm 選項:
表5-8: rm 選項
| 選項 | 意義 |
|--------|-------|
| -i, --interactive | 在刪除已存在的文件前,提示用戶確認信息。?**如果不指定這個選項,rm 會默默地刪除文件** |
| -r, --recursive | 遞歸地刪除文件,這意味著,如果要刪除一個目錄,而此目錄 又包含子目錄,那么子目錄也會被刪除。要刪除一個目錄,必須指定這個選項。 |
| -f, --force | 忽視不存在的文件,不顯示提示信息。這選項顛覆了“--interactive”選項。 |
| -v, --verbose | 在執行 rm 命令時,顯示翔實的操作信息。 |
表5-9: rm 實例
| 命令 | 運行結果 |
|--------|-------|
| rm file1 | 默默地刪除文件 |
| rm -i file1 | 除了在刪除文件之前,提示用戶確認信息之外,和上面的命令作用一樣。 |
| rm -r file1 dir1 | 刪除文件 file1, 目錄 dir1,及 dir1 中的內容。 |
| rm -rf file1 dir1 | 同上,除了如果文件 file1,或目錄 dir1 不存在的話,rm 仍會繼續執行。 |
> 小心 rm!
>
> 類 Unix 的操作系統,比如說 Linux,沒有復原命令。一旦你用 rm 刪除了一些東西, 它就消失了。Linux 假定你很聰明,你知道你在做什么。
>
> 尤其要小心通配符。思考一下這個經典的例子。假如說,你只想刪除一個目錄中的 HTML 文件。輸入:
>
> rm *.html
>
> 這是正確的,如果你不小心在 “*” 和 “.html” 之間多輸入了一個空格,就像這樣:
>
> rm * .html
>
> 這個 rm 命令會刪除目錄中的所有文件,還會抱怨沒有文件叫做 “.html”。
>
> 小貼士。?無論什么時候,rm 命令用到通配符(除了仔細檢查輸入的內容外!), 用 ls 命令來測試通配符。這會讓你看到要刪除的文件列表。然后按下上箭頭按鍵,重新調用 剛剛執行的命令,用 rm 替換 ls。
## ln — 創建鏈接
ln 命令即可創建硬鏈接,也可以創建符號鏈接。可以用其中一種方法來使用它:
~~~
ln file link
~~~
創建硬鏈接,和:
~~~
ln -s item link
~~~
創建符號鏈接,”item” 可以是一個文件或是一個目錄。
## 硬鏈接
硬鏈接和符號鏈接比起來,硬鏈接是最初 Unix 創建鏈接的方式,而符號鏈接更加現代。 在默認情況下,每個文件有一個硬鏈接,這個硬鏈接給文件起名字。當我們創建一個 硬鏈接以后,就為文件創建了一個額外的目錄條目。硬鏈接有兩個重要局限性:
1. 一個硬鏈接不能關聯它所在文件系統之外的文件。這是說一個鏈接不能關聯 與鏈接本身不在同一個磁盤分區上的文件。
2. 一個硬鏈接不能關聯一個目錄。
一個硬鏈接和文件本身沒有什么區別。不像符號鏈接,當你列出一個包含硬鏈接的目錄 內容時,你會看到沒有特殊的鏈接指示說明。當一個硬鏈接被刪除時,這個鏈接 被刪除,但是文件本身的內容仍然存在(這是說,它所占的磁盤空間不會被重新分配), 直到所有關聯這個文件的鏈接都刪除掉。知道硬鏈接很重要,因為你可能有時 會遇到它們,但現在實際中更喜歡使用符號鏈接,下一步我們會討論符號鏈接。
## 符號鏈接
創建符號鏈接是為了克服硬鏈接的局限性。符號鏈接生效,是通過創建一個 特殊類型的文件,這個文件包含一個關聯文件或目錄的文本指針。在這一方面, 它們和 Windows 的快捷方式差不多,當然,符號鏈接早于 Windows 的快捷方式 很多年;-)
一個符號鏈接指向一個文件,而且這個符號鏈接本身與其它的符號鏈接幾乎沒有區別。 例如,如果你往一個符號鏈接里面寫入東西,那么相關聯的文件也被寫入。然而, 當你刪除一個符號鏈接時,只有這個鏈接被刪除,而不是文件自身。如果先于符號鏈接 刪除文件,這個鏈接仍然存在,但是不指向任何東西。在這種情況下,這個鏈接被稱為 壞鏈接。在許多實現中,ls 命令會以不同的顏色展示壞鏈接,比如說紅色,來顯示它們 的存在。
關于鏈接的概念,看起來很迷惑,但不要膽怯。我們將要試著練習 這些命令,希望,它變得清晰起來。
## 創建游戲場(實戰演習)
下面我們將要做些真正的文件操作,讓我們先建立一個安全地帶, 來玩一下文件操作命令。首先,我們需要一個工作目錄。在我們的 家目錄下創建一個叫做“playground”的目錄。
## 創建目錄
mkdir 命令被用來創建目錄。首先確定我們在我們的家目錄下,來創建 playground 目錄, 然后創建這個新目錄:
~~~
[me@linuxbox ~]$ cd
[me@linuxbox ~]$ mkdir playground
~~~
為了讓我們的游戲場更加有趣,在 playground 目錄下創建一對目錄 ,分別叫做 “dir1” 和 “dir2”。更改我們的當前工作目錄到 playground,然后 執行 mkdir 命令:
~~~
[me@linuxbox ~]$ cd playground
[me@linuxbox playground]$ mkdir dir1 dir2
~~~
注意到 mkdir 命令可以接受多個參數,它允許我們用一個命令來創建這兩個目錄。
## 復制文件
下一步,讓我們得到一些數據到我們的游戲場中。通過復制一個文件來實現目的。 使用 cp 命令,我們從 /etc 目錄復制 passwd 文件到當前工作目錄下:
~~~
[me@linuxbox playground]$ cp /etc/passwd .
~~~
注意:我們怎樣使用當前工作目錄的快捷方式,命令末尾的單個圓點。如果我們執行 ls 命令, 可以看到我們的文件:
~~~
[me@linuxbox playground]$ ls -l
total 12
drwxrwxr-x 2 me me 4096 2008-01-10 16:40 dir1
drwxrwxr-x 2 me me 4096 2008-01-10 16:40 dir2
-rw-r--r-- 1 me me 1650 2008-01-10 16:07 passwd
~~~
現在,僅僅是為了高興,重復操作復制命令,使用”-v”選項(嘮叨),看一個它的作用:
~~~
[me@linuxbox playground]$ cp -v /etc/passwd .
`/etc/passwd' -> `./passwd'
~~~
cp 命令再一次執行了復制操作,但是這次顯示了一條簡潔的信息,指明它 進行了什么操作。注意,cp 沒有警告,就重寫了第一次復制的文件。這是一個案例, cp 假定你知道你的所作所為。為了得到警示信息,在命令中包含”-i”選項:
~~~
[me@linuxbox playground]$ cp -i /etc/passwd .
cp: overwrite `./passwd'?
~~~
響應命令提示信息,輸入”y”,文件就會被重寫,其它的字符(例如,”n”)會導致 cp 命令不理會文件。
## 移動和重命名文件
現在,”passwd” 這個名字,看起來不怎么有趣,這是個游戲場,所以我們給它改個名字:
~~~
[me@linuxbox playground]$ mv passwd fun
~~~
讓我們來傳送 fun 文件,通過移動重命名的文件到各個子目錄, 然后再把它移回到當前目錄:
~~~
[me@linuxbox playground]$ mv fun dir1
~~~
首先,把 fun 文件移動目錄 dir1 中,然后:
~~~
[me@linuxbox playground]$ mv dir1/fun dir2
~~~
再把 fun 文件從 dir1 移到目錄 dir2, 然后:
~~~
[me@linuxbox playground]$ mv dir2/fun .
~~~
最后,再把 fun 文件帶回到當前工作目錄。下一步,來看看移動目錄的效果。 首先,我們先移動我們的數據文件到 dir1 目錄:
~~~
[me@linuxbox playground]$ mv fun dir1
~~~
然后移動 dir1到 dir2目錄,用 ls 來確認執行結果:
~~~
[me@linuxbox playground]$ mv dir1 dir2
[me@linuxbox playground]$ ls -l dir2
total 4
drwxrwxr-x 2 me me 4096 2008-01-11 06:06 dir1
[me@linuxbox playground]$ ls -l dir2/dir1
total 4
-rw-r--r-- 1 me me 1650 2008-01-10 16:33 fun
~~~
注意:因為目錄 dir2 已經存在,mv 命令移動 dir1 到 dir2 目錄。如果 dir2 不存在, mv 會重新命名 dir1 為 dir2。最后,把所有的東西放回原處。
~~~
[me@linuxbox playground]$ mv dir2/dir1 .
[me@linuxbox playground]$ mv dir1/fun .
~~~
## 創建硬鏈接
現在,我們試著創建鏈接。首先是硬鏈接。我們創建一些關聯我們 數據文件的鏈接:
~~~
[me@linuxbox playground]$ ln fun fun-hard
[me@linuxbox playground]$ ln fun dir1/fun-hard
[me@linuxbox playground]$ ln fun dir2/fun-hard
~~~
所以現在,我們有四個文件”fun”的實例。看一下目錄 playground 中的內容:
~~~
[me@linuxbox playground]$ ls -l
total 16
drwxrwxr-x 2 me me 4096 2008-01-14 16:17 dir1
drwxrwxr-x 2 me me 4096 2008-01-14 16:17 dir2
-rw-r--r-- 4 me me 1650 2008-01-10 16:33 fun
-rw-r--r-- 4 me me 1650 2008-01-10 16:33 fun-hard
~~~
注意到一件事,列表中,文件 fun 和 fun-hard 的第二個字段是”4”,這個數字 是文件”fun”的硬鏈接數目。你要記得一個文件至少有一個硬鏈接,因為文件 名就是由鏈接創建的。所以,我們怎樣知道實際上 fun 和 fun-hard 是一樣的文件呢? 在這個例子里,ls 不是很有用。雖然我們能夠看到 fun 和 fun-hard 文件大小一樣 (第五字段),但我們的列表沒有提供可靠的信息來確定(這兩個文件一樣)。 為了解決這個問題,我們更深入的研究一下。
當考慮到硬鏈接的時候,我們可以假設文件由兩部分組成:包含文件內容的數據部分和持有文件名的名字部分 ,這將有助于我們理解這個概念。當我們創建文件硬鏈接的時候,實際上是為文件創建了額外的名字部分, 并且這些名字都關系到相同的數據部分。這時系統會分配一連串的磁盤給所謂的索引節點,然后索引節點與文 件名字部分相關聯。因此每一個硬鏈接都關系到一個具體的包含文件內容的索引節點。
ls 命令有一種方法,來展示(文件索引節點)的信息。在命令中加上”-i”選項:
~~~
[me@linuxbox playground]$ ls -li
total 16
12353539 drwxrwxr-x 2 me me 4096 2008-01-14 16:17 dir1
12353540 drwxrwxr-x 2 me me 4096 2008-01-14 16:17 dir2
12353538 -rw-r--r-- 4 me me 1650 2008-01-10 16:33 fun
12353538 -rw-r--r-- 4 me me 1650 2008-01-10 16:33 fun-hard
~~~
在這個版本的列表中,第一字段表示文件索引節點號,正如我們所見到的, fun 和 fun-hard 共享一樣的索引節點號,這就證實這兩個文件是一樣的文件。
## 創建符號鏈接
建立符號鏈接的目的是為了克服硬鏈接的兩個缺點:硬鏈接不能跨越物理設備, 硬鏈接不能關聯目錄,只能是文件。符號鏈接是文件的特殊類型,它包含一個指向 目標文件或目錄的文本指針。
符號鏈接的建立過程相似于創建硬鏈接:
~~~
[me@linuxbox playground]$ ln -s fun fun-sym
[me@linuxbox playground]$ ln -s ../fun dir1/fun-sym
[me@linuxbox playground]$ ln -s ../fun dir2/fun-sym
~~~
第一個實例相當直接,在 ln 命令中,簡單地加上”-s”選項就可以創建一個符號鏈接, 而不是一個硬鏈接。下面兩個例子又是怎樣呢? 記住,當我們創建一個符號鏈接 的時候,會建立一個目標文件在哪里和符號鏈接有關聯的文本描述。如果我們看看 ls 命令的輸出結果,比較容易理解。
~~~
[me@linuxbox playground]$ ls -l dir1
total 4
-rw-r--r-- 4 me me 1650 2008-01-10 16:33 fun-hard
lrwxrwxrwx 1 me me 6 2008-01-15 15:17 fun-sym -> ../fun
~~~
目錄 dir1 中,fun-sym 的列表說明了它是一個符號鏈接,通過在第一字段中的首字符”l” 可知,并且它還指向”../fun”,也是正確的。相對于 fun-sym 的存儲位置,fun 在它的 上一個目錄。同時注意,符號鏈接文件的長度是6,這是字符串”../fun”所包含的字符數, 而不是符號鏈接所指向的文件長度。
當建立符號鏈接時,你即可以使用絕對路徑名:
~~~
ln -s /home/me/playground/fun dir1/fun-sym
~~~
也可用相對路徑名,正如前面例題所展示的。使用相對路徑名更令人滿意, 因為它允許一個包含符號鏈接的目錄重命名或移動,而不會破壞鏈接。
除了普通文件,符號鏈接也能關聯目錄:
~~~
[me@linuxbox playground]$ ln -s dir1 dir1-sym
[me@linuxbox playground]$ ls -l
total 16
...省略
~~~
## 移動文件和目錄
正如我們之前討論的,rm 命令被用來刪除文件和目錄。我們將要使用它 來清理一下我們的游戲場。首先,刪除一個硬鏈接:
~~~
[me@linuxbox playground]$ rm fun-hard
[me@linuxbox playground]$ ls -l
total 12
...省略
~~~
結果不出所料。文件 fun-hard 消失了,文件 fun 的鏈接數從4減到3,正如 目錄列表第二字段所示。下一步,我們會刪除文件 fun,僅為了娛樂,我們會包含”-i” 選項,看一個它的作用:
~~~
[me@linuxbox playground]$ rm -i fun
rm: remove regular file `fun'?
~~~
在提示符下輸入”y”,刪除文件。讓我們看一下 ls 的輸出結果。注意,fun-sym 發生了 什么事? 因為它是一個符號鏈接,指向已經不存在的文件,鏈接已經壞了:
~~~
[me@linuxbox playground]$ ls -l
total 8
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir1
lrwxrwxrwx 1 me me 4 2008-01-16 14:45 dir1-sym -> dir1
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir2
lrwxrwxrwx 1 me me 3 2008-01-15 15:15 fun-sym -> fun
~~~
大多數 Linux 的發行版本配置 ls 顯示損壞的鏈接。在 Fedora 系統中,壞的鏈接以閃爍的 紅色文本顯示!損壞鏈接的出現,并不危險,但是相當混亂。如果我們試著使用 損壞的鏈接,會看到以下情況:
~~~
[me@linuxbox playground]$ less fun-sym
fun-sym: No such file or directory
~~~
稍微清理一下現場。刪除符號鏈接:
~~~
[me@linuxbox playground]$ rm fun-sym dir1-sym
[me@linuxbox playground]$ ls -l
total 8
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir1
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir2
~~~
對于符號鏈接,有一點值得記住,執行的大多數文件操作是針對鏈接的對象,而不是鏈接本身。 而 rm 命令是個特例。當你刪除鏈接的時候,刪除鏈接本身,而不是鏈接的對象。
最后,我們將刪除我們的游戲場。為了完成這個工作,我們將返回到 我們的家目錄,然后用 rm 命令加上選項(-r),來刪除目錄 playground, 和目錄下的所有內容,包括子目錄:
~~~
[me@linuxbox playground]$ cd
[me@linuxbox ~]$ rm -r playground
~~~
> 用 GUI 來創建符號鏈接
>
> 文件管理器 GNOME 和 KDE 都提供了一個簡單而且自動化的方法來創建符號鏈接。 在 GNOME 里面,當拖動文件時,同時按下 Ctrl+Shift 按鍵會創建一個鏈接,而不是 復制(或移動)文件。在 KDE 中,無論什么時候放下一個文件,會彈出一個小菜單, 這個菜單會提供復制,移動,或創建鏈接文件選項。
## 總結
在這一章中,我們已經研究了許多基礎知識。我們得花費一些時間來全面的理解。 反復練習 playground 例題,直到你覺得它有意義。能夠良好的理解基本文件操作 命令和通配符,非常重要。空閑時,通過添加文件和目錄來拓展 playground 練習, 使用通配符來為各種各樣的操作命令指定文件。關于鏈接的概念,在剛開始接觸 時會覺得有點迷惑,花些時間來學習它們是怎樣工作的。它們能成為真正的救星。
- 第一章:引言
- 第二章:什么是shell
- 第三章:文件系統中跳轉
- 第四章:研究操作系統
- 第五章:操作文件和目錄
- 第六章:使用命令
- 第七章:重定向
- 第八章:從shell眼中看世界
- 第九章:鍵盤高級操作技巧
- 第十章:權限
- 第十一章:進程
- 第十二章:shell環境
- 第十三章:VI簡介
- 第十四章:自定制shell提示符
- 第十五章:軟件包管理
- 第十六章:存儲媒介
- 第十七章:網絡系統
- 第十八章:查找文件
- 第十九章:歸檔和備份
- 第二十章:正則表達式
- 第二十一章:文本處理
- 第二十二章:格式化輸出
- 第二十三章:打印
- 第二十四章:編譯程序
- 第二十五章:編寫第一個shell腳本
- 第二十六章:啟動一個項目
- 第二十七章:自頂向下設計
- 第二十八章:流程控制 if分支結構
- 第二十九章:讀取鍵盤輸入
- 第三十章:流程控制 while/until 循環
- 第三十一章:疑難排解
- 第三十二章:流程控制 case分支
- 第三十三章:位置參數
- 第三十四章:流程控制 for循環
- 第三十五章:字符串和數字
- 第三十六章:數組
- 第三十七章:奇珍異寶