[英]How to use Perl's File::Find::Rule module to find files with 777 perms
我想使用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`;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.