“ls”命令的 -L(取消引用符号链接)开关有多通用?

“ls”命令的 -L(取消引用符号链接)开关有多通用?

我有一些软件,除其他外,需要:

  • 评估文件的rwxrwxrwx权限;
  • 在您能找到的各种 Unix 和 Linux 环境下工作。

目前,它通过运行命令来执行此ls -l操作。如果文件是符号链接,我必须获得目标文件的权限。该-L开关对此非常有效。

问题是:在 Unix 风格中是否存在该开关不可用的风险?如果有,是哪些? (如果它们足够稀有且足够古老,我也许可以忽略这个问题。)

答案1

不解析ls如果你能帮忙的话。根据您正在执行的操作,该test实用程序可能是更好的选择。

test -r filename如果当前用户的权限可以读取该文件,则将返回成功,并且将自动跟踪符号链接。同样,-w-x会告诉您该文件是否可写或可执行。命令test由 POSIX 指定,因此应该适用于任何现代 UNIX。

如果您确实需要知道文件的具体权限,ls可能是最便携的方式,只要您一次只对一个文件使用它即可。在这种情况下,-L-l标志也是由 POSIX 指定,所以你应该相当安全。 (看 ”不解析ls“有关 的输出字段的可移植性的更多评论ls -l。)

另一种选择可能是编写一个简短的 C 程序来利用stat(2)系统调用,其中将要可在任何 UNIX 上使用。如果这是已经从 C 语言编译的较大软件的一小部分,那么这可能是最好的选择。

答案2

它在 SUSv3 (Posix 2001) 中,但不在 SUSv2(别名 Unix98)中。

答案3

嗯,它在GNU,自由BSD,开放BSD,和一般BSD ls实现,所以我想说它很可能在任何地方。

相关内容