86 lines
3.2 KiB
Markdown
86 lines
3.2 KiB
Markdown
# 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]] — 使用软链接路径的服务管理
|