在 Linux 下,ln -s 用来创建软链接(也叫符号链接),作用类似 Windows 里的快捷方式:它指向真实的源文件或源目录,访问链接就等于访问源。本文整理了软链接的常见用法、容易踩的坑,以及它与硬链接的区别。
基本用法
创建软链接的命令格式是 ln -s 源文件 软链接文件:
ln -s 源文件 软链接文件
软链接既可以指向文件,也可以指向目录,这是它比硬链接灵活的地方之一。
一个常见的误区
软链接既然是”链接”,就意味着软链接文件在创建之前不可以已经存在。如果目标位置已经有一个同名文件,ln -s 会在该文件内部再建立链接(或直接报错,视选项而定),结果往往出乎意料。所以创建前要确认目标路径是空的,必要时先删除或改名。
软链接的删除与失效
- 删除:用
rm直接删除软链接即可,源文件不受任何影响。 - 失效:当源文件被删除、或者路径发生改变时,软链接就失效了。此时用
ls -l查看,会看到链接指向的源文件名显示为红色背景并不断闪烁,这是 shell 提示”链接已断”的典型标志。
软链接与硬链接的区别
| 对比项 | 软链接(ln -s) |
硬链接(ln) |
|---|---|---|
| inode | 有自己独立的 inode | 与源文件共用同一个 inode |
| 指向目录 | 可以指向目录 | 不可以指向目录 |
| 跨文件系统 | 可以 | 不可以 |
| 源文件删除后 | 链接失效 | 只要还有一个硬链接,数据仍可访问 |
理解关键在于 inode:软链接是一个独立文件,内容里存的是源文件的路径;硬链接则只是同一个 inode 的另一个名字,两者地位完全平等。
一个有趣的玩法
硬链接虽然不能指向目录,但可以”曲线救国”:先为目录创建软链接,再为这个软链接创建硬链接。
示例:/home/oldboy 是一个目录:
ln -s /home/oldboy /tmp/oldmy # 创建指向目录的软链接,隐藏源文件的真实路径和名称
ln /tmp/oldmy /oldyou # 用硬链接创建这个软链接的副本
这种用法常见的应用场景是隐藏源文件的真实路径和名称,或者在软件升级时通过切换软链接指向新版本目录,而不必改动其他配置。
ln 常用选项
| 选项 | 含义 |
|---|---|
-b |
删除、覆盖以前建立的链接 |
-d |
允许超级用户制作目录的硬链接 |
-f |
强制执行 |
-i |
交互模式,文件存在则提示用户是否覆盖 |
-n |
把符号链接视为一般目录 |
-s |
软链接(符号链接) |
-v |
显示详细的处理过程 |