
请不要认为这是重复的。我在目录 /tmp/test/ 中以 root 身份创建了一个文件夹以及一些子文件夹。我已将所有用户和组(包括 root)的读写权限更改为 root。
$ sudo chmod -R 666 /tmp/test/
在发布时
$ ls -l /tmp/test/ ls: cannot access '/tmp/test/db': Permission denied ls: cannot access '/tmp/test/sp': Permission denied total 0 d????????? ? ? ? ? ? db d????????? ? ? ? ? ? sp
我得到了这样的信息,这里我无法创建新文件或目录。
$ printf 'test' >/tmp/test/sp/test
bash:/tmp/test/sp/test:权限被拒绝 这听起来让我很困惑。
答案1
目录需要可执行标志,因此请尝试sudo chmod -R 776 /tmp/test
。
Linux/Unix 需要执行位,以便用户进入目录并访问其内容,包括列出其中的内容。目录执行标志的行为与文件的读取标志不同。
但是其中的文件可以666
。
答案2
目录权限与标准文件权限略有不同。目录权限位不像文件那样具有读/写/执行权限,而是如下:
4 (r--)
:可以显示目录的内容(ls
)
2 (-w-)
:可以修改目录的内容(创建/删除/重命名)
1 (--x)
:可以访问与cd
或类似。
注意,对于目录,w
权限不会生效,x
除非还放。
在您的情况下,您的权限被设置为位 6(rw-
),这具有以下效果:
- 您可以看到给定文件夹的内容
- 您无法查看该文件夹的元数据
- 您无权
cd
访问该文件夹或任何子文件夹 - 您无法编辑元数据(因为
x
未获授权) - 您无权打开目录树此部分内的任何文件
要修复此问题,只需将该位重新添加x
到文件中:
chmod a+x /path/to/file
这也是为什么默认文件夹权限为0755
或0775
而文件往往为0644
或 的原因0664
:与文件不同,文件夹如果没有 实际上是无用的x
。