Perl:测试文件实际上是可写的,而不是检查文件权限

Spe*_*mon 5 perl file-permissions

假设我有一个文件/var/tmp/filename。

在 Perl 中,我编写了以下代码段:

#!/usr/bin/env perl
use strict;
use warnings;

if (-W /var/tmp/filename)
{
...
}

exit;
Run Code Online (Sandbox Code Playgroud)

-W 和 -w 函数 ( http://perldoc.perl.org/functions/-X.html ) 会检查文件是否可以实际写入,还是仅检查文件权限是否允许写入?

我问的原因是我正在编写一个从服务器获取 cookie 的脚本。

此脚本需要能够将 cookie 文件写入文件系统,但如果 cookie 文件的文件系统路径是只读的,则该文件的权限无关紧要。所以我想测试 cookiefile 是否真的可写,而不是仅仅检查它的权限。

zdi*_*dim 3

如果您关心的是文件系统,您可以检查它是否以只读方式挂载。如果是这样,它的行将/proc/mounts有ro,因此打开文件并grep查找带有ro和您的文件系统的行。

这仅适用于使用/proc但您的文件系统使用的文件系统。

请注意,使用 进行查询mount不太可靠。

一种可靠的方法是尝试写入文件,我会使用File::Temp来实现这一点。