相信你在看到这样的内容时也会产生疑问:
/sbin/init -> /lib/systemd/systemd
这是不是就相当于 Windows 的快捷方式?
答案是:
可以这样理解,但它比 Windows 的快捷方式更强大,也更底层。
今天我们就来聊聊 Linux 的软链接(Symbolic Link)和 Windows 快捷方式(Shortcut)有什么区别。
一、什么是 Windows 快捷方式?
Windows 中,我们经常会在桌面看到这样的图标:
双击快捷方式,实际上打开的是:
快捷方式本身并不是程序,它只是保存了目标程序的位置。
如果把真正的 QQ 删除了,再双击快捷方式,就会提示找不到目标。
因此很多人第一次看到 Linux 的软链接时,会觉得这不就是快捷方式吗?
但只有一半是对的。
二、什么是 Linux 软链接?
Linux 中可以创建软链接:
此时目录中会出现:
这里的 -> 表示:b.txt 指向 a.txt。
读取:
实际上读取的是:
执行:
实际上执行的是:
从使用体验来看,确实和 Windows 的快捷方式非常相似。
三、最大的区别:一个是文件系统功能,一个只是普通文件
这也是两者最本质的区别。
Windows 快捷方式
Windows 的快捷方式就是一个 .lnk 文件。
例如:
对于 Windows 来说,它只是一个特殊格式的普通文件。
资源管理器认识它,所以双击可以打开目标程序。
但是很多命令行程序并不会自动解析 .lnk 文件。
例如:
很多情况下处理的是快捷方式文件本身。
Linux 软链接
Linux 的软链接则完全不同。
它不是普通文件,它属于文件系统支持的一种特殊文件类型。
当任何程序打开一个软链接时:
Linux 内核会自动找到真正的目标。
程序甚至不知道自己打开的是一个软链接。
例如:
cat 并不知道中间经过了一个软链接。
它看到的就是:
这一切都是内核自动完成的。
四、删除目标后的表现
假设:
删除:
目录中仍然存在:
但是:
会提示:
No such file or directory
因为软链接只是保存了目标路径。
目标不存在了,它就成了一个悬空(损坏)软链接(Broken Symlink)。
Windows 的快捷方式也是类似的。
如果目标程序删除了,快捷方式仍然存在,只是打不开。
五、为什么 Linux 到处都是软链接?
很多人第一次查看 Linux 系统目录时,会发现大量软链接,例如:
/bin -> /usr/bin/lib -> /usr/lib/sbin -> /usr/sbin
还有:
/sbin/init ↓/lib/systemd/systemd
为什么不直接复制一份文件?
原因是:兼容。
早期的软件一直使用:
后来真正的程序变成了:
为了不修改所有旧程序,只需要建立一个软链接即可。
所有老程序仍然能够正常运行。
六、为什么 Linux 不用快捷方式?
因为 Linux 的软链接已经足够强大。
它直接由文件系统和内核支持。
任何程序:
都能够自动识别软链接。
开发者不需要专门去处理。
而 Windows 的快捷方式更多是一种面向用户的功能,主要服务于桌面和资源管理器。
七、一张图理解二者的区别
WindowsQQ.exe.lnk │ ▼资源管理器解析 │ ▼QQ.exe
Linuxsoft-link │ ▼Linux 内核自动解析 │ ▼真实文件
最大的区别就在于:
Windows 是应用程序(资源管理器)认识快捷方式;Linux 是操作系统内核认识软链接。