软链接 与 硬链接

速览
硬链接会创建对inode的引用,inode的链接计数会+1
软链接是一个新文件,只是指向目标inode

  • 本质:硬链接是对同一个 inode 的多个引用,所有硬链接共享相同的 inode 号。
  • 链接计数:创建硬链接后,原文件的 inode 计数(link count)会加 1。
  • 特点
    • 删除任意一个硬链接,文件本身不会被删除,只有 inode 计数归零后,文件才会真正删除。
    • 只能在同一个文件系统(同一个分区)内创建硬链接,不能跨文件系统。
    • 不能对目录创建硬链接(ln 命令默认禁止)。
    • 所有硬链接与原文件完全等价,没有主次之分。

示例:

$ echo "hello" > file1
$ ln file1 file2  # 创建 file1 的硬链接 file2
$ ls -li
1234567 -rw-r--r-- 2 user user 6 Jan 30 12:00 file1
1234567 -rw-r--r-- 2 user user 6 Jan 30 12:00 file2

这里 file1file2 共享 inode 1234567,并且 link count2

  • 本质:软链接是一个独立的文件,它存储了目标文件的路径,而不是直接指向 inode
  • 链接计数:创建软链接不会影响原文件的 inode 计数。
  • 特点
    • 可以跨文件系统、跨分区使用。
    • 可以对目录创建软链接。
    • 软链接只是一个指向路径的文件,如果目标文件被删除,软链接会变成“悬挂的(dangling)”无效链接。

示例:

$ ln -s file1 symlink
$ ls -li
1234567 -rw-r--r-- 1 user user 6 Jan 30 12:00 file1
7654321 lrwxrwxrwx 1 user user  5 Jan 30 12:01 symlink -> file1

这里 symlink 是一个新文件,inode 号 7654321,内容指向 file1 的路径,而不是 file1inode

总结

类型 是否共享 inode 影响 inode 计数 是否可跨文件系统 对目标文件的影响
硬链接 是(+1) 目标文件删除后,其他硬链接仍可访问
软链接 目标文件删除后,软链接变为无效

如果你需要保证文件的可用性且不占额外空间,可以用硬链接;如果你要跨文件系统或者指向目录,可以用软链接。

posted @   hk416hasu  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示