chmod命令:无法读取目录“。”:权限被拒绝。

31

我正在尝试递归更改"data"目录下的目录和子目录的权限,但遇到以下错误...有人可以提供有关以下错误的输入吗?

<username:/local/mnt/workspace/data>chmod -R 0644 .
chmod: cannot read directory `.': Permission denied

尝试使用 sudo chmod -R 0644 . - Blender
在失败后输入 sudo !! - alex
1
@Blender:sudo chmod -R -644 .会从当前目录及其所有子目录中删除执行(搜索)权限——这不是一个好主意。 - Keith Thompson
@KeithThompson - 为什么这不是一个好主意? - carte blanche
@Blender - 我刚做完这个,我的ls命令就不能用了... ls: 无法打开目录.: 权限被拒绝 - carte blanche
如果您在目录上没有执行/搜索权限,则无法访问该目录下的任何内容。尝试使用“chmod +x”命令来恢复执行/搜索权限。 - Keith Thompson
2个回答

67

为了查看目录中的内容,需要设置执行权限。

参考自http://content.hccfl.edu/pollock/AUnix1/FilePermissions.htm

 

可以这样想,对于目录,读取和执行权限的作用是: 目录是保存每个文件名称及其 inode 号码的数据文件。需要读取权限才能访问目录中的文件名称。如果你已知文件的名称,需要执行(即搜索)权限才能访问目录中文件的 inode。

当您将目录权限更改为 644 后,尽管您可以读取该目录以查看其是否存在,但无法阅读该目录中的文件。

您需要执行以下操作:

$ chmod -R 0755 .

如果你只想关闭某个功能,更好的方法可能是使用字符串权限。

否则,你可以看到目录,但无法访问该目录中的信息。

相对权限可能比绝对权限更适合你:

$ chmod -R go-w .

将从组和其他用户中删除写权限,但不会影响执行权限。

您还可以仅设置目录或仅设置文件,使用find命令:

$ find . -type d -exec chmod 755 {} \;

这只会涉及文件夹,设置所有文件夹的读和执行权限,并为所有者设置写权限。这样,您不会在文件本身上设置执行权限。


基本上,我想在目录和子目录中删除文件的执行权限,但保留目录的执行权限。我该怎么做? - carte blanche
1
基本上是一样的。在 find 中使用 -type f 标志只返回文件并跳过目录:find . -type f -exec ugo-x {} \;。这里使用符号名称(u=用户 g=组 o=其他,-x 表示删除执行权限)。这样,您就不会触及文件。您需要先将执行权限添加回从中删除它们的目录,以便 find 可以读取其内容。 - David W.
在CentOS 7中无法工作。 - Pradeep

0
我猜测你正在尝试进入一个没有你执行权限的目录,因为你正在使用递归。

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