如何在Linux中的单个命令中创建目录并授予权限?
我必须创建许多具有完全权限的文件夹 777
。
指令
mkdir path/foldername
chmod 777 path/foldername
我不喜欢在两个命令中创建和授予权限。我可以在单个命令中执行此操作吗?
如何在Linux中的单个命令中创建目录并授予权限?
我必须创建许多具有完全权限的文件夹 777
。
mkdir path/foldername
chmod 777 path/foldername
我不喜欢在两个命令中创建和授予权限。我可以在单个命令中执行此操作吗?
Answers:
根据mkdir的手册页...
mkdir -m 777 dirname
-p
上面已经提到的@DisplayName 问题外,还有另一个问题。-m
仅当实际创建目录时,此选项才适用。如果已经存在,其模式将不会更改。根据您的上下文,这可能是好是坏。
install -d -m 0777 /your/dir
应该给你你想要的。请注意,每个用户都有权在该目录中写入添加和删除文件。
three
,而默认权限足以作为其路径。
目录已经存在时:
mkdir -m 777 /path/to/your/dir
当目录不存在并且您要创建父目录时:
mkdir -m 777 -p /parent/dirs/to/create/your/dir
find /your/dirs -type d -exec chmod 755 {} \;
只是为了扩展和改善上述答案:
首先,我将检查GNU Coreutils 8.26的mkdir手册页-它为我们提供了有关选项'-m'和'-p'的信息(也可以分别指定为--mode = MODE和--parents。 ):
...设置文件模式(如chmod),而不是a = rwx-umask
...如果存在则没有错误,根据需要创建父目录
我认为这些陈述含糊不清。但是从根本上说,它可以使目录具有“ chmod数字符号”(八进制)指定的权限,也可以“以其他方式”使用a /您的umask。
旁注:我说“另一种方式”,因为umask值实际上就是听起来像的样子-mask,隐藏/删除权限,而不是像chmod的数字八进制表示法一样“授予”它们。
您可以执行shell-builtin命令umask
来查看您的3位数umask。对我来说,这是022
。这意味着当我mkdir yodirectory
在给定的文件夹(例如mahome)中执行该命令时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)
#
现在,仅添加一些关于这些八进制权限的信息。创建目录时,“您的系统”将使用默认目录权限(适用于新目录(其值应为777))并拍打yo(u)掩码,从而有效地隐藏了其中的一些权限。我的umask是022-现在,如果我们从777中“减去” 022(从技术上讲,这是过分简化,但并不总是正确的-我们实际上是在关闭烫发或遮罩))...我们得到755(如所述) )。
我们可以在3位数的八进制前面省略“ 0”(因此它们不必为4位数),因为在我们的情况下,我们不需要(或更不用提)任何粘性位,setuid或setgids (顺便说一句,您可能想研究一下这些内容,因为您要使用777,它们可能很有用)。因此,换句话说,0777暗含(或等效于)777(但777不一定等效于0777,因为777仅指定权限,而不指定setuid,setgids等)。
现在,将其广泛地应用于您的问题-您(已经)有一些选择。以上所有答案均有效(至少根据我的coreutils)。但你可能(或相当可能)碰到上述问题的解决,当你想创建子一下子目录(嵌套目录)与777个权限。具体来说,如果我在uhome中使用umask 022执行以下操作:
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
我会得到烫发755
两个yodirectory
和yostuff
,只777
烫发了mastuffinyostuff
。因此,看来,umask
是所有的耳光yodirectory
和yostuff
......来解决这个问题,我们可以使用一个子shell:
( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
就是这样。yostuff,mastuffinyostuff和yodirectory的777个烫发。
请勿这样做: mkdir -m 777 -p a/b/c
因为那样只会设置权限777
在最后一个目录c上;将使用umask中的默认权限创建a和b。
而是创建具有权限的任何新目录777
,mkdir -p
在覆盖umask的子shell中运行:
(umask u=rwx,g=rwx,o=rwx && mkdir -p a/b/c)
请注意,如果a,b和c中的任何一个已经存在,则不会更改权限。
mkdir temp; chmod 777 temp
是一行。您可以将'temp'设置为变量并将其另存为bash命令。这是您要做什么?