readlink 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,属于文件与目录命令族(见文件与目录命令族)。软链接一层套一层时,它帮你追到最底层。
readlink 显示软链接(symbolic link)指向的目标。默认只给"直接指向的那一层",加 -f 会一路追到最终的真实文件。
一、基本用法
bash
readlink /usr/bin/python # 输出 python3(直接指向)
readlink -f /usr/bin/python # 递归解析到真实文件:/usr/bin/python3.11不加
-f只给下一层(可能是另一个链接);-f(canonicalize)递归穿过所有链接、解析./..、给出绝对真实路径。脚本里几乎总是用-f。
二、配合 -e / -m
bash
readlink -e /link # 解析且要求最终文件必须存在
readlink -m /link # 解析,即使最终文件不存在也给出规范化路径
-e严格(目标不存在则返回错误),-m宽松(不存在也规范化输出)。需要"确信链接有效"时用-e,只是规范化路径用-m。
三、与 realpath / pwd 的关系
bash
readlink -f file # 等价于 realpath file
cd /symlink/dir && pwd -P # 也拿到真实路径(见 [pwd](/linux/cmd/pwd.md))
readlink -f和 realpath 结果一致(realpath 更易记)。处理软链接目录下的文件,用它拿绝对真实路径,避免脚本基于错误路径操作。
四、实战:脚本取真实路径
bash
REAL="$(readlink -f "$0")" # 拿到脚本自身的真实绝对路径脚本里
$0可能是个软链接,readlink -f "$0"拿到真实位置,进而定位同目录的配置文件,避免"软链接调用导致相对路径错乱"。
一句话总结
readlink = 解析软链接指向:默认给直接下一层,-f 递归追到最终真实绝对路径(脚本首选);-e 要求目标存在、-m 宽松规范化;与 realpath 等价、和 pwd -P(见pwd)同理;脚本取自身真实路径用 readlink -f "$0"。