readlink -f 与 readlink -e 的用例

readlink -f 与 readlink -e 的用例

我曾多次使用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

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

答案1

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

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

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

主要区别在于:

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

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


因此,实际上:

  • -e当你想确保任何路径必须存在时使用,例如你需要退出状态来执行任何进一步的逻辑操作, if-else精确测试

  • 当您不希望路径现在严格存在,但稍后需要完整路径时使用-f,例如,您想在进程运行或文件系统挂载等之后创建解析的文件。

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

相关内容