当我要像这样更改文件权限时
$ 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
(但是,在使用时请务必不要无意中更改系统文件的权限sudo
到chmod
;您自己的用户只是缺乏这样做的权限,因此第一个变体更安全)。
不过,我想补充一点,您可能不想以更改文件权限的方式更改目录权限。如官方文档,目录的读取 ( r
) 权限意味着能够查看其内容(例如使用ls
),写入 ( w
) 权限允许用户在其中创建/删除文件,执行 ( x
) 权限则允许访问cd
目录内部。这里有一个很好的答案这里建议在递归应用新权限时区分文件和目录的方法。使用的变体xargs
是据称更快。您可能希望将r
标志添加到以避免在不返回任何内容的xargs
情况下出现错误,并且如果您需要权限,则应该对管道的两半都使用(再次强调,在输入为时要小心),因此这将是:find
root
sudo
chmod
root
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 [所需文件权限]