创建目录所需的权限

sad*_*ali 4 filesystems permissions files

我正在尝试在现有目录树下创建一个子目录。我想知道只有我将要创建子目录的目录的权限还是父目录也会对创建目录的权限产生一些影响?

我将以编程方式执行此操作,因此我需要确保我已经涵盖了广泛的场景。

ter*_*don 9

是的,它们很重要。要创建目录,您需要能够写入其父目录。创建目录就像创建文件(毕竟,一切都是文件),因此您需要对父目录进行写访问。此外,您需要能够访问父目录,这意味着您需要对树中的所有目录进行执行访问:

$ sudo tree -pgu 
.
??? [drwxr-xr-x terdon terdon]  dir1
    ??? [drwx------ bob      bob     ]  dir2
        ??? [drwxr-xr-x terdon terdon]  dir3
Run Code Online (Sandbox Code Playgroud)

    

在上面的例子中,dir2由 拥有bob。这意味着我不能cd进入它,我也不能cd进入它的子目录dir3

$ cd dir1/dir2/
bash: cd: dir1/dir2/: Permission denied
$ cd dir1/dir2/dir3
bash: cd: dir1/dir2/dir3: Permission denied
Run Code Online (Sandbox Code Playgroud)

    

如果我给自己执行访问权限dir2,我将能够同时访问dir2dir2/dir3,但我仍然无权在以下位置创建文件/目录dir2

$ sudo tree -pgu 
.
??? [drwxr-xr-x terdon terdon]  dir1
    ??? [drwx--x--x bob      bob     ]  dir2
        ??? [drwxr-xr-x terdon terdon]  dir3

$ cd dir1/dir2/
$ ls
ls: cannot open directory '.': Permission denied
$ touch file
touch: cannot touch 'file': Permission denied
Run Code Online (Sandbox Code Playgroud)

正如你在上面看到的,虽然我可以进入目录,但我不能列出它的内容,因为我没有读访问权限,我不能在那里创建任何东西,因为我没有写访问权限。 

因此,为了能够在您需要的目录中创建新文件或目录:

  • 对目标目录的每个父目录执行权限。

  • 目标目录的执行和写入权限。