readlink -f 与 readlink -e 的用例

edw*_*ksl 7 command-line symbolic-link

我曾多次使用readlink -freadlink -e解决符号链接,据我所知,它们给出了相同的结果。readlinkfrom的手册页man readlink说:

-f, --canonicalize
       canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist

-e, --canonicalize-existing
       canonicalize by following every symlink in every component of the given name recursively, all components must exist
Run Code Online (Sandbox Code Playgroud)

阅读手册页后,虽然我了解-f-e选项之间的技术差异,但我想不出我会使用这两个选项的具体情况。是否有特定的用例和情况,人们可能更喜欢使用readlink -fto readlink -e,反之亦然?

hee*_*ayl 8

首先,两者都会规范化包含以下内容的文件名:

  • 将所有相对路径转换为绝对路径

  • 将所有符号链接转换为文件系统层次结构上的实际硬链接路径

主要区别是:

  • -f将规范化可能只包含不存在的文件系统部分的路径,例如目录或文件,否则非零退出状态;另一方面,-e仅当文件系统中存在所有组件时才有效,否则非零退出状态

  • /中忽略任何尾随-f-e将尾随/视为目录


所以,实际上:

  • 使用-e时要进行任何路径的确定必须存在如您需要退出状态做任何其他的逻辑操作,if-else测试精确

  • 使用-f时,你不想要的路径严格,现在存在,但你需要完整的路径后,例如要算账创建解决文件时,一个进程正在运行或文件系统安装等。

  • 使用-e尾随/来明确检查目录条目,因为-f忽略尾随/