簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM