Linux的軟鏈接與硬鏈接

Linux鏈接分爲兩種,一種是軟鏈接,或者說是符號鏈接(Symbolic Link),一種是硬鏈接(Hard Link)。

1.什麼是軟鏈接

軟鏈接文件有些類似於我們熟知的Windows快捷方式。它實際上是一個特殊的文件。對軟鏈接而言,文件實際上是一個文本文件,其中包含有另一個文件的存儲位置信息。

[zhangtong@rack5-8 test]$ touch 2tong.vcf
[zhangtong@rack5-8 test]$ ll -lh
total 0
-rw-r--r-- 1 zhangtong ldapusers 0 Oct 17 15:21 2tong.vcf
[zhangtong@rack5-8 test]$ ln -s 2tong.vcf soft_2tong.vcf
[zhangtong@rack5-8 test]$ ll -lh
total 0
-rw-r--r-- 1 zhangtong ldapusers 0 Oct 17 15:21 2tong.vcf
lrwxrwxrwx 1 zhangtong ldapusers 9 Oct 17 15:21 soft_2tong.vcf -> 2tong.vcf
[zhangtong@rack5-8 test]$ ll -li
total 0
144116078023369132 -rw-r--r-- 1 zhangtong ldapusers 0 Oct 17 15:21 2tong.vcf
144116078023369135 lrwxrwxrwx 1 zhangtong ldapusers 9 Oct 17 15:21 soft_2tong.vcf -> 2tong.vcf

可以發現,設置了軟鏈接ln -s 後,soft_2tong.vcf指向了2tong.vcf這個文件,是相對獨立的,二者的inodes不同,一個是 144116078023369132,一個是144116078023369135。

Tips:Linux的文件系統,會爲保存在磁盤分區中的文件分配一個編號,不論這個文件是什麼類型的,稱爲索引節點號(Inode Index)。

嘗試刪除2tong.vcf?

[zhangtong@rack5-8 test]$ rm 2tong.vcf
[zhangtong@rack5-8 test]$ ll -lh
total 0
lrwxrwxrwx 1 zhangtong ldapusers 9 Oct 17 15:21 soft_2tong.vcf -> 2tong.vcf
[zhangtong@rack5-8 test]$ more soft_2tong.vcf
soft_2tong.vcf: No such file or directory

可以看到,刪除軟鏈接文件所指向的文件後,軟鏈接文件也會提示no such file or directory

2.什麼是硬鏈接

硬鏈接通過inodes來進行鏈接(Linux允許多個文件名指向同一個inodes)。一般而言,這樣的鏈接就是硬鏈接。硬鏈接的作用便是允許一個文件擁有多個有效路徑名,用戶因而可以建立硬鏈接到重要文件,來儘可能降低“誤刪”的風險。

只有當最後一個連接被刪除後,文件的數據塊及目錄的連接纔會被釋放。就是說,文件真正刪除的條件是與之相關的所有硬鏈接文件均被刪除。

[zhangtong@rack5-8 test]$ touch 2tong.vcf
[zhangtong@rack5-8 test]$ ln 2tong.vcf hard_2tong.vcf
[zhangtong@rack5-8 test]$ ll -li
total 0
144116078023369153 -rw-r--r-- 2 zhangtong ldapusers 0 Oct 17 15:31 2tong.vcf
144116078023369153 -rw-r--r-- 2 zhangtong ldapusers 0 Oct 17 15:31 hard_2tong.vcf
144116078023369135 lrwxrwxrwx 1 zhangtong ldapusers 9 Oct 17 15:21 soft_2tong.vcf -> 2tong.vcf

 可以發現,設置了硬鏈接後,hard_2tong.vcf和2tong.vcf文件的inodes是相同的。

嘗試刪除2tong,vcf文件?

[zhangtong@rack5-8 test]$ touch 2tong.vcf
[zhangtong@rack5-8 test]$ ln 2tong.vcf hard_2tong.vcf
[zhangtong@rack5-8 test]$ ll -li
total 0
144116078023369153 -rw-r--r-- 2 zhangtong ldapusers 0 Oct 17 15:31 2tong.vcf
144116078023369153 -rw-r--r-- 2 zhangtong ldapusers 0 Oct 17 15:31 hard_2tong.vcf
144116078023369135 lrwxrwxrwx 1 zhangtong ldapusers 9 Oct 17 15:21 soft_2tong.vcf -> 2tong.vcf
[zhangtong@rack5-8 test]$ rm 2tong.vcf
[zhangtong@rack5-8 test]$ ll -lh
total 0
-rw-r--r-- 1 zhangtong ldapusers 0 Oct 17 15:31 hard_2tong.vcf
lrwxrwxrwx 1 zhangtong ldapusers 9 Oct 17 15:21 soft_2tong.vcf -> 2tong.vcf
[zhangtong@rack5-8 test]$ rm soft_2tong.vcf
[zhangtong@rack5-8 test]$

可以發現,刪除其中一個硬鏈接文件後。軟鏈接不會報錯,因爲還有另外一個文件也在。

3.獲取軟連接文件路徑

[zhangtong@rack5-8 test]$ python
Python 2.7.5 (default, Jun 20 2019, 20:27:34)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.path.realpath("soft_2tong.vcf")
'/data/share/home/zhangtong/test/2tong.vcf'
>>> os.path.abspath("soft_2tong.vcf")
'/data/share/home/zhangtong/test/soft_2tong.vcf'

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章