1. 程式人生 > 其它 >linux 系統中的硬連結和軟連結

linux 系統中的硬連結和軟連結

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 4096
3月 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