【问题标题】:Get permission bits string on Linux/Perl? [duplicate]在 Linux/Perl 上获取权限位字符串? [复制]
【发布时间】:2015-05-18 23:11:52
【问题描述】:

我想编写一个 shell / Perl 脚本,它可以检查文件是否设置了特定的权限位。

例如我想检查一个文件是否有类似的权限

drwxr-s--- 

当我在 Perl 中使用 stat 函数时,它给了我一个十进制数。 有没有办法我可以在我的 perl 脚本中得到上面的确切字符串并进行比较? 如果没有 - 有没有办法将该字符串转换为数字然后进行比较?

【问题讨论】:

  • man 2 statperldoc -f -X
  • @ThisSuitIsBlackNot :不是真的。在这里,我想查看文件是否具有我提到的所有权限位。其他问题只是检查所有者的位。不过很抱歉造成混淆。
  • 不要将 Perl 返回的内容视为十进制数。将其视为一组八进制权限。您可以使用 bit math 来检查是否设置了特定权限。你也可以使用 Perl 的file tests 来检查权限。

标签: linux perl file-permissions


【解决方案1】:

为什么不直接将十进制数转换为二进制形式并使用二进制 AND 或 XOR?

此代码为您提供二进制权限:

printf '%b', (stat 'filename.txt')[2] & 07777;

例如,-rw-r-----二进制形式将是110100000。

【讨论】:

  • 你也可以,但我想按原样检索权限的字符串值。这可能吗?
  • @user2780224,是的。有一个函数 format_perms() 采用十进制形式并为您提供所需的字符串。
【解决方案2】:

我不知何故得到了比较所需的数字,这就是我用来获得所需答案的数字 -

my $mode = (stat('$file'))[2];
printf("permissions are %04o\n", $mode & 07777);

这对我有用!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2013-05-30
    • 2018-07-26
    • 1970-01-01
    • 2021-11-28
    • 2014-10-21
    相关资源
    最近更新 更多