Chmod 未按预期工作

Chmod 未按预期工作

当我要像这样更改文件权限时

 $ sudo chmod a+x *.* 

出现此错误

 chmod: cannot access ‘*.*’: No such file or directory

当我想更改目录中每个文件的权限时

 $ sudo chmod a+x directory/* 

出现同样的错误

 chmod: cannot access ‘directory/*’: No such file or directory

当我在其他目录中尝试相同的命令时,它可以工作,但在这个目录 /var/www/html 下它不起作用,但即使当我运行时我将文件的权限文件逐个更改为 a+x

 ls

出现权限错误

 ls: cannot open directory .: Permission denied

答案1

Linux 中的文件扩展名没有什么特别的,它只是文件名的一部分。shell 的文件通配符适用于所有字符,*因此您可以使用chmod a+x *.

答案2

这个ls问题听起来像是你可能没有足够的目录权限。https://stackoverflow.com/a/15800917/3501748状态:目录需要设置执行权限才能查看其内容。

cd返回上一级,查看您刚刚进入的目录的权限。 sudo如果 root 对该文件夹没有任何权限,则不会授予您访问该文件夹的任何权限。也许sudo -u <username>会有所帮助。

如果您需要递归遍历起点下方的目录树,请使用chmod -R

答案3

首先,我想承认现有的答案:

  • 正如 UweBurger 所说,*在 Ubuntu 中使用通用通配符(或者,我相信,在 Unix 中也是如此)。(directory您的示例中的 是否可能是空的,从而导致错误chmod: cannot access ‘directory/*’: No such file or directory?)
  • 正如 northern-bradley 所建议的,可以使用R中的标志chmod使其递归遍历树,更改当前点下所有内容的权限。也就是说,chmod -R directory如果您缺乏权限,请使用 或sudo chmod -R directory(但是,在使用时请务必不要无意中更改系统文件的权限sudochmod;您自己的用户只是缺乏这样做的权限,因此第一个变体更安全)。

不过,我想补充一点,您可能不想以更改文件权限的方式更改目录权限。如官方文档,目录的读取 ( r) 权限意味着能够查看其内容(例如使用ls),写入 ( w) 权限允许用户在其中创建/删除文件,执行 ( x) 权限则允许访问cd目录内部。这里有一个很好的答案这里建议在递归应用新权限时区分文件和目录的方法。使用的变体xargs据称更快。您可能希望将r标志添加到以避免在不返回任何内容的xargs情况下出现错误,并且如果您需要权限,则应该对管道的两半都使用(再次强调,在输入为时要小心),因此这将是:findrootsudochmodroot

sudo find [path/to/dir] -type d -print0 | sudo xargs -0r chmod [desired-dir-permissions]

sudo find [path/to/dir] -type f -print0 | sudo xargs -0r chmod [所需文件权限]

可以在哪里[desired-*-permissions]给出明确地777) 或者使用字母(喜欢a+x)。

相关内容