如何在Linux中一条命令中创建目录并赋予权限?
我需要创建许多带有完全权限777
的文件夹。
命令
mkdir path/foldername
chmod 777 path/foldername
我不喜欢用两个命令来创建并赋予权限。 我能用一个命令完成吗?
根据mkdir的手册...
mkdir -m 777 dirname
mkdir -p -m777 /tmp/foo/bar/baz
,您会发现创建的目录将根据当前umask设置其权限,除了最后一个目录将获得所需的模式。 - Tylla当目录已经存在时:
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 {} \;
。 - Pedro Trujilloinstall -d -m 0777 /your/dir
应该会给你想要的东西。请注意,每个用户都有权在该目录中编写、添加和删除文件。
chmod -R
呢? - Hi-Angel在我看来,在这种情况下最好使用install
命令。我试图让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数字表示法”(八进制)指定权限来创建目录,或者您可以采用另一种方式并使用a/您的umask。
顺便说一下:我之所以说“另一种方式”,是因为umask值实际上就是它听起来的样子——一个掩码,隐藏/删除权限,而不像chmod的数字八进制表示法那样“授予”它们。
您可以执行shell内置命令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)
#
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
。所以似乎只有yodirectory
和yostuff
上被施加了umask
...为了规避这个问题,我们可以使用子shell:
( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
这就是全部内容。对于yostuff、mastuffinyostuff和yodirectory,权限为777。#!/bin/bash
mkdir "$1"
chmod 777 "$1"
一旦保存并启用可执行标志,您可以运行它来代替mkdir和chmod:
./scriptname path/foldername
然而,alex的回答更好,因为它只生成一个进程而不是三个。我不知道-m
选项。
mkdir -m777 path/foldername
mkdir -m 777 -p a/b/c
,因为这只会将权限777
设置在最后一个目录"c"上,a和b将使用您的umask的默认权限创建。777
创建任何新目录,请在一个子shell中运行mkdir -p
并覆盖umask:(umask u=rwx,g=rwx,o=rwx && mkdir -p a/b/c)
mkdir temp; chmod 777 temp
是一行命令。你可以将“temp”作为一个变量,并将其保存为bash命令。这是你想要做的吗? - styfle