我有一些软件,除其他外,需要:
- 评估文件的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)中。