硬鏈接
一般情況下,文件名和inode號碼是"一一對應"關系,每個inode號碼對應一個文件名。但是,Unix/Linux系統允許,多個文件名指向同一個inode號碼。 這意味著,可以用不同的文件名訪問同樣的內容;對文件內容進行修改,會影響到所有文件;但是,刪除一個文件名,不影響另一個文件名的訪問。這種情況就被稱為"硬鏈接"(hard link)。
echo 222 > /file2ll -i /file2 ? ? ? ? ? ? ? ? #-i:顯示inode編號
34045994 -rw-r--r-- 1 root root 4 Dec 29 20:52 file2
ln /file2 /file2-h1
ll -i /file2 /file2-h1 ? ? ? #查看inode號
34045994 -rw-r--r-- 2 root root 4 7月 ?30 22:25 /file2
34045994 -rw-r--r-- 2 root root 4 7月 ?30 22:25 /file2-h1
?rm -rf /file2 ? ? ? #刪除源文件
ll -i /file2-h1 ? ? #查看鏈接文件
34045994 -rw-r--r--. 3 root root 4 Nov ?9 15:01 /file2-h1
查看:cat /file2-h1
222
運行上面這條命令以后,源文件與目標文件的inode號碼相同,都指向同一個inode。inode信息中有一項叫做"鏈接數",記錄指向該inode的文件名總數,這時就會增加1。 ? 反過來,刪除一個文件名,就會使得inode節點中的"鏈接數"減1。當這個值減到0,表明沒有文件名指向這個inode,系統就會回收這個inode號碼,以及其所對應block區域。
軟連接
除了硬鏈接以外,還有一種特殊情況 ? 文件A和文件B的inode號碼雖然不一樣,但是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B。因此,無論打開哪一個文件,最終讀取的都是文件B。這時,文件A就稱為文件B的"軟鏈接"(soft link)或者"符號鏈接(symbolic link)。 ? 這意味著,文件A依賴于文件B而存在,如果刪除了文件B,打開文件A就會報錯:"No such file or directory"。這是軟鏈接與硬鏈接最大的不同:文件A指向文件B的文件名,而不是文件B的inode號碼,文件B的inode"鏈接數"不會因此發生變化。
ln -s 命令可以創建軟鏈接。
語法:ln -s 源文件 鏈接文件 ?
echo 111 > /file1
ll -i /file1
545310 -rw-r--r-- 1 root root 4 7月 ?30 22:06 /file1ln -s /file1 /file11 #將文件file1軟鏈接到file11ll /file11
lrwxrwxrwx 1 root root 6 Dec 20 17:58 /file11 -> /file1
?ll -i /file11 /file1 ? #查看inode號
545310 -rw-r--r-- 1 root root 4 7月 ?30 22:06 /file1
545343 lrwxrwxrwx 1 root root 6 7月 ?30 22:06 /file11 -> /file1
?
cat /file1
111cat /file11
111
?rm -rf /file11 #取消軟連接。
?ln -s /file1 /file11rm -rf /file1 #刪除源文件ll /file11
lrwxrwxrwx 1 root root 6 Dec 20 17:58 /file11 -> /file1 ? #已失效
?
#給目錄設置軟鏈接必須是絕對路徑
ln -s /root/aaa/ /usr/bbbll /usr/bbb
lrwxrwxrwx 1 root root 10 Dec 29 21:08 /usr/bbb -> /root/aaa/rm -rf /usr/bbb #取消鏈接,注意:刪除目錄鏈接時目錄后面加“/”是刪除目錄,不加是刪除鏈接
把一些重要文件做多個鏈接
注:硬鏈接 1. 不能跨文件系統 2. 不支持目錄做硬鏈接
ln /root/aaa/ /mnt/bbb ln: "/root/aaa/": 不允許將硬鏈接指向目錄
面試:軟鏈接和硬鏈接的區別:
- 軟鏈接可以跨文件系統,硬鏈接不可以; - 軟鏈接可以對目錄進行連接,硬鏈接不可以; - 刪除源文件之后,軟鏈接失效,硬鏈接無影響; - 兩種鏈接都可以通過命令 ln 來創建; - ln 默認創建的是硬鏈接; - 使用 -s 參數可以創建軟鏈接。