linux - 如何在单个命令中创建目录并授予权限

如何在Linux中创建一个目录并在单个命令中授予权限?

我必须创建许多具有完全权限的文件夹777

命令

mkdir path/foldername
chmod 777 path/foldername 

我不喜欢在两个命令中创建和授予权限。 我可以用单一命令执行此操作吗?

poorani asked 2019-09-16T02:17:02Z
7个解决方案
168 votes

根据mkdir的手册页......

mkdir -m 777 dirname
alex answered 2019-09-16T02:17:16Z
18 votes
install -d -m 0777 /your/dir

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

Markus W Mahlberg answered 2019-09-16T02:17:40Z
8 votes

IMO,在这种情况下最好使用install命令。 我试图让systemd-journald在重新启动时保持不变。

install -d  -g systemd-journal -m 2755 -v /var/log/journal
Badi answered 2019-09-16T02:18:04Z
6 votes

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

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

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

./scriptname path/foldername

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

Delan Azabani answered 2019-09-16T02:18:41Z
6 votes

目录已存在时:

mkdir -m 777 /path/to/your/dir

当目录不存在并且您要创建父目录时:

mkdir -m 777 -p /parent/dirs/to/create/your/dir
Pedro Trujillo answered 2019-09-16T02:19:12Z
5 votes

您可以使用以下命令创建目录并同时授予权限

mkdir -m777 path/foldername 
Omer Gafar answered 2019-09-16T02:19:37Z
4 votes

只是为了扩展并改进一些上述答案:

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

...设置[s]文件模式(如chmod中),而不是a = rwx - umask

...如果存在则没有错误,根据需要创建父目录

我认为这些陈述含糊不清。 但基本上,它表示您可以使用“chmod numeric notation”(octals)指定的权限创建目录,或者您可以“反过来”并使用/您的umask。

旁注:我说“另一种方式”,因为umask值实际上就是它听起来的样子 - 掩码,隐藏/删除权限而不是像chmod的数字八进制表示法那样“授予”它们。

您可以执行shell-builtin命令( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )来查看您的3位数umask是什么; 对我来说,它是yodirectory.这意味着当我在给定文件夹(例如,mahome)和777中执行yostuff时,我会得到一些类似于此的输出:

               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'[它适用于新目录(它的值应该是777)]并在yo(u)掩码上拍打,有效地隐藏了一些perms'。 我的umask是022 - 现在如果我们从777“减去”022(技术上减去是一个过度重复并且不总是正确的 - 我们实际上是关闭烫发或掩盖它们)......我们得到755(或“statted”)早。

我们可以省略3位八进制前面的'0'(因此它们不必是4位数),因为在我们的例子中我们不想(或者更确切地说没有提到)任何stickybits,setuids或setgids (你可能想看看那些,顺便说一句,它们可能会有用,因为你要去777)。 换句话说,0777暗示(或相当于)777(但777不一定等于0777 - 因为777只指定权限,而不是setuids,setgids等)

现在,从更广泛的意义上将其应用于您的问题 - 您已经(已经)有了一些选择。 以上所有答案都有效(至少根据我的核心情况而定)。 但是当您想要一次创建具有777权限的子目录(嵌套目录)时,您可能(或很可能)遇到上述解决方案的问题。 具体来说,如果我在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

对于yodirectoryyostuff,我将获得电话( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )mastuffinyostuff只有777烫发。所以看来umask就是yodirectoryyostuff ... ...为了解决这个问题我们可以使用子shell:

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

就是这样。 yostuff,mastuffinyostuff和yodirectory的777 perms。

YenForYang answered 2019-09-16T02:21:25Z
translate from https://stackoverflow.com:/questions/5786326/how-to-create-a-directory-and-give-permission-in-single-command