众数0777和777有区别吗

use*_*840 65 permissions

我在工作中看到了一个代码更改,其中模式值从 777 更改为 0777 以使 nfs setattr 工作。2个值有什么区别?

ale*_*xis 95

如果您将它们传递给chmod(命令行程序),则没有区别。但是在 C 程序或类似程序中,它0777是八进制的(三组三个 1 位,这是您想要的),而777十进制是十进制,这是完全不同的位模式。(chmod将任何数字参数解释为八进制,因此不需要前导零。)

0777(八进制)==二进制0b 111 111 111    ==权限rwxrwxrwx   (==十进制511

777(十进制)==二进制0b 1 100 001 001==权限sr----x--x(==八进制1411

  • 需要明确的是——你传递给 `chmod` 命令的值总是被解释为八进制。使用 `chmod 888` 会报错。 (15认同)

alf*_*era 5

第一位用于粘性位http://en.wikipedia.org/wiki/Sticky_bit

如果您使用 4 位数字设置权限,则第一个将设置或删除该位。

  • 粘滞位不是第一位而是第三位。第一个是 suid 位,第二个是 sgid 位。如果您使用三位数字设置权限,缺少的第一位数字也会影响(即删除)这三位。 (3认同)
  • @jlliagre 从 chmod 手册页 - “省略的数字被假定为前导零。”。此外,4 的第一个数字*是*粘滞位。再次从手册页:“第一个数字选择设置用户 ID (4) 和设置组 ID (2) 和限制删除或粘性 (1) 属性。第二个数字选择拥有文件的用户的权限:读取 ( 4)、write(2)、execute(1);第三个选择文件组内其他用户的权限,取值相同;第四个选择文件组外其他用户的权限,取值相同。”。 (2认同)