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

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

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

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

sudo chmod 777 foldername 

我怎么能递归地做到这一点。

另外,为什么我必须总是这样做777 ,我尝试755用于文件夹, 644用于文件,但这不起作用。

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

 chmod -R ug+rw foldername 

权限将是664或775。

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

如果要写入/var/www ,请将自己添加到www-data组并相应地设置umask +权限。

  • 将自己添加到www-data组: sudo adduser $USER www-data
  • 更改/var/www文件的所有权: sudo chown -R www-data:www-data /var/www
  • 更改umask,因此Apache新创建的文件也授予对组的写入权限。 将umask 007添加到/etc/apache2/envvars
  • 授予自己(技术上,组www-data )写权限: sudo chmod -R g+w /var/www

暴力破解:

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

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

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

任何事情都不需要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 

您可以更改Nautilus上的子文件夹和文件。 如下图所示。 为了在按钮上设置权限,您可以在Ubuntu Tweak上启用该选项。

在此处输入图像描述

如果你想让你的所有文件都可以被世界读取(例如,它只是一组静态的HTML文件/图像),那么使用这个命令:

 chmod -R a+r  

这将以递归方式遍历所有文件和子目录,并为它们添加读取权限。

警告 :不要对执行的代码执行此操作! 只有每个人都应该看到的文件。