Hard Links:
不能跨 filesystem ,因爲不同的 filesystem 有不同的inode table 嘛!
不能 link 目錄!
Symbolic Links:
所以,看樣子,似乎 hard link 比較安全,因爲即使某一個inode 被殺掉了,只要有任何一個 inode 存在,那麼該檔案就不會不見!不過,不幸的是,由於Hard Link 的限制太多了,包括無法做『目錄』的 link ,所以在用途上面是比較受限的!反而是Symbolic Link 的使用方向較廣喔!好了,說的天花亂墜,看您也差不多快要昏倒了!沒關係,實作一下就知道怎麼回事了!
特別留意,底下的案例中,我們是將系統的設定文件copy 到 /root/test 底下進行測試用的,請不要在 /etc/ 底下做,未來我們的工作目錄都會在/root/test 底下進行,這有個好處,是可以讓您清楚的知道,這是用來 test 用的啦!
語法:[root @test/root ]# ln [-s] [來源檔] [目的檔]
參數說明:
-s :提供連結檔的連結!如果直接以 ln 不加任何參數的話,那麼就屬於 hard link囉!
範例:
[root @test/root]# mkdir test
[root @test/root]# cd test
[root @test/test]# cp /usr/bin/passwd .0. 原本的信息:
[root @test/test]# ll
-rw-r--r--1root root 13476 Jun 26 11:31 passwd
[root @test/test]# du -k<==查看該目錄下的佔用硬盤空間
201. Hard Link信息:
[root @test/test]# ln passwd passwd-hard
[root @test/test]# ll
total 32
-rw-r--r--2root root 13476 Jun 26 11:31 passwd
-rw-r--r--2root root 13476 Jun 26 11:31 passwd-hard
注意看,上面那個數字變成2 囉!這就是佔用掉 inodes 囉!
[root @test/test]# du -k
20 <==注意看,容量並沒有變大!因爲是link 檔案呀!2. SymbolicLink 信息:
[root @test/test]# ln -s passwd passwd-soft; ll
-rw-r--r-- 2 root root 13476 Jun 26 11:31 passwd
-rw-r--r-- 2 root root 13476 Jun 26 11:31 passwd-hard
lrwxrwxrwx 1 root root 6 Jun 26 11:37 passwd-sofe -> passwd
注意囉!該Symbolic Link 的檔案是有容量的呦!
注意囉, passwd-soft會指到另外一個檔案去,而且,最前面屬性顯示 l ,
此外,他是一個獨立的檔案!先殺掉passwd 後,我們分別 more 一下內容:3. 用 more 來試試看是怎樣?!
說明:
[root @testtest]# rm passwd
rm: removeregular file `passwd'? y
[root @testtest]# more passwd-hard
………(正常顯示)
[root @testtest]# more passwd-soft
passwd-soft:No such file or directory
要注意囉!如果不加任何參數的話,那麼就是 Hard Link 囉!如同上面的情況,增加了hard link 之後,可以發現 link 那一欄屬性增加了!而如果這個時候砍掉 passwd會發生什麼事情呢?呵呵! passwd-hard 的內容還是會跟原來 passwd 相同,但是passwd-soft 就會找不到該檔案啦!就是這樣!瞭解了嗎?!還有,跟 cp 也不一樣呦!因爲雖然Hard Link 的檔案看起來是有容量的,但是基本上還是指向原來的檔案,所以囉,整體容量是沒有增大的啦!
而如果使用 -s 的參數時,就做成差不多是 Windows 底下的『快捷方式』的意思(SymbolicLink,較常用!)不過,需要特別注意的是, Linux 的 link 與 Windows 的快捷方式是不一樣的東西!舉個例子說,當你在Windows 建立一個快捷方式時,你可以在這個快捷方式內修改任何數據,而你的原始數據並不會跟着變!不過,當你修改Linux 下的 link 檔案時,則更動的其實是『原始檔』,呵呵,所以不論你的這個原始檔被連結到哪裏去,只要你修改了連結檔,呵呵!原始檔就跟着變囉!以上面爲例,由於你使用-s 的參數建立一個名爲 passwd-soft 的檔案,則你修改 passwd-soft 時,其內容與passwd 完全相同,並且,當你按下儲存之後,被改變的將是 passwd 這個檔案!
此外,如果你做了底下這樣的連結:ln –s /bin /root/bin那麼如果你進入 /root/bin 這個目錄下,『請注意呦!該目錄其實是 /bin 這個目錄,因爲你做了連結檔了!』所以,如果你進入/root/bin 這個剛剛建立的連結目錄,並且將其中的數據殺掉時,嗯! /bin 裏面的數據就通通不見了!這點請千萬注意!並不是/root 底下的資料都是 root 的!還需要注意一下該屬性才行!
基本上, Symbolic link 的用途比較廣,所以您要特別留意 symbolic link的用法呢!未來一定還會常常用到的啦!
ln是linux中又一個非常重要命令,它的功能是爲某一個文件在另外一個位置建立一個同不的鏈接,這個命令最常用的參數是-s,具體用法是:ln –s 源文件 目標文件。
當我們需要在不同的目錄,用到相同的文件時,我們不需要在每一個需要的目錄下都放一個必須相同的文件,我們只要在某個固定的目錄,放上該文件,然後在其它的目錄下用ln命令鏈接(link)它就可以,不必重複的佔用磁盤空間。例如:ln –s /bin/less/usr/local/bin/less
-s 是代號(symbolic)的意思。
這裏有兩點要注意:第一,ln命令會保持每一處鏈接文件的同步性,也就是說,不論你改動了哪一處,其它的文件都會發生相同的變化;第二,ln的鏈接又軟鏈接和硬鏈接兩種,軟鏈接就是ln –s ** **,它只會在你選定的位置上生成一個文件的鏡像,不會佔用磁盤空間,硬鏈接ln ****,沒有參數-s, 它會在你選定的位置上生成一個和源文件大小相同的文件,無論是軟鏈接還是硬鏈接,文件都保持同步變化。
如果你用ls察看一個目錄時,發現有的文件後面有一個@的符號,那就是一個用ln命令生成的文件,用ls –l命令去察看,就可以看到顯示的link的路徑了。
指令詳細說明
指令名稱 : ln
使用權限 : 所有使用者
使用方式 : ln [options] source dist,其中 option 的格式爲 :
[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]
[--help] [--version] [--]
說明 : Linux/Unix 檔案系統中,有所謂的連結(link),我們可以將其視爲檔案的別名,而連結又可分爲兩種 : 硬連結(hardlink)與軟連結(symboliclink),硬連結的意思是一個檔案可以有多個名稱,而軟連結的方式則是產生一個特殊的檔案,該檔案的內容是指向另一個檔案的位置。硬連結是存在同一個檔案系統中,而軟連結卻可以跨越不同的檔案系統。
ln source dist 是產生一個連結(dist)到 source,至於使用硬連結或軟鏈結則由參數決定。
不論是硬連結或軟鏈結都不會將原本的檔案複製一份,只會佔用非常少量的磁碟空間。
-f : 鏈結時先將與 dist 同檔名的檔案刪除
-d : 允許系統管理者硬鏈結自己的目錄
-i : 在刪除與 dist 同檔名的檔案時先進行詢問
-n : 在進行軟連結時,將 dist 視爲一般的檔案
-s : 進行軟鏈結(symbolic link)
-v : 在連結之前顯示其檔名
-b : 將在鏈結時會被覆寫或刪除的檔案進行備份
-S SUFFIX : 將備份的檔案都加上 SUFFIX 的字尾
-V METHOD : 指定備份的方式
--help : 顯示輔助說明
--version : 顯示版本
範例 :
將檔案 yy 產生一個 symbolic link : zz
ln -s yy zz
將檔案 yy 產生一個 hard link : zz
ln yy xx