做linux运维的小伙伴,日常肯定天天和软链接(符号链接)打交道。
但很多人只会ln -s创建链接,不知道怎么精准溯源文件真实路径、判断链接是否有效、获取规范绝对路径。
遇到多层嵌套软链接、脚本自动获取程序真实目录、校验文件链接状态的场景,直接懵圈。
今天给大家介绍readlink命令---linux专属链接溯源工具,短小精悍、脚本必备、运维高频,看完直接告别路径排查难题。
readlink [参数] 文件名/链接名常用核心参数:
#1.创建原始文件touch /opt/real-file.txt#2.创建一级软链接ln -s /opt/real-file.txt /usr/bin/link1#3.创建二级嵌套软链接ln -s /usr/bin/link1 /root/link2

普通readlink只会读取当前链接直接指向的地址,不会递归溯源:
readlink /root/link2#输出:/usr/bin/link1

readlink -f /root/link2#输出:/opt/real-file.txt

这是写自动化脚本的常用参数!文件/链接有效 → 输出真实路径;文件丢失、链接失效 → 无输出。
#有效链接readlink -e /root/link2#输出:/opt/real-file.txt#删除原始文件,制造失效链接rm -f /opt/real-file.txtreadlink -e /root/link2#无任何输出

脚本中可直接通过是否有输出判断文件状态,非常精准。
即使文件不存在,也会解析出标准绝对路径,适合预创建文件路径场景:
readlink -m /root/none/file/link#输出:/root/none/file/link

绝大多数运维脚本需要基于脚本所在目录执行程序,相对路径容易出错,readlink -f是标准通用写法:
#!/bin/bash#获取脚本真实绝对路径(解析软链接)SCRIPT_PATH=$(readlink -f "$0")#获取脚本所在目录SCRIPT_DIR=$(dirname "$SCRIPT_PATH")echo "脚本真实完整路径:$SCRIPT_PATH"echo "脚本所在目录:$SCRIPT_DIR"#切换到脚本目录执行业务,运维必加cd "${SCRIPT_DIR}" || exit 1echo "切换后当前工作目录:$(pwd)"

适配:软链接调用脚本、移动脚本目录、嵌套调用等所有场景,企业脚本通用标准写法。
当服务器运行久了,会残留很多无效软链接(源文件删除但链接还在),直接排查:
#排查指定目录下所有失效软链接并展示find /usr/bin /usr/sbin -type l ! -exec readlink -e {} \; -exec ls -lh {} \;

五、日常注意事项
普通文件用readlink无输出readlink只对软链接生效,直接作用于普通文件、目录,默认无结果,必须加-f才会输出自身绝对路径。
-f严格校验文件存在如果源文件丢失、路径错误,readlink -f会直接返回空值,脚本中需做好判空处理。
硬链接无法用readlink解析readlink仅针对符号链接(软链接),硬链接无指向关系,不适用该命令。
相对路径 & 嵌套链接优先用-f不要用默认无参数写法,多层链接、路径复杂场景,-f永远是最稳妥的选择。
readlink是linux软链接溯源专属命令,核心价值:穿透嵌套链接、获取真实路径;日常只用-f、-e两个参数,覆盖99%运维场景;自动化脚本、路径校验、系统巡检、程序路径定位,必备工具,极简且零资源占用。如果觉的文章对你的运维工作有帮助,记得点赞加关注。
Linux运维实战:hostnamectl 彻底吃透,告别改主机名踩坑