30

我正在尝试递归更改“数据”目录的目录和子目录的权限并遇到以下错误..有人可以提供以下错误的输入吗?

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

2 回答 2

63

目录需要执行权限集才能查看其内容。

来自http://content.hccfl.edu/polllock/AUnix1/FilePermissions.htm

您可以这样考虑对目录的读取和执行:目录是数据文件,其中包含每个文件的两条信息,即文件名和它的 inode 编号。需要读取权限才能访问目录中的文件名。如果您已经知道文件的名称,则需要执行(也称为搜索)权限才能访问目录中文件的 inode。

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

你需要这样做:

$ chmod -R 0755 .

如果您只想关闭,更好的方法可能是使用字符串权限

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

您最好使用相对权限而不是绝对权限:

$ chmod -R go-w .

将删除组和其他的写入权限,但不会触及执行权限。

您也可以使用find仅设置目录或仅设置文件:

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

这只会触及目录,对所有目录设置读取和执行权限,并为所有者设置写入权限。这样,您就不会对文件本身设置执行权限。

于 2013-04-04T01:09:43.480 回答
0

我猜想,由于您正在使用递归,因此您正在尝试 CD 到一个没有执行权限的目录。

于 2013-04-04T01:11:38.463 回答