模式值0777和777之间有什么区别


Answers:


75

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

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

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


14
为了清楚起见,您传递给chmod命令的值始终被解释为八进制。使用chmod 888将产生错误。
mattdm 2013年

但是每个数字都是八进制的,而不是整数本身。
德雷克·克拉里斯(Decke Clarris)2013年

1
八进制数字字符串一个八进制数字。chmod将数字参数解释为八进制,而不考虑前缀。(不过说真的数字本身没有任何功能;只是数字,或者更确切地说位。)
亚历克西斯

因此,在C程序中,如果要传递1777,则需要编写01777
Faheem Mitha 2013年

1
@Faheem,是的。八进制1777是用01777C 编写的(或者您可以写1023,这是十进制相同的数字。但不要:-)
Alexis

4

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

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


3
粘性位不是第一位,而是第三位。第一个是suid位,第二个是suid位。如果使用三位数字设置权限,则丢失的第一位数字也会影响(即删除)这三位数字。
jlliagre 2013年

你是对的。因此,“ alexis提供的答案
令人震惊。– alfredocambera

2
@jlliagre在chmod手册页中-“忽略的数字假定为前导零。”。同样,4的第一位粘性位。再次从手册页:“第一个数字选择设置的用户ID(4)和设置组ID(2)以及受限删除或粘性(1)属性。第二个数字选择拥有文件的用户的权限:读( 4),编写(2),然后执行(1);第三个为文件组中的其他用户选择具有相同值的权限;第四个为不在文件组中的其他用户选择具有相同值的权限。”。
Faheem Mitha 2013年

1
@FaheemMitha,假定省略的数字为前导零,因此删除上述位。另外,您似乎混淆了位和数字,我是在评论第一位,而不是第一位。
jlliagre 2013年

1
@jlliagre好吧,很公平。
Faheem Mitha 2013年

1

有趣的答案是:

  • 0700和之间没有区别700,如其他答案所述
  • 但有之间的差异00700以及0700(对于目录)

至少GNU coreutils的chmod版本就是这种情况,这是Linux上的默认版本。

请参阅以下示例:

$ ls -ld mydir
drws--s--- 4 myuser mygroup 4096 Jul  8 09:27 mydir
$ chmod 0710 mydir ; ls -ld mydir                   # surprise ahead -- s-bits remain:
drws--s--- 4 myuser mygroup 4096 Jul  8 09:27 mydir
$ chmod 00710 mydir ; ls -ld mydir                  # _now_ they're gone:
drwx--x--- 4 myuser mygroup 4096 Jul  8 09:27 mydir

这是为了避免意外删除目录的setuid / setgid位。有关详细信息,请参见chmod文档。


-1

在Linux系统中,有两种类型的权限可用:

  1. 文件权限
  2. 特许

在文件权限中,我们设置文件和文件夹的权限:

权限是:

  • 阅读(4)
  • 写(2)
  • 执行(1)

在特殊权限中,三种类型的权限是:

  • SUID(4)
  • SGID(2)
  • 粘钻头(1)

在您的问题中,您问有什么区别,因此之间没有任何区别,chmod 777 and 0777因为no any octal value显示值(0)为零。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.