如何查找文件是否可供所有人阅读?

Tre*_*ree 1 perl

如何查找UNIX中的每个人是否可以读取文件?

msc*_*cha 9

(相对)现代解决方案:使用File :: stat,一个自5.004以来的核心模块,以及Fcntl,它一直在Perl 5.参见perldoc -f stat.

use strict;
use warnings;
use File::stat;
use Fcntl qw(:mode);

...

my $mode = stat($filename)->mode;
my $allCanRead = ($mode & S_IRUSR)   # User can read
              && ($mode & S_IRGRP)   # Group can read
              && ($mode & S_IROTH);  # Others can read
Run Code Online (Sandbox Code Playgroud)


bvr*_*bvr 5

来自perldoc:

$mode = (stat($filename))[2];
printf "Permissions are %04o\n", $mode & 07777;
Run Code Online (Sandbox Code Playgroud)

要提取其他读取位,您可以这样做

print "read for everyone" if $mode & 4;    # pick bit 2 from mode
Run Code Online (Sandbox Code Playgroud)

  • 在"其他人"可以读取的模糊情况下,做不正确的事情,但"用户"或"组"不能.此外,最好使用File :: Stat和Fcntl来避免使用硬编码. (3认同)
  • @mscha同意常量更好,但是在我查看文档之前,它们对我没有任何意义.根据不明显的情况,仍然可以做`$ mode&0444 == 0444`.+1为你的例子. (3认同)