好的,阿杰 😄,下面给你整理一份 Linux ln 命令详解,从基础概念到高级用法,帮助你彻底理解符号链接和硬链接。


🐧 Linux ln 命令详解

一、ln 命令简介

  • 作用:创建文件或目录的 链接(Link)
  • 链接类型
    1. 硬链接(Hard Link)
    2. 符号链接(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 可以访问原目录
  • 删除原目录 → 链接失效

七、小技巧

  1. 查看符号链接指向
readlink file1_symlink.txt
  1. 递归复制链接
cp -rL dir_symlink/ target_dir/

-L 表示复制源文件,而不是符号链接本身

  1. 批量创建符号链接
for f in /source/*; do ln -s "$f" /dest/; done