Files
nexus/wiki/concepts/symbolic-link.md

86 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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]] — 使用软链接路径的服务管理