061 ln命令
命令说明
ln 用于创建链接:默认硬链接(同一 inode 的第二个名字),加 -s 创建符号链接(类似快捷方式,可跨文件系统、可链目录),是发布切换、目录迁移、兼容路径的核心手段。
语法
ln [选项]... 目标 链接名
常用参数
| 参数 | 说明 |
|---|---|
| -s | 创建符号链接(soft link),最常用 |
| -f | 链接名已存在时强制覆盖 |
| -b | 覆盖前备份已存在的目标 |
| -n | 把已存在的目录链接当普通文件处理(配合 -sf 改指向) |
| -v | 显示创建过程 |
| -r | 创建相对路径符号链接(ln -s 的相对化) |
| -t 目录 | 指定链接存放目录 |
| -h | 作用于符号链接本身(同 find -H 语义,多用于删除/替换场景) |
使用示例
$ ln -s /opt/app/v2.3 /opt/app/current
版本目录软链切换(发布系统标准玩法)
$ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
设置系统时区
$ ln -s /data/large-dir /home/user/data
把大目录“映射”回家目录
$ ln file.txt file_hard.txt
创建硬链接(同 inode,不能用于目录)
$ ln -sfn /opt/app/v2.4 /opt/app/current
更新已存在目录软链的指向(-n 防穿透)
$ ls -l current
查看软链指向:current -> /opt/app/v2.3
$ find / -lname "*app*" 2>/dev/null
按名字模式查找符号链接
$ rm current
删除软链本身(千万别 rm current/ 带斜杠,会删目标内容)
实用技巧
- 硬链接 vs 软链接:硬链接同 inode、不能跨文件系统、不能链目录、删原文件仍可读(链接数-1);软链接独立 inode 存路径、可跨盘可链目录、原文件删了变悬空链接(ls 红色闪烁)。
- ln -s 的相对路径以链接文件所在目录为基准解析,写错基准目录是软链失效的头号原因;不确定就用绝对路径或 ln -sr。
- 替换已有目录软链必须用 -n(-sfn),否则新链接会被创建到旧目标目录里面,产生 current/current/... 套娃。
- 删除软链用 rm 链接名 且不带末尾斜杠;带斜杠等于操作目标目录内部,误删即事故。
- inode 概念:ls -i 看 inode,stat file 看链接数;df -i 耗尽时即使磁盘有空间也无法建文件。