只是为了扩展和改进上面的一些答案:
首先,我将查看 GNU Coreutils 8.26 的 mkdir 手册页——它为我们提供了有关选项 '-m' 和 '-p' 的信息(也可以作为 --mode=MODE 和 --父母,分别):
...set[s] 文件模式(如在 chmod 中),而不是 a=rwx - umask
...如果存在则没有错误,根据需要创建父目录
在我看来,这些陈述含糊不清。但基本上,它说您可以使用“chmod numeric notation”(八进制)指定的权限创建目录,或者您可以“另辟蹊径”并使用 a/your umask。
旁注:我说“另一种方式”,因为 umask 值实际上正是它听起来的样子 - mask,隐藏/删除权限而不是像 chmod 的数字那样“授予”它们八进制表示法。
您可以执行shell-builtin 命令umask 来查看您的3 位umask 是什么;对我来说,它是022。这意味着当我在给定文件夹(比如 mahome)中执行 mkdir yodirectory 和 stat 时,我会得到一些类似这样的输出:
755 richard:richard /mahome/yodirectory
# permissions user:group what I just made (yodirectory),
# (owner,group,others--in that order) where I made it (i.e. in mahome)
#
现在,添加一点关于这些八进制权限的信息。当你创建一个目录时,“你的系统”会使用你的默认目录 perms' [适用于 new 目录(它的值应该是 777)] 并在 yo(u)mask 上拍打,有效地隐藏了其中的一些烫发'。我的 umask 是 022——现在如果我们从 777 中“减去”022(从技术上讲,减去是一种过度简化,并不总是正确的——我们实际上是关闭烫发或 屏蔽它们)......我们得到 755如前所述(或“陈述”)。
我们可以省略 3 位八进制数前面的“0”(因此它们不必是 4 位数字),因为在我们的例子中,我们不想要(或者更确切地说没有提及)任何粘性位, setuids 或 setgids (你可能想看看那些,顺便说一句,它们可能很有用,因为你要去 777)。所以换句话说,0777 暗示(或等同于)777(但 777 不一定等同于 0777——因为 777 只指定权限,而不是 setuids、setgids 等)
现在,从更广泛的意义上将此应用于您的问题 - 您(已经)有几个选择。以上所有答案都有效(至少根据我的coreutils)。但是当您想要一次创建具有 777 权限的 sub 目录(嵌套目录)时,您可能(或很可能)遇到上述解决方案的问题。具体来说,如果我在 mahome 中使用 022 的 umask 执行以下操作:
mkdir -m 777 -p yodirectory/yostuff/mastuffinyostuff
# OR (you can swap 777 for 0777 if you so desire, outcome will be the same)
install -d -m 777 -p yodirectory/yostuff/mastuffinyostuff
我将为yodirectory 和yostuff 获得755 的烫发,而mastuffinyostuff 的只有777 的烫发。所以看来umask 是yodirectory 和yostuff 的全部内容...为了解决这个问题,我们可以使用子shell:
( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
就是这样。 yostuff、mastuffinyostuff 和 yodirectory 的 777 次烫发。