linux 系統中的硬連結和軟連結
阿新 • • 發佈:2022-03-26
1、硬連結
在Linux中,每個檔案都有一個索引節點號(Inode index); 多個檔名指向同一索引節點是存在的。一般這種連線就是硬連線。
硬連線的作用是允許一個檔案擁有多個有效路徑名,這樣使用者就可以建立硬連線到重要檔案,以防止“誤刪”的功能。因為只刪除一個連線並不影響索引節點本身和其它的連線,只有當最後一個連線被刪除後,檔案的資料塊及目錄的連線才會被釋放。也就是說,檔案真正刪除的條件是與之相關的所有硬連線檔案均被刪除。
2、測試硬連結
(1)建立方式: ln file1 file2
root@ubuntu01:/home/test# seq 5 > a.txt root@ubuntu01:/home/test# ls a.txt root@ubuntu01:/home/test# cat a.txt 1 2 3 4 5 root@ubuntu01:/home/test# ln a.txt b.txt ## 建立a.txt的硬連結檔案b.txt root@ubuntu01:/home/test# ls a.txt b.txt root@ubuntu01:/home/test# cat b.txt 1 2 3 4 5 root@ubuntu01:/home/test# ll total 16 drwxr-xr-x 2 root root 4096 3月 26 11:31 ./ drwxr-xr-x 6 root root 40963月 26 11:19 ../ -rw-r--r-- 2 root root 10 3月 26 11:31 a.txt -rw-r--r-- 2 root root 10 3月 26 11:31 b.txt
(2)、硬連結和原始檔的索引節點號一致
root@ubuntu01:/home/test# seq 5 > a.txt root@ubuntu01:/home/test# ln a.txt b.txt ## 建立a.txt的硬連結檔案b.txt root@ubuntu01:/home/test# seq 5 > c.txt root@ubuntu01:/home/test# ls a.txt b.txt c.txt root@ubuntu01:/home/test# cat a.txt 1 2 3 4 5 root@ubuntu01:/home/test# cat b.txt 1 2 3 4 5 root@ubuntu01:/home/test# cat c.txt 1 2 3 4 5 root@ubuntu01:/home/test# ls -li ## 硬連結檔案的 檔案節點索引號一致 total 12 532490 -rw-r--r-- 2 root root 10 3月 26 11:33 a.txt 532490 -rw-r--r-- 2 root root 10 3月 26 11:33 b.txt 532494 -rw-r--r-- 1 root root 10 3月 26 11:33 c.txt
(3)、硬連結防止檔案誤刪,刪除原始檔或者連結檔案並不影響檔案內容
root@ubuntu01:/home/test# seq 5 > a.txt root@ubuntu01:/home/test# ln a.txt b.txt ## 建立硬連結 root@ubuntu01:/home/test# ls a.txt b.txt root@ubuntu01:/home/test# ls -li total 8 532490 -rw-r--r-- 2 root root 10 3月 26 11:36 a.txt 532490 -rw-r--r-- 2 root root 10 3月 26 11:36 b.txt root@ubuntu01:/home/test# cat a.txt 1 2 3 4 5 root@ubuntu01:/home/test# cat b.txt 1 2 3 4 5 root@ubuntu01:/home/test# rm a.txt ## 刪除原始檔,並不影響b.txt root@ubuntu01:/home/test# ls b.txt root@ubuntu01:/home/test# cat b.txt 1 2 3 4 5
(4)、硬連結與複製的區別; 硬連結指向同一個檔案; 複製是兩個單獨的檔案
root@ubuntu01:/home/test# seq 5 > a.txt root@ubuntu01:/home/test# ln a.txt b.txt ## 硬連結 root@ubuntu01:/home/test# ls a.txt b.txt root@ubuntu01:/home/test# ls -li total 8 532490 -rw-r--r-- 2 root root 10 3月 26 11:38 a.txt 532490 -rw-r--r-- 2 root root 10 3月 26 11:38 b.txt root@ubuntu01:/home/test# seq 5 > c.txt root@ubuntu01:/home/test# ls a.txt b.txt c.txt root@ubuntu01:/home/test# cp c.txt d.txt ## 複製 root@ubuntu01:/home/test# ls a.txt b.txt c.txt d.txt root@ubuntu01:/home/test# echo "xxxxxxx" >> a.txt ## 追加內容 root@ubuntu01:/home/test# echo "xxxxxxx" >> c.txt ## 追加內容 root@ubuntu01:/home/test# cat a.txt 1 2 3 4 5 xxxxxxx root@ubuntu01:/home/test# cat b.txt ##對a.txt的修改直接影響b.txt; 說明兩者指向同一個檔案 1 2 3 4 5 xxxxxxx root@ubuntu01:/home/test# cat c.txt 1 2 3 4 5 xxxxxxx root@ubuntu01:/home/test# cat d.txt ## 對c.txt的修改並不影響d.txt; 說明兩者是單獨的檔案 1 2 3 4 5
3、軟連結
也叫符號連線, 類似於Windows的快捷方式, 是一個特殊的檔案, 包含的有另一檔案的位置資訊。
4、建立軟連線方式
ln -s file1 file2
5、測試軟連結
(1)、
root@ubuntu01:/home/test# seq 5 > a.txt root@ubuntu01:/home/test# ls a.txt root@ubuntu01:/home/test# ln -s a.txt b.txt ## 建立a.txt檔案的軟連結檔案b.txt root@ubuntu01:/home/test# ls a.txt b.txt root@ubuntu01:/home/test# cat a.txt 1 2 3 4 5 root@ubuntu01:/home/test# cat b.txt 1 2 3 4 5 root@ubuntu01:/home/test# ls -li ## 檢視節點、檔案型別 total 4 532490 -rw-r--r-- 1 root root 10 3月 26 11:50 a.txt ## 普通文字檔案 532494 lrwxrwxrwx 1 root root 5 3月 26 11:50 b.txt -> a.txt ## 檔案型別為l,表示為link檔案
(2)、對原始檔的刪除,直接影響連結檔案的使用
root@ubuntu01:/home/test# seq 5 > a.txt root@ubuntu01:/home/test# ls a.txt root@ubuntu01:/home/test# ln -s a.txt b.txt ## 建立軟連結檔案 root@ubuntu01:/home/test# ls a.txt b.txt root@ubuntu01:/home/test# cat a.txt 1 2 3 4 5 root@ubuntu01:/home/test# cat b.txt 1 2 3 4 5 root@ubuntu01:/home/test# rm a.txt ## 刪除原始檔 root@ubuntu01:/home/test# ls b.txt root@ubuntu01:/home/test# cat b.txt ## 刪除原始檔後, 連結檔案不可用 cat: b.txt: No such file or directory