POSIX 是否保证其所有 shell 实用程序都将解析需要文件的符号链接?

POSIX 是否保证其所有 shell 实用程序都将解析需要文件的符号链接?

对于采用一个或多个文件作为参数的 POSIX shell 实用程序,POSIX 是否保证可以传递符号链接(并且该实用程序将解析它)?它记录在某处吗?

答案1

POSIX 确实不是要求它指定的所有实用程序解析作为参数提供的任何符号链接,需要文件名或路径。但它确实详细记录了应如何处理符号链接(查找“符号链接”条目)。

作为一般规则,如果路径组件以/.

然后

系统中为四个域建立了默认符号链接策略。在几乎所有情况下,都有一些实用程序选项可以覆盖此默认行为。四个域如下:

  1. 指定给采用路径名参数的系统调用的符号链接

  2. 指定为不执行文件层次结构遍历的实用程序的命令行路径名参数的符号链接

  3. 引用非目录类型文件的符号链接,指定给正在执行文件层次结构遍历的实用程序

  4. 引用目录类型文件的符号链接,指定给执行文件层次结构遍历的实用程序

系统调用行为因历史原因而有所不同。

公用事业不是遍历文件系统遵循符号链接,但有一些例外。这涵盖了大多数实用程序:

一般规则是此类别的实用程序遵循名为参数的符号链接。

遍历文件系统的实用程序处理除目录之外的文件的符号链接,如果有意义,则不跟踪它们,否则跟踪它们。

对于遍历文件系统的实用程序,POSIX 不强制要求有关目录符号链接的特定行为,但建议实用程序不是遵循符号链接(带有详细的推理)。

上述情况也有例外,并且根据系统是否为符号链接分配某些属性而有所不同(例如符号链接是否具有独立于它们链接到的文件的权限)。

答案2

这不是任何软件都需要支持的功能。

POSIX 保证当您要求文件系统函数(例如open)打开符号链接时,您将准确获得符号链接指向的文件。 (如果文件是符号链接,您可以显式设置一个标志,使打开文件的尝试失败。但如果您不采取额外步骤,则符号链接的行为就像它们指向的文件一样。)

因此,“跟随”是由操作系统(例如,内核+ libc)完成的,shell 实用程序不需要对符号链接执行任何特殊操作 - 除非它们特别关心处理非常规文件,例如在这种情况下,我希望它们都能处理极少数的非常规文件类型(如果我没有忘记的话,有目录、符号链接、设备文件、命名的 FIFO 和套接字。就是这样。)。

相关内容