命令
- 參數
-s
表示軟鏈接,沒有則是硬鏈接ln [-s] <原文件名> <鏈接名>
軟鏈接
-
先創建一個文件test.txt
$ touch test.txt $ ls -lti total 0 272851 -rw-rw-r-- 1 deploy deploy 0 Jul 9 10:54 test.txt
$ vi test.txt hello world! test1 test2 ~ ~ ~ :wq
-
爲這個文件創建兩個軟鏈接
$ ln -s ./test.txt soft-test1.txt $ ln -s ./test.txt soft-test2.txt $ ls -lti total 0 272853 lrwxrwxrwx 1 deploy deploy 10 Jul 9 10:59 soft-test2.txt -> ./test.txt 272852 lrwxrwxrwx 1 deploy deploy 10 Jul 9 10:57 soft-test1.txt -> ./test.txt 272851 -rw-rw-r-- 1 deploy deploy 0 Jul 9 10:54 test.txt
可以發現這兩個軟鏈接的Inode值(第一列)不一樣,分別爲:272852和272853,
如果編輯這兩個軟鏈接文件,原文件test.txt也會變化,相當於直接編輯test.txt,
如果刪除或者重命名原文件,則軟鏈接也無效了,軟鏈接相當於Windows的快捷方式,原文件刪除了或路徑變了,快捷方式也就無效了,
但是刪除軟鏈接,不會影響原文件,只是刪除快捷方式而已。
硬鏈接
-
創建兩個硬鏈接
$ ln ./test.txt hard-test1.txt $ ln ./test.txt hard-test2.txt
-
查看文件列表:
ll -i
- 發現兩個硬鏈接的Inode的值與原文件相同,都是272851,
- 但是後面的
鏈接數
由1變爲3了,那是因爲創建硬鏈接時不會生成新的Inode,但是Inode對應的鏈接數
會累加 - 與軟鏈接一樣,修改硬鏈接時,原文件也會發生變化,因爲它們對應同一個文件
-
刪除硬鏈接或原文件
rm test.txt
ll -i
rm hard-test1.txt
ll -i
刪除硬鏈接或者原文件後,只是
鏈接數
減1了,文件還存在,可以用剩下的硬鏈接繼續編輯文件
當然如果把原文件和其所有的硬鏈接刪除,文件肯定是被刪除了的$ vi hard-test2.txt $ vi hard-test2.txt hello world! test1 test2 ~ ~ ~
總結
-
Linux系統的每一個文件都有一個Inode,Inode是Linux文件的唯一標識,而Windows系統文件的唯一標識是文件名(包含路徑),因此Linux文件在使用時(運行/編輯/讀取等)可以進行重命名,而Windows則不行(因爲文件名是唯一標識,文件是根據文件名打開的,重命名之後文件的標識就改變了)。
-
硬鏈接不創建新的文件,只是將原文件Inode的
鏈接數
加1 ,刪除硬鏈接或原文件時鏈接數
減1 ,硬鏈接和原文件的Inode映射到同一個數據塊,性質是一樣的。 -
軟鏈接會創建一個新的文件(文件系統生成一個新的Inode),這個文件的內容是存儲 “指向的原文件路徑” 。
-
目錄不能創建硬鏈接,只有文件能創建硬鏈接,目錄和文件都可以創建軟鏈接
$ mkdir dirtest $ ln ./dirtest hard-dirtest ln: ‘./dirtest’: hard link not allowed for directory