我正在尝试在现有目录树下创建一个子目录。我想知道是否只有我要创建子目录的目录的权限重要,或者父目录也会对创建目录的权限产生一些影响?
我将以编程方式执行此操作,因此我需要确保我已经涵盖了广泛的场景。
答案1
是的,它们很重要。要创建目录,您需要能够写入其父目录。创建目录就像创建文件一样(毕竟,一切都是文件)所以你需要对父级的写访问权限。此外,您需要能够访问父目录,这意味着您需要对树中的所有目录执行访问:
$ sudo tree -pgu
.
└── [drwxr-xr-x terdon terdon] dir1
└── [drwx------ bob bob ] dir2
└── [drwxr-xr-x terdon terdon] dir3
在上面的示例中,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
如果我给自己执行访问权限dir2
,我将能够移动到dir2
和dir2/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
正如您在上面看到的,虽然我可以进入该目录,但我无法列出其内容,因为我没有对其的读取访问权限,并且我无法在那里创建任何内容,因为我没有写入访问权限。
因此,为了能够在目录中创建新文件或目录,您需要:
对目标目录的每个父目录执行权限。
目标目录的执行和写入权限。