【问题标题】:chmod: cannot read directory `.': Permission denied [closed]chmod:无法读取目录“。”:权限被拒绝[关闭]
【发布时间】:2013-03-25 21:49:52
【问题描述】:

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

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

【问题讨论】:

  • 试试sudo chmod -R 0644 .
  • sudo !! 失败后。
  • @Blender: sudo chmod -R -644 . 将从当前目录及其下的所有目录中删除执行(搜索)权限——这不是一个好主意。
  • @KeithThompson - 为什么这不是一个好主意?
  • @Blender - 一旦我这样做了,我的 ls 就无法正常工作...ls:无法打开目录。:权限被拒绝

标签: unix ubuntu chmod


【解决方案1】:

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

来自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 {} \;

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

【讨论】:

  • 基本上我想删除目录和子目录中文件的执行权限,但保留directeis上的执行权限..我该怎么做?
  • 这几乎是一回事。使用find 中的-type f 标志仅返回文件和目录:find . -type f -exec ugo-x {} \;。那是使用符号名称(u=user g=group o=other.-x 表示删除执行权限)。这样,您就不会接触文件。您需要将执行权限添加回您首先从中删除它们的目录,以便find 可以读取其内容。
  • 在 cent os 7 中不工作
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2012-11-24
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多