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'

 

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