poo*_*ani 92 linux chmod mkdir
如何在Linux中创建一个目录并在单个命令中授予权限?
我必须创建大量具有完全权限的文件夹777.
mkdir path/foldername
chmod 777 path/foldername
Run Code Online (Sandbox Code Playgroud)
我不喜欢在两个命令中创建和授予权限.我可以用单一命令执行此操作吗?
ale*_*lex 188
据mkdir的手册页...
mkdir -m 777 dirname
Run Code Online (Sandbox Code Playgroud)
Mar*_*erg 18
install -d -m 0777 /your/dir
Run Code Online (Sandbox Code Playgroud)
应该给你你想要的东西.请注意,每个用户都有权在该目录中编写添加和删除文件.
Ped*_*llo 11
目录已经存在时:
mkdir -m 777 /path/to/your/dir
Run Code Online (Sandbox Code Playgroud)
当目录不存在并且您要创建父目录时:
mkdir -m 777 -p /parent/dirs/to/create/your/dir
Run Code Online (Sandbox Code Playgroud)
小智 10
IMO,install在这种情况下使用命令会更好.我试图systemd-journald在重新启动时保持持久性.
install -d -g systemd-journal -m 2755 -v /var/log/journal
Run Code Online (Sandbox Code Playgroud)
您可以编写一个简单的shell脚本,例如:
#!/bin/bash
mkdir "$1"
chmod 777 "$1"
Run Code Online (Sandbox Code Playgroud)
保存后,启用可执行标志,您可以运行它而不是mkdir和chmod:
./scriptname path/foldername
Run Code Online (Sandbox Code Playgroud)
然而,亚历克斯的答案要好得多,因为它产生了一个过程而不是三个过程.我不知道这个-m选项.
您可以使用以下命令创建目录并同时授予权限
mkdir -m777 path/foldername
Run Code Online (Sandbox Code Playgroud)
不要这样做: mkdir -m 777 -p a/b/c因为这只会设置777最后一个目录的权限,c; a 和 b 将使用 umask 的默认权限创建。
要创建具有权限的任何新目录777,mkdir -p请在覆盖 umask 的子 shell 中运行:
(umask u=rwx,g=rwx,o=rwx && mkdir -p a/b/c)
Run Code Online (Sandbox Code Playgroud)
请注意,如果 a、b 和 c 中的任何一个已经存在,这不会更改权限。
只是为了扩展和改善上述答案:
首先,我将检查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)
#
Run Code Online (Sandbox Code Playgroud)
现在,仅添加一些关于这些八进制权限的信息。创建目录时,“您的系统”将使用默认目录权限(适用于新目录(其值应为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
Run Code Online (Sandbox Code Playgroud)
我会得到烫发755两个yodirectory和yostuff,只777烫发了mastuffinyostuff。因此,看来,umask是所有的耳光yodirectory和yostuff......来解决这个问题,我们可以使用一个子shell:
( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
就是这样。yostuff,mastuffinyostuff和yodirectory的777个烫发。