本页内容

  • 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 解析路径?

很简单:只需将文件或路径作为输入提供即可。下面的示例展示了这两个命令解析一个符号链接的过程。

Linux readlink 与 realpath 命令入门教程(含实例)

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

Linux readlink 与 realpath 命令入门教程(含实例)

可以看到,在这两种情况下,两个命令都成功解析了符号链接。

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 的手册页(此处和此处)了解更多关于这些工具的信息。