1. 命令概述
- 命令名称:
ln (英文全拼:link)
- 核心功能:为文件创建链接,分为硬链接和符号链接(软链接)
- 主要用途:文件共享、节省存储空间、创建快捷方式、系统管理
2. 语法格式
# 创建硬链接(默认)
ln [选项] 源文件 目标文件
# 创建符号链接
ln -s [选项] 源文件 目标文件
3. 常用选项
| 选项 | 说明 |
|---|
-s | 创建符号链接(软链接) |
-f | 强制创建,覆盖已存在的目标文件 |
-i | 交互模式,覆盖前询问确认 |
-v | 显示详细操作信息 |
-b | 为已存在的目标文件创建备份 |
-d | 允许超级用户创建目录的硬链接 |
-n | 把符号链接视为一般文件 |
-t | 指定目标目录 |
-T | 将目标文件视为普通文件 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
4. 链接类型对比
| 特性 | 硬链接 | 符号链接(软链接) |
|---|
| 本质 | 指向同一 inode 的多个文件名 | 指向源文件路径的特殊文件 |
| inode 号 | 与源文件相同 | 与源文件不同 |
| 跨文件系统 | ❌ 不支持 | ✅ 支持 |
| 链接目录 | ❌ 不支持(需 root 权限) | ✅ 支持 |
| 源文件删除 | 链接仍然有效 | 链接失效(悬空链接) |
| 文件大小 | 与源文件相同 | 存储路径名的大小 |
| 创建命令 | ln 源文件 目标文件 | ln -s 源文件 目标文件 |
5. 常用实例详解
(1) 创建硬链接
# 为 file.txt 创建硬链接 link.txt
ln file.txt link.txt
# 创建硬链接到指定目录
ln file.txt /path/to/link.txt
# 强制创建,覆盖已存在的文件
ln -f file.txt link.txt
# 交互模式,覆盖前询问
ln -i file.txt link.txt
# 显示详细操作信息
ln -v file.txt link.txt
(2) 创建符号链接(软链接)
# 为 file.txt 创建符号链接
ln -s file.txt link.txt
# 创建符号链接到绝对路径
ln -s /path/to/file.txt link.txt
# 创建符号链接到目录
ln -s /path/to/dir/ link_dir
# 强制创建符号链接
ln -sf file.txt link.txt
# 为已存在的目标文件创建备份
ln -sb file.txt link.txt
(3) 批量创建链接
# 为多个文件创建硬链接到指定目录
ln file1.txt file2.txt /target/dir/
# 为多个文件创建符号链接到指定目录
ln -s file1.txt file2.txt /target/dir/
# 使用通配符创建链接
ln -s *.txt /target/dir/
6. 查看链接信息
(1) 查看文件类型
# 查看文件详细信息
ls -l link.txt
# 输出示例:lrwxrwxrwx 1 user user 8 Dec 18 10:00 link.txt -> file.txt
# 查看 inode 号
ls -i file.txt link.txt
# 输出示例:
# 123456 file.txt
# 123456 link.txt # 硬链接 inode 相同
# 654321 link.txt # 符号链接 inode 不同
(2) 查看链接指向
# 读取符号链接指向的目标
readlink link.txt
# 查看符号链接的详细信息
file link.txt
# 输出示例:link.txt: symbolic link to file.txt
7. 实际应用场景
场景一:共享配置文件
# 将配置文件链接到用户目录
ln -s /etc/nginx/nginx.conf ~/nginx.conf
# 共享脚本文件
ln -s /usr/local/bin/myscript /home/user/bin/myscript
场景二:版本管理
# 创建当前版本的软链接
ln -sf /opt/app/v2.0 /opt/app/current
# 切换版本时只需修改链接
ln -sf /opt/app/v2.1 /opt/app/current
场景三:系统管理
# 创建日志文件的软链接(便于查看)
ln -s /var/log/nginx/access.log /tmp/nginx_access.log
# 创建常用目录的快捷方式
ln -s /mnt/data/projects ~/projects
场景四:备份与恢复
# 使用硬链接创建快照备份(节省空间)
cp -al /source/dir/ /backup/dir/
# 其中 -l 选项使用硬链接而非复制文件内容
8. 删除链接
(1) 删除硬链接
# 删除硬链接(不影响源文件)
rm link.txt
# 删除所有硬链接后,文件内容才会被释放
rm file.txt
(2) 删除符号链接
# 删除符号链接(不影响源文件)
rm link.txt
# 删除指向目录的符号链接(注意不要加斜杠)
rm link_dir # 正确
rm link_dir/ # 错误,会删除目录内容
9. 注意事项
- 硬链接限制:
- 不能跨文件系统创建硬链接
- 不能为目录创建硬链接(除非 root 权限)
- 硬链接与源文件共享 inode,删除源文件不影响硬链接
- 符号链接注意事项:
- 符号链接可以跨文件系统
- 源文件删除后,符号链接会失效(悬空链接)
- 符号链接的大小是存储的路径名长度
- 路径问题:
- 创建符号链接时,建议使用绝对路径,避免相对路径导致的链接失效
- 移动源文件会导致相对路径的符号链接失效
- 权限问题:
- 符号链接的权限是
lrwxrwxrwx,实际权限由目标文件决定
- 硬链接的权限与源文件相同
- 系统目录:
- 不要随意修改系统目录中的链接文件,可能导致系统异常
核心要点总结:
- 硬链接:多个文件名指向同一 inode,节省空间,不能跨文件系统
- 符号链接:存储目标文件路径,可以跨文件系统,源文件删除后失效
- 创建命令:
ln(硬链接)、ln -s(符号链接)
- 常用选项:
-s(符号链接)、-f(强制)、-i(交互)、-v(详细)
- 实际应用:配置文件共享、版本管理、快捷方式、备份快照
- 删除注意:删除符号链接用
rm,删除硬链接不影响源文件
- 权限控制:符号链接权限固定为
lrwxrwxrwx,硬链接权限与源文件相同