为什么`mkdir -pm` 没有设置我要求的权限?

kas*_*erd 5 permissions mkdir

我用命令创建了一些目录 mkdir -pm 700 /tmp/a/b/c

我很惊讶地发现/tmp/a有权限775而不是700我请求的权限。

是否有某种原因mkdir只将指定的模式应用于创建的最后一个目录并忽略它的父目录?

gar*_*Red 5

这是 POSIX标准要求的mkdir

对于-p选项:

创建任何缺少的中间路径名组件。

其次是:

然后使用以下参数调用 chmod() 函数:

  1. 与 mkdir() 调用中相同的路径参数
  2. 取值(S_IWUSR|S_IXUSR|~filemask)&0777作为mode参数,其中filemask为进程的文件模式创建掩码

这意味着它仅chmod在路径中的最终目录上运行。

  • @kasperd 哦,抱歉,我误读了您的评论。garethTheRed:[先前版本的规范](http://pubs.opengroup.org/onlinepubs/009695399/utilities/mkdir.html) 用你可能会发现的更清楚的术语来说明:`-p` 的描述给出了等效命令`mkdir -p -m $(umask -S),u+wx $(dirname dir) && mkdir [-m mode] dir`。 (2认同)