如何获取八进制格式的文件的权限?

如何获取八进制格式的文件的权限?

... 我该如何设置它们?这对目录是否同样有效?粘性位和那些更“奇特”的东西会发生什么?

答案1

根据建议@古斯塔夫,该stat计划(属于GNU 核心实用程序因此本质上是一个“Linux”程序,尽管你可能有一个港口或者包裹在 BSD 系统中)可以执行此操作。命令

stat -c "%a %n"文件

生成仅包含八进制模式(包括 setuid、setgid 和 sticky 位编码)和文件名的格式化列表。根据文档

  • %a是“八进制访问权限”
  • %n是“文件名”

例如,给定以下脚本:

#!/bin/sh
for name in $*
do       
    ls -ld "$name"
    stat -c '%a %n' "$name"
done

你可能会看到如下输出myscript /usr/bin /usr/bin/X /usr/bin/bsd-write

drwxr-xr-x 5 root root 118784 Jul 11 19:55 /usr/bin
755 /usr/bin
-rwsr-sr-x 1 root root 9232 Dec 16  2011 /usr/bin/X
6755 /usr/bin/X
-rwxr-sr-x 1 root tty 11000 Jun 17  2010 /usr/bin/bsd-write
2755 /usr/bin/bsd-write

你会看到返回 3 或 4 个八进制数字访问权,取决于是否设置了 setuid 等。前导(第四)位数字结合了

  • 4(设置 ID)
  • 2(设置 gid)
  • 1 (粘性)

访问权返回排除系统调用返回的额外位stat表示名称是目录 ( S_IFDIR) 还是文件 ( S_IFREG)。顺便说一下,所有这些位都适合 16 位值,这是因为 Unix 早在 20 世纪 70 年代和 80 年代早期就已实现 — —标准值. 因为访问权排除文件类型,您可以在命令中按原样使用该值chmod(以及chmod函数),因为它是八进制的,并且chmod命令需要这样。即使是 setuid 等,也可以使用八进制,尽管

chmod u+s /usr/bin/whatever

更具可读性。

进一步阅读

答案2

stat -c "%a %n" <file>

似乎有效——但我不知道更多信息。

答案3

得到:正如古斯塔夫所回答的。

环境:

chmod 0755 myfile

目录也一样。对于粘性位,第一个数字应该是 1。关于粘性位:https://askubuntu.com/a/432703

相关内容