我正在尝试递归更改"data"目录下的目录和子目录的权限,但遇到以下错误...有人可以提供有关以下错误的输入吗?
<username:/local/mnt/workspace/data>chmod -R 0644 .
chmod: cannot read directory `.': Permission denied
为了查看目录中的内容,需要设置执行权限。
参考自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 {} \;
这只会涉及文件夹,设置所有文件夹的读和执行权限,并为所有者设置写权限。这样,您不会在文件本身上设置执行权限。
find
中使用 -type f
标志只返回文件并跳过目录:find . -type f -exec ugo-x {} \;
。这里使用符号名称(u=用户 g=组 o=其他,-x 表示删除执行权限)。这样,您就不会触及文件。您需要先将执行权限添加回从中删除它们的目录,以便 find
可以读取其内容。 - David W.
sudo chmod -R 0644 .
。 - Blendersudo !!
。 - alexsudo chmod -R -644 .
会从当前目录及其所有子目录中删除执行(搜索)权限——这不是一个好主意。 - Keith Thompson