我想使用perl File :: Find :: Rule来查找服务器中有perms 777的文件
我知道该模块有统计测试,所以我可以这样做:
$rule->mode(33279)
我发现33279是通过创建一个文件并打印它的权限,假设File :: Find :: Rule需要十进制?或者它应该以某种方式格式化?
这是使所有文件具有777权限的正确方法吗?
这是一个脚本,可以找到测试服务器主目录上的所有文件。我想更改它,以便它只能找到具有777权限的文件。
#!/usr/bin/perl
use strict;
use warnings;
use File::Find::Rule;
my $rule = File::Find::Rule->new;
$rule->file;
$rule->name( '*' );
my @files = $rule->in( "/root" );
for my $file (@files) {
my $mode = (stat $file)[2];
printf ("%04o %s\n",$mode & 07777, $file);
}
mode
包含文件权限和类型。您需要屏蔽它,以便只获取权限位。就个人而言,我实现了一个自定义规则:
use warnings;
use strict;
use File::stat;
use Fcntl qw/S_IMODE/;
use File::Find::Rule 'rule';
my $rule = rule->file->exec(sub{ S_IMODE(stat($_[2])->mode)==0777 });
my @files = $rule->in('/root');
for my $file (@files) {
print $file, "\n";
}
请注意,此屏蔽模式仍包含setuid / setgid / sticky位(通常称为Xst
)。如果你也想忽略它们,只检查ugo
/ rwx
位,那么你必须屏蔽0777
(例如$mode & 0777
)。
使用File::Find::Rule
很酷,但你可以使用find
轻松完成并在perl中获得答案:
@files = split /\n/, `/bin/find /root -perm 777`;