为什么mkdir模式参数从0开始?

时间:2014-04-04 23:54:27

标签: php linux file-permissions chmod

mkdir函数的参数模式默认值为0777

bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]] )

我见过mkdir的每个例子,模式参数都以0开头。前导八进制数字是不是表示文件的类型?

this page开始,0表示常规文件,3表示目录。

因此,mkdir中mode参数的默认值不应该是3777而不是0777

两种模式相对于mkdir有什么区别。如果我正在创建一个常规文件夹,我应该使用哪个模式值?

1 个答案:

答案 0 :(得分:2)

根据您的要求,您可以获得一些相当混乱的信息。您使用chmodmkdirtouch以及其他创建和修改文件权限的工具指定的模式往往只处理低阶权限位,有时候只处理粘性和集合[ ug] id位。模式的高阶部分(ls -lstat输出但不常见,包括文件类型。

最右边的9位全部被权限占用,接下来的几位与sticky,setuid和segid位相关。注意:

bin(0777)  =>    '0b111111111' # 9 bits, all read, write, exec
bin(01777) =>   '0b1111111111' # 10 bits, sticky + 0777
bin(02777) =>  '0b10111111111' # 11 bits, setgid + 0777
bin(04777) => '0b100111111111' # 12 bits, setuid + 0777

因为文件类型没有空间容纳在前12位中,所以这篇文章有点令人困惑。

你似乎在这个问题上对此很清楚,但对于子孙后代,领先的0是将值标识为八进制的。因此,即使您想指定文件类型,也必须从03…开始。

在任何情况下,mkdir都会创建目录或什么也不做。它不会创建文件,因此它不关心文件类型位。