# Symbolic Link(符号链接) > Unix/Linux/macOS 文件系统中的一种特殊文件类型,指向另一个文件或目录的路径别名。 ## Overview Symbolic Link(符号链接,简称 symlink)是文件系统中的一个特殊条目,它存储的是目标路径字符串,而非实际数据。访问符号链接时,操作系统自动将其解析为实际目标路径。符号链接可用于解决以下问题: - 将隐藏目录映射为可见路径(如 `~/.openclaw` → `~/openclaw`) - 为长路径或版本化目录创建稳定引用(如 `/opt/frp/current` → 版本目录) - 跨文件系统创建文件引用 ## Core Properties | 属性 | 说明 | |------|------| | 类型 | 特殊文件(ln -s 创建) | | 存储内容 | 目标路径字符串(文本) | | 跨文件系统 | ✅ 支持(记录路径,不记录 inode) | | 删除行为 | 删除链接本身,不影响目标 | | 相对路径 | 可使用(相对当前链接位置解析) | | 绝对路径 | 推荐使用(避免歧义) | ## Common Commands ```bash # 创建符号链接 ln -s /source/path /link/path # 相对路径源 ln -s /absolute/source /absolute/link # 绝对路径源 # 验证链接 ls -la ~ | grep linkname # 查看链接关系 readlink ~/linkname # 查看指向目标 # 删除符号链接(不会删除目标) rm ~/linkname # 替换已有链接(-n 处理链接本身是目录的情况) ln -sfn /new/target /link/path ``` ## Use Cases ### 1. 隐藏目录可见性映射 将 OpenClaw 的 `~/.openclaw` 隐藏目录映射为 `~/openclaw`,使 Obsidian 可直接作为 Vault 访问。 ``` ~/.openclaw → ~/openclaw (符号链接) ``` ### 2. 版本管理(软链接策略) 使用 `current` 符号链接指向当前激活的版本目录,简化启动命令并实现无缝升级/回滚。 ``` /opt/frp/ ├── frp_0.65.0_darwin_arm64/ ├── frp_0.66.0_darwin_arm64/ └── current → frp_0.66.0_darwin_arm64/ ``` ### 3. Git 友好目录结构 将实际数据目录放在 Git 可管理的位置,再创建指向它的符号链接。 ## Symbolic Link vs Hard Link | 对比 | Symbolic Link | Hard Link | |------|--------------|-----------| | 跨文件系统 | ✅ 支持 | ❌ 不支持 | | 指向目录 | ✅ 支持 | ❌ 不支持(Unix) | | 删除目标 | 链接失效 | 仍可访问(引用计数>1) | | 存储内容 | 路径字符串 | inode 引用 | | 适用场景 | 路径别名、跨分区 | 同分区文件别名 | ## Key Risks | 风险 | 说明 | 防范 | |------|------|------| | 目标不存在 | 链接成为悬空链接(dangling link) | 删除前确认无其他链接依赖 | | 误删 `rm -rf` | 当链接指向目录时,`rm` 链接本身是安全的 | 不要对目录链接使用 `-rf` | | 循环链接 | 链接指向自身或形成环 | 使用 `find -L` 或 `readlink -f` 展开 | ## Related - [[软链接策略]] — Symbolic Link 在软件版本管理中的应用 - [[Obsidian]] — Symbolic Link 的典型使用场景(Vault 映射) - [[OpenClaw]] — Symbolic Link 的操作对象(隐藏目录可见化) - [[frp]] — 软链接策略的典型应用 - [[launchd]] — 使用软链接路径的服务管理