如何创build一个目录,并在单个命令中授予权限

如何创build一个目录,并在Linux的单一命令给予权限?

我必须创build许多具有完全许可777的文件夹。

命令

 mkdir path/foldername chmod 777 path/foldername 

我不喜欢用两个命令创build和授予权限。 我可以在单一命令中做到这一点吗?

根据mkdir的手册页

 mkdir -m 777 dirname 
 install -d -m 0777 /your/dir 

应该给你你想要的。 请注意,每个用户都有权在该目录中添加和删除文件。

你可以写一个简单的shell脚本,例如:

 #!/bin/bash mkdir "$1" chmod 777 "$1" 

一旦保存,并启用可执行标志,您可以运行它而不是mkdir和chmod:

 ./scriptname path/foldername 

然而, 亚历山大的答案要好得多,因为它产生了一个过程而不是三个过程。 我不知道-m选项。

国际海事组织,最好在这种情况下使用install命令。 我正在尝试使systemd-journald在重新启动时保持systemd-journald

 install -d -g systemd-journal -m 2755 -v /var/log/journal 

只是为了扩大和改善一些以上的答案:

首先,我将检查GNU Coreutils 8.26的mkdir手册页 – 它提供了有关选项“-m”和“-p”的信息(也可以分别为–mode = MODE和–parents ):

…设置文件模式(如在chmod中),而不是a = rwx – umask

没有错误,如果存在,根据需要制作父目录

这些陈述含糊不清,在我看来。 但基本上,它说,你可以使用“chmod numeric notation”(八进制)指定的权限来创build目录,或者你可以使用“其他方式”并使用/你的umask。

附注:我说“另一种方式”,因为umask值实际上就是它听起来像 – 面具 ,隐藏/删除权限,而不是“授予”他们与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 (ie in mahome) # 

现在,只需添加更多关于这些八进制权限的信息。 当你创build一个目录时,“你的系统”把你的默认目录“perms”(适用于新的目录(它的值应该是777)]和拍击面具,有效地隐藏了一些这些perms。 我的umask是022 – 现在如果我们从777中“减去”022(技术上的减法是一个过于简单,并不总是正确的 – 我们实际上是closures烫发或掩盖它们)…我们得到755所述(或“statted” )早些时候。

我们可以在3位八进制前面省略“0”(所以它们不一定是4位数),因为在我们的例子中,我们不想(或者没有提到)任何stickybits,setuids或setgids (你可能想看看那些,顺便说一句,他们可能是有用的,因为你要去777)。 换句话说,0777意味着(或等同于)777(但是777不一定等同于0777 – 因为777只指定权限,而不指定setuids,setgids等)

现在,从更广泛的意义上将它应用到你的问题上 – 你已经有了一些select。 所有的答案上面的工作(至less根据我的coreutils)。 但是,如果您想一次性创build777个权限的子目录(嵌套目录),则可能(或很可能)遇到上述解决scheme的问题。 具体来说,如果我使用022的umask在mahome中执行以下操作:

 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 

我将为yodirectoryyostuff获得755的烫发, mastuffinyostuff只有777烫发。 所以看起来, umask是所有的yodirectoryyodirectoryyostuff …为了解决这个问题,我们可以使用一个子shell:

( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )

就是这样。 对于压榨,麦秆和调味品来说,777烫发。