GNU Coreutils的文档中给出了规范路径的良好定义。readlink指定“规范化模式”返回不包含任何这些内容的等效路径:
指向自身 (.) 和父 (..) 目录的硬链接
重复的分隔符 (/)
符号链接
字符串长度无关紧要,如以下示例所示。
如果您正在运行 linux 或使用 GNU Coreutils ,您可以尝试readlink -f(规范化模式)或其首选等效命令realpath,以查看系统上某些程序的“绝对路径”和“规范绝对路径”之间的区别。
我可以使用在我的系统上获取“java”的路径which
$ which java
/usr/bin/java
然而,这条路径实际上是指向另一个符号链接的符号链接。此符号链接链可以使用 显示namei。
$ namei $(which java)
f: /usr/bin/java
d /
d usr
d bin
l java -> /etc/alternatives/java
d /
d etc
d alternatives
l java -> /usr/lib/jvm/java-17-openjdk-amd64/bin/java
d /
d usr
d lib
d jvm
d java-17-openjdk-amd64
d bin
- java
可以使用前面提到的realpath命令找到规范路径。
$ realpath $(which java)
/usr/lib/jvm/java-17-openjdk-amd64/bin/java