正确使用mkdir -m -p和chown的方法

44

我想使用Bash脚本创建一个目录,并同时将其模式设置为00755

mkdir -p -m=00755 "/dir/dir2"

这是它们一起使用的正确方式吗?我创建它们的同时是否还可以添加chown命令到同一行?

3个回答

99

它大概是这样的:

install -d -m 0755 -o someuser -g somegroup /dir/dir2

谢谢,这就是我要找的。是否可以将父目录“/dir/”与“/dir2/”不同,而是具有相同的所有者和组? - jquery
4
你可能需要在命令行中同时输入两个目录名称,例如:install -d ... /dir /dir/dir2 - Ignacio Vazquez-Abrams
我尝试使用install -d -m 0755 -o 1000 -g 1000 /创建/dir目录时出现了以下错误:install: cannot change owner and permissions of ‘/dir’: No such file or directory。我原以为在同一条命令中可以创建一个目录并更改其所有者,但似乎不是这样? - Sean McCarthy
我已经厌倦了mkdir后面再跟着chown - Joe
2
@SeanMcCarthy 你可能需要使用 sudo。由于所有者正在更改,该命令需要它。 - mbomb007

11

如果您想在创建过程中设置所有者,可以简单地冒充这个用户,例如使用sudo

sudo -uTHE_USER mkdir -p -m=00755 "/dir/dir2"

这样做的好处是在创建和更改所有权之间没有时间差,否则如果被利用可能会对系统造成危害。


10
如果您想在THE_USER没有写入权限的目录下创建一个归THE_USER所有的目录,则这种方法行不通。 - Keith Thompson
你在问题中没有提到,但你是对的。我会将操作分成两个单独的创建步骤。 - hek2mgl
要明确的是,这不是我的问题,我也不知道原帖作者是否需要那个功能。 - Keith Thompson

0

是的,那应该可以工作。至于 chown,只需遵循命令 ' && chown... '。&& 类似于 ;,但下一个命令仅在前一个命令成功退出(0)时才执行。


1
完全不具备原子性——这意味着在某个时间点上,目录的所有者是错误的用户。虽然短期内很难解决这个问题,除非采用@hek2mgl提供的方法,但如果初始用户是不受信任的进程无法访问的用户,那么它并不一定会造成损害。我需要查看install的实现才能确定是否存在相同的问题。 - Charles Duffy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接