软链接是路径指针,用ln -s <目标路径> <链接名>创建,可跨卷、链目录,删源文件后失效;硬链接是同一文件的另一名字,用ln <源文件> <链接名>创建,仅限同卷普通文件,共享inode,删源文件不影响访问。
在 macos 上,符号链接(即软链接)和硬链接是两种完全不同的文件引用机制,它们的创建方式、行为表现和适用场景都有本质区别。核心在于:软链接是“路径指针”,硬链接是“同一文件的另一个名字”。
怎么创建软链接(符号链接)
使用 ln -s 命令,格式为:ln -s <目标路径> <链接名称>
- 目标可以是文件或目录,路径支持相对或绝对写法
- 链接文件本身是一个独立的小文件,内容就是你写的那个路径字符串
- 例如:
ln -s ~/Projects/config.json ~/.config/myapp/config.json - 删除原文件后,软链接会失效(访问时报 “No such file or directory”)
怎么创建硬链接
使用 ln 命令(不带 -s),格式为:ln <源文件> <硬链接名>
- 只能用于普通文件,不能用于目录(系统禁止,防止循环)
- 必须在同一个文件系统(如同一个 APFS 卷)内操作
- 例如:
ln ~/Documents/report.txt ~/Desktop/report-backup - 删除原文件不影响硬链接——只要还有一个硬链接存在,文件数据就还在
软链接和硬链接的关键区别
区别不在“能不能用”,而在“怎么存、怎么管、怎么丢”:
- 指向方式不同:软链接保存的是路径文本;硬链接直接指向 inode(文件的数据和元信息所在位置)
- 是否跨卷:软链接可以跨磁盘、跨文件系统(比如从 APFS 链接到外接的 exFAT 硬盘);硬链接只能在同一卷内
- 能否链接目录:软链接可以链接目录,常用作快速入口;硬链接不能链接目录
- 删除原文件后的表现:软链接立即失效;硬链接照常工作,文件内容不受影响
- 占用空间与 inode:软链接是独立文件,有自己 inode,大小≈路径长度;硬链接不占额外数据块,共享源文件的 inode 和所有属性
什么时候该选哪一种
按需求选,不是按习惯:
- 想给一个长路径目录起个短名字、切换不同版本配置、链接外置硬盘里的资源 → 用 软链接
- 想备份关键小文件又不想多占空间、确保即使误删原文件也不丢数据 → 用 硬链接(注意:仅限同卷文件)
- 开发中管理工具链(如让
python指向 Homebrew 安装的 Python)→ 必须用 软链接(还要放在/usr/local/bin等 SIP 允许路径)


















