如何使用Perl的File :: Find :: Rule模块查找777 perms的文件

问题描述 投票:3回答:2

我想使用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);
}
perl rules
2个回答
3
投票

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)。


-1
投票

使用File::Find::Rule很酷,但你可以使用find轻松完成并在perl中获得答案:

@files = split /\n/, `/bin/find /root -perm 777`;
© www.soinside.com 2019 - 2024. All rights reserved.