对于unix文件,我想知道Group或World是否对该文件具有写入权限。
我一直在考虑这些问题:
my $fpath = "orion.properties";
my $info = stat($fpath) ;
my $retMode = $info->mode;
$retMode = $retMode & 0777;
if(($retMode & 006)) {
# Code comes here if World has r/w/x on the file
}
感谢。
答案 0 :(得分:13)
您的提案已经接近了 - stat
的使用有点偏离(但是第二个想法,您必须使用File::stat
;如果您的代码已经完成,它会有所帮助),掩码常量是错误的,评论有点不尽如人意:
use strict;
use warnings;
use File::stat;
my $fpath = "orion.properties";
my $info = stat($fpath);
my $retMode = $info->mode;
$retMode = $retMode & 0777;
if ($retMode & 002) {
# Code comes here if World has write permission on the file
}
if ($retMode & 020) {
# Code comes here if Group has write permission on the file
}
if ($retMode & 022) {
# Code comes here if Group or World (or both) has write permission on the file
}
if ($retMode & 007) {
# Code comes here if World has read, write *or* execute permission on the file
}
if ($retMode & 006) {
# Code comes here if World has read or write permission on the file
}
if (($retMode & 007) == 007) {
# Code comes here if World has read, write *and* execute permission on the file
}
if (($retMode & 006) == 006) {
# Code comes here if World has read *and* write permission on the file
}
if (($retMode & 022) == 022) {
# Code comes here if Group *and* World both have write permission on the file
}
问题标题中的术语'如果文件权限大于755,如何检入Perl?即Group / World有写入权限'有点怀疑。
该文件可能具有权限022(或更合理地,622),并且包括组和世界写入权限,但这两个值都不能合理地声称为“大于755”。
我发现有用的一组概念是:
例如,对于数据文件,我可能需要:
更有可能的是,对于数据文件,我可能需要:
目录略有不同:执行权限意味着您可以将目录设为当前目录,或者如果您知道其名称则访问目录中的文件,而读取权限意味着您可以找到目录中的文件,但是您没有执行权限也无法访问它们。因此,你可能有:
注意,置位和复位位必须是不相交的(($set & $rst) == 0)
),位的总和将始终为0777; “不关心”位可以从0777 & ~($set | $rst)
计算。
答案 1 :(得分:-3)
#!/usr/bin/perl
use warnings;
use strict;
chomp (my $filename = <STDIN>);
my $lsOutput = `ls -l $filename`;
my @fields = split (/ /,$lsOutput);
my @per = split (//,$fields[0]);
print "group has write permission \n" if ($per[5] eq 'w');
print "world has write permission" if ($per[8] eq 'w');