好的,阿杰 😄,下面给你整理一份 Linux ln
命令详解,从基础概念到高级用法,帮助你彻底理解符号链接和硬链接。
🐧 Linux ln
命令详解
一、ln
命令简介
- 作用:创建文件或目录的 链接(Link)
- 链接类型:
- 硬链接(Hard Link)
- 符号链接(Soft Link / Symlink)
二、硬链接(Hard Link)
1. 特点
- 与原文件 共享 inode,指向相同数据块
- 删除原文件,硬链接仍然有效
- 不支持跨文件系统
- 不可对目录创建硬链接(普通用户受限)
2. 创建硬链接
ln 源文件 硬链接文件名
示例
echo "Hello Linux" > file1.txt
ln file1.txt file1_hard.txt
# 查看 inode
ls -i file1.txt file1_hard.txt
输出:
123456 file1.txt
123456 file1_hard.txt
inode 相同 → 硬链接成功
3. 特点演示
echo "New Content" > file1_hard.txt
cat file1.txt
输出:
New Content
修改任意一个文件,另一个同步修改(共享数据块)
三、符号链接(Soft Link / Symlink)
1. 特点
- 类似 快捷方式,指向原文件路径
- 可以跨文件系统
- 可以对目录创建
- 删除原文件,符号链接失效(成为“悬空链接”)
2. 创建符号链接
ln -s 源文件 符号链接文件名
示例
ln -s file1.txt file1_symlink.txt
ls -l
输出:
lrwxrwxrwx 1 user group 9 Aug 20 12:00 file1_symlink.txt -> file1.txt
l
表示符号链接,指向 file1.txt
3. 特点演示
cat file1_symlink.txt
输出:
New Content
- 删除原文件:
rm file1.txt
cat file1_symlink.txt
输出:
cat: file1_symlink.txt: No such file or directory
链接失效
四、常用参数
参数 | 功能 |
---|---|
-s | 创建符号链接 |
-f | 强制覆盖已存在的链接 |
-v | 显示详细信息 |
-n | 对符号链接目标不递归操作(配合 -f ) |
-i | 提示确认覆盖已存在的文件 |
示例
ln -sv file1.txt file1_symlink.txt
输出:
‘file1_symlink.txt’ -> ‘file1.txt’
五、硬链接 vs 符号链接
特性 | 硬链接 (Hard Link) | 符号链接 (Soft Link / Symlink) |
---|---|---|
inode | 相同 | 不同,独立 inode |
修改文件 | 共享数据块 | 修改源文件影响,修改链接无效 |
删除源文件 | 链接仍有效 | 链接失效 |
支持目录 | 否 | 是 |
跨文件系统 | 否 | 是 |
六、目录链接示例
mkdir dir1
ln -s dir1 dir_symlink
ls -l
输出:
lrwxrwxrwx 1 user group 4 Aug 20 12:10 dir_symlink -> dir1
cd dir_symlink
可以访问原目录- 删除原目录 → 链接失效
七、小技巧
- 查看符号链接指向
readlink file1_symlink.txt
- 递归复制链接
cp -rL dir_symlink/ target_dir/
-L
表示复制源文件,而不是符号链接本身
- 批量创建符号链接
for f in /source/*; do ln -s "$f" /dest/; done
发表回复