如何递归更改文件和目录的权限?


65

我在本地计算机上使用apache / php / mysql安装了ubuntu。

我现在在/ var / www有一个目录-在其中有我正在进行的几个项目。我还使用开源(drupal,magento,sugarcrm)。

我面临的问题是更改终端的文件权限。有时我需要更改整个文件夹及其后续子文件夹和文件的权限。我必须单独使用

sudo chmod 777 foldername

我该如何递归执行此操作。

还有为什么我必须总是做777,我尝试了755的文件夹和644的文件,但这是行不通的。

Answers:


90

只需添加-R选项以递归方式更改文件的权限即可。一个示例,以递归方式添加所有者和组的读写权限foldername

chmod -R ug+rw foldername

权限将为664或775。

不建议将权限设置为777 。在Apache或您的编辑器中,您会遇到有关权限的错误,因为apache www-data与您使用的用户()不同。

如果您要写信/var/www,请将您自己添加到该www-data组中,并相应地设置umask + permissions。

  • 将您自己加入www-data群组:sudo adduser $USER www-data
  • 更改以下文件的所有权/var/wwwsudo chown -R www-data:www-data /var/www
  • 更改umask,以便Apache新建的文件也向该组授予写权限。添加umask 007/etc/apache2/envvars
  • 授予您自己(技术上为组www-data)写入权限:sudo chmod -R g+w /var/www

是的,我在错误的位置添加了r标志,我在chmod的o + w之后添加了它。
JohnMerlino 2014年

另外,如果您尝试使用chmod -r blablabla(小-r而不是-R),则可能最终会删除所有人的读取权限...
Cyril Duchon-Doris 2015年

1
按照这些说明进行操作之后,最好检查一下是否没有.htaccess文件具有针对Apache的写权限。find /var/www/ | grep .htaccess | xargs ls -l
reynoldsnlp

23

暴力破解:

sudo find foldername -exec chmod a+rwx {} ";"

什么不起作用?更加详细一些!

sudo find foldername -type d -exec chmod 755 {} ";"
sudo find foldername -type f -exec chmod 644 {} ";"

当您位于文件夹中时,删除“文件夹名称”
Enrique

4
...然后将其替换为。
djjeck 2014年

4

您什么都不需要777。最坏的情况是,您需要将某些文件和目录的所有者更改为“ www-data”用户。

sudo find /var/www -type d -print0 | xargs -0 chmod 755
sudo find /var/www -type f -print0 | xargs -0 chmod 644
sudo find /var/www/some/subset -print0 | xargs -0 chown www-data:www-data

如果您使用的是Lekensteyn的群组成员资格方法,请分别将上方的755更改为775,将644更改为664,然后强制群组粘性:

sudo find /var/www/some/subset -type d -print0 | xargs -0 chmod g+s


1

如果您想让所有文件对世界都可读(即,这只是一组静态的HTML文件/图像),请使用以下命令:

chmod -R a+r <base directory>

这将递归地遍历所有文件和子目录,并为其添加读取权限。

警告:请勿对可执行文件执行此操作!只有所有人都应该看到的文件。


您是在说“什么都不做chmod -R a+x”,还是“不要chmod -R a+r对可执行文件做”?
aleclarson

我修好了它。后来是真的。在允许其他人访问您创建的可执行文件时要小心。
瑞安·希灵顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.