Linux 详谈软硬链接
目录
1. 硬链接
2. 软链接
3. 软硬连接对⽐
4. 软硬连接的⽤途
1. 硬链接
我们看到,真正找到磁盘上⽂件的并不是⽂件名,⽽是inode。其实在linux中可以让多个⽂件名对应于同⼀个inode。
[root@localhost linux]# touch abc
[root@localhost linux]# ln abc def
[root@localhost linux]# ls -li abc def
263466 abc
263466 def
abc和def的链接状态完全相同,他们被称为指向⽂件的硬链接。内核记录了这个连接数,inode263466 的硬连接数为2。
我们在删除⽂件时⼲了两件事情:1.在⽬录中将对应的记录删除,2.将硬连接数-1,如果为0,则将对应的磁盘释放。
2. 软链接
硬链接是通过inode引⽤另外⼀个⽂件,软链接是通过名字引⽤另外⼀个⽂件,但实际上,新的⽂件和被引⽤的⽂件的inode不同,应⽤常⻅上可以想象成⼀个快捷⽅式。在shell中的做法
[root@localhost linux]# ln -s abc.s abc
[root@localhost linux]# ls -li
263563 -rw-r--r--. 2 root root 0 9⽉ 15 17:45 abc
261678 lrwxrwxrwx. 1 root root 3 9⽉ 15 17:53 abc.s -> abc
263563 -rw-r--r--. 2 root root 0 9⽉ 15 17:45 def
acm
下⾯解释⼀下⽂件的三个时间:
Access 最后访问时间
Modify ⽂件内容最后修改时间
Change 属性最后修改时间
3. 软硬连接对比
软连接(符号链接):
- 是一个独立的文件类型
- 拥有自己的inode编号
- 存储的是目标文件的路径信息
- 删除原文件后,软连接会失效(称为"悬空链接")
- 示例:ln -s source.txt softlink.txt
硬链接:
- 只是文件名和目标文件inode的映射关系
- 与原文件共享相同的inode编号
- 本质上与原文件是同一个文件的多个名称
- 删除原文件后,只要还有硬链接存在,文件内容就不会被删除
- 示例:ln source.txt hardlink.txt
4. 软硬连接的用途
硬链接的典型应用场景:
-
目录中的特殊链接
- "." 表示当前目录的硬链接
- ".." 表示父目录的硬链接
-
文件备份
- 创建硬链接可以实现低成本的文件备份
- 多个硬链接指向同一文件时,修改任意一个都会影响其他链接
- 只有当所有硬链接都被删除,文件才会真正被删除
-
系统优化
- 某些系统文件会使用硬链接来节省存储空间
- 如Linux系统中/bin和/usr/bin目录下的相同命令文件
软连接的典型应用场景:
-
类似Windows快捷方式
- 可以跨文件系统创建
- 可以链接到目录
- 示例:ln -s /mnt/network_share/ ~/desktop/share
-
版本管理
- 创建软链接指向不同版本的软件
- 示例:ln -s python3.9 python
-
路径简化
- 为长路径创建简短的软链接
- 示例:ln -s /var/www/html/project/current ~/www
-
系统维护
- 临时重定向文件或目录
- 在不移动实际文件的情况下改变访问路径