首页/系统/Linux 运维命令速查/readlink 查看符号链接指向
文件与目录76 条

readlink 查看符号链接指向

读取符号链接指向的目标;-f 递归解析到最终真实路径,排查版本切换软链(current)时的常用工具。

Linux 运维命令速查系统更新于 2026-10-13

readlink 是什么

readlink 打印符号链接指向的目标路径;加 -f 时会沿着各级链接递归解析,给出最终的真实路径。这个能力在两类场景里最有用:确认版本切换软链(例如 current)当前指向哪个版本,以及确认某个命令或服务实际加载的是哪个文件的真实路径。realpath 是能力更完整的相关命令,能处理不存在或部分缺失的路径。

基本信息

用途查看与解析符号链接的目标路径
语法readlink [选项] 链接;readlink -f 需要路径存在;-m 允许中间路径不存在
相关命令realpath 同样做路径规范化,还提供相对路径计算等选项
所属GNU coreutils

典型使用场景

  • 发布核对:切链后确认 current 指向的版本目录是否正确
  • 依赖定位:确认 python3、java 这类命令最终指向哪个真实可执行文件
  • 进程溯源:查看 /proc 下可执行文件链接,确认进程实际运行的是哪个二进制
  • 路径规范化:脚本里把相对路径或带链接的路径转成真实路径
  • 断链排查:确认链接目标是否存在,区分「链接指向错」与「目标被删」

常用示例

常用示例
ls -l /opt/app/current
readlink /opt/app/current               # 只打印直接目标,可能是相对路径
readlink -f /opt/app/current            # 递归解析到最终真实路径
readlink -f /usr/bin/python3            # 看这条命令最终指向哪个文件
readlink -f /proc/$(pgrep -f app.jar | head -1)/exe   # 进程实际运行的二进制
readlink -m /opt/app/next/conf/app.yml  # 目标尚不存在时也能规范化
realpath --relative-to=/opt/app /opt/app/v2/conf        # 求相对路径

脚本里的用法

脚本里的用法
target=$(readlink -f /opt/app/current)
case "$target" in
  /opt/app/v2026*) echo "release ok: $target" ;;
  *) echo "unexpected target: $target"; exit 1 ;;
esac
[ -e "$(readlink -f /opt/app/current)" ] || echo 'broken symlink'

命令对照

命令典型用途注意
readlink 链接只打印链接的直接目标结果可能是相对路径
readlink -f 路径递归解析为绝对真实路径要求路径存在且各级可解析
readlink -m 路径允许路径不存在适合在创建前预演目标路径
realpath 路径路径规范化,功能等同 -f提供相对路径与批量处理选项
realpath --relative-to计算相对某目录的路径脚本拼路径时很实用
不加任何选项的 readlink 只打印链接里写的那个目标,如果它本身是相对路径,输出也会是相对路径。脚本消费前统一用 -f 或 -m 规范化,能避免大量路径拼接类问题。
-f 要求整条路径都真实存在,任何一级缺失都会直接报错。做「目标还不存在」的探测时改用 -m,否则会把正常的待创建路径误判成错误。

易错点

  • 用 readlink 替代 -f:拿到的是相对或中间目标,脚本里当绝对路径用会出错
  • 对可能不存在的路径用 -f:命令报错被当成异常,应该用 -m
  • 只看链接本身不检查目标:链接指向已删除的目标属于断链,需要额外判断目标是否存在
  • 在脚本里用 ls -l 解析箭头来取路径:输出格式不稳定且列会被对齐破坏,应用 readlink 或 realpath

数据来源与参考

  • man 1 readlink(GNU coreutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌