本页内容
- Linux realpath 与 readlink 命令
- Q1. 如何使用 realpath 和 readlink 解析路径?
- Q2. 如何打印相对于某个目录的解析路径?
- Q3. 如何仅去掉路径中的 .. ?
- Q4. 如何更改分隔字符?
- 结语
我们在前面已经介绍了 ln 命令,它可以让你在文件之间创建链接。不过,也有一些工具可以让你解析这些链接。
在本教程中,我们将讨论 realpath 和 readlink 命令的基础知识。这两个命令相似(即便不完全相同),都会在输出中显示解析后的符号链接。不过在此之前,值得一提的是,这里的所有示例都已在 Ubuntu 24.04 LTS 和 Debian 12 上测试过。
Linux realpath 与 readlink 命令
正如开头所说,realpath 和 readlink 命令都会在输出中显示符号链接解析后的路径。
它们的语法如下:
realpath [OPTION]... FILE...
readlink [OPTION]... FILE...
下面是它们各自手册页(man page)中的说明:
Print the resolved absolute file name
print resolved symbolic links or canonical file names
下面是一些问答形式的示例,能让你更好地理解这些工具的工作方式。
Q1. 如何使用 realpath 和 readlink 解析路径?
很简单:只需将文件或路径作为输入提供即可。下面的示例展示了这两个命令解析一个符号链接的过程。

下面则是它们如何处理路径的示例:

可以看到,在这两种情况下,两个命令都成功解析了符号链接。
Q2. 如何打印相对于某个目录的解析路径?
realpath 命令可以轻松实现这一点。例如,假设你想执行以下操作:
realpath /var/local/Downloadslink
然而,还有一个额外的需求:希望该命令的输出是相对于 /home/himanshu 目录的。那么你需要执行以下命令:
realpath /var/local/Downloadslink --relative-to=/home/himanshu
输出结果如下:
Downloads
可以看到,'--relative-to' 选项让你可以得到相对于 /home/himanshu 目录的输出。
Q3. 如何仅去掉路径中的 .. ?
有时你的目标并不是展开/解析符号链接,而是想去掉路径中的 .. 。realpath 命令可以帮你做到这一点。
你只需使用 -s 命令行选项即可。示例如下:
realpath -s ../../var/local/Downloadslink
该命令的输出如下:
/var/local/Downloadslink
Q4. 如何更改分隔字符?
默认情况下,换行符被用作分隔字符。不过,这两个命令都提供了一种方式,改用 NUL 作为分隔符。
在两种情况下,你需要使用的选项都是 -z。
realpath -z [FILE/PATH]
readlink -z [FILE/PATH]
结语
本文只讨论了这两个命令提供的少数几个选项/功能。当你练习完这些内容后,可以前往 readlink 和 realpath 的手册页(此处和此处)了解更多关于这些工具的信息。