【问题标题】:Why does mkdir mode parameter start with 0?为什么 mkdir 模式参数以 0 开头?
【发布时间】:2014-05-17 11:31:15
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

标签: php linux file-permissions chmod


【解决方案1】:

根据您询问的对象,您可能会得到一些相当混乱的信息。您使用chmodmkdirtouch 和其他创建和修改文件权限的工具指定的模式往往只处理低阶权限位,有时还有sticky 和set[ug]id 位。模式的高阶部分,ls -lstat 输出,但不太常见,包括文件类型。

最右边的九位全部被权限占用,接下来的几位与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 将创建一个目录或什么都不做。它不会生成文件,因此与文件类型位无关。

【讨论】:

  • 前导 0 将值标识为八进制。不知道这件事。谢谢。
  • @ShreyansPagariya 哦,是的,出于某种原因,我认为您根据您的问题理解了这一点。
猜你喜欢
  • 2017-11-28
  • 1970-01-01
  • 2017-05-22
  • 2013-07-12
  • 1970-01-01
  • 2011-12-07
  • 2020-04-17
  • 1970-01-01
相关资源
最近更新 更多