操作 | 硬链接命令 | 软链接命令 |
---|---|---|
创建链接 | ln 源文件 链接名 |
ln -s 源文件 链接名 |
查看链接 | ls -li |
ls -l (显示为l类型) |
特性 | 硬链接 | 软链接 |
---|---|---|
inode | 与源文件相同 | 分配新的inode |
跨文件系统 | 不支持 | 支持 |
链接目录 | 通常不允许(超级用户可能可以) | 允许 |
原始文件删除后 | 仍可访问 | 链接失效 |
文件大小 | 与源文件相同 | 等于链接指向的路径名的字节长度 |
文件类型 | 与源文件相同 | 始终显示为链接(l) |
相对/绝对路径 | 不适用 | 支持 |
链接循环检测 | 不可能 | 可能(需避免) |
权限 | 与源文件同步 | 有自己的权限(通常777) |
更新影响 | 所有链接同步更新 | 仅影响链接本身 |
# 查看文件的链接计数(硬链接数)
ls -l # 第二列数字表示硬链接数
# 查找所有指向同一inode的硬链接
find / -samefile 文件名 -ls
# 查看软链接指向的实际路径
readlink 链接名
# 找出所有悬空的软链接
find / -type l -xtype l
Q: 如何判断一个文件是硬链接还是软链接?
A: 使用ls -l
命令,软链接会显示为l
类型并在文件名后显示->
指向的目标路径。硬链接看起来像普通文件,但可以通过ls -i
查看inode号是否相同来确认。
Q: 为什么不能普通用户不能创建目录的硬链接?
A: 这是为了防止文件系统出现目录循环,导致工具如find
和tar
等陷入无限循环。超级用户(root)有时可以创建目录硬链接,但不推荐这样做。
Q: 删除软链接和硬链接的正确方式是什么?
A: 对于软链接和硬链接,都可以直接使用rm 链接名
。区别在于删除硬链接会减少inode的链接计数,而删除软链接只删除链接文件本身。