如何为创建的每个父目录创建具有指定权限位的嵌套目录?

如何为创建的每个父目录创建具有指定权限位的嵌套目录?

以下操作无法按预期工作,我试图了解这是否是一个错误,或者我的 Linux 机器中是否存在隐藏的配置,导致它无法使用正确的权限创建文件夹。作为最后的手段,我总是可以回退到逐个创建文件夹,但我希望不会发生这种情况。

这是我的做法:

mkdir -m777 /familytree
mkdir -m755 -p /familytree/great-grandparent/grandparent/parent/myself/

这是我得到的:

$ namei -m /familytree/great-grandparent/grandparent/parent/myself/

dr-xr-xr-x /
drwxrwxrwx familytree
drwx------ great-grandparent
drwx------ grandparent
drwx------ parent
drwxr-xr-x myself

以下是我的预期:

   $ namei -m /familytree/great-grandparent/grandparent/parent/myself/

dr-xr-xr-x /
drwxrwxrwx familytree
drwxr-xr-x great-grandparent
drwxr-xr-x grandparent
drwxr-xr-x parent
drwxr-xr-x myself

答案1

这取决于你的umask。在我的 Kubuntu 中我得到了不同的结果,可能是因为我的umask和你的不同。

以下应该可以工作(注意我使用相对路径,因此可以在任意目录中测试代码;cd首先到该目录):

mkdir -m777 familytree
( umask 022
  mkdir -p familytree/great-grandparent/grandparent/parent/myself/
)

(子壳的作用是保持umask主壳的完整性。)

结果:

drwxrwxrwx familytree
drwxr-xr-x great-grandparent
drwxr-xr-x grandparent
drwxr-xr-x parent
drwxr-xr-x myself

要了解umask作品如何这个答案

注意,我没有使用-m第二个mkdir。如果我使用它,我可以获得最终目录与“中间”目录不同的权限,类似于您获得的权限。不同之处在于现在您知道如何控制“中间”目录的权限。示例:

rm -r familytree
mkdir -m777 familytree
( umask 027
  mkdir -m700 -p familytree/great-grandparent/grandparent/parent/myself/
)

新结果:

drwxrwxrwx familytree
drwxr-x--- great-grandparent
drwxr-x--- grandparent
drwxr-x--- parent
drwx------ myself

相关内容