如何更改文件夹及其所有子文件夹和文件的权限?

这仅适用于/opt/lampp/htdocs文件夹,而不适用于其内容:

chmod 775 /opt/lampp/htdocs

如何为/opt/lampp/htdocs文件夹的所有当前内容设置chmod 755,以及将来自动为其下创建的新文件夹/文件设置chmod?


当前回答

这里有另一种方法可以将目录设置为775,将文件设置为664。

find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \)

它可能看起来很长,但很酷,原因有三:

仅扫描文件系统一次而不是两次。提供对文件处理方式与目录处理方式的更好控制。这在处理特殊模式(如粘滞位)时非常有用,您可能希望将其应用于目录而不是文件。直接使用手册页中的技术(见下文)。

注意,我还没有确认此解决方案与简单使用两个find命令(如Peter Mortensen的解决方案)之间的性能差异(如果有的话)。然而,在手册中看到类似的例子是令人鼓舞的。

手册查找页面示例:

find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)

Traverse the filesystem just once, listing setuid files and direct‐
tories into /root/suid.txt and large files into /root/big.txt.

其他回答

我认为Adam正在询问如何更改所有试图在/opt/lampp/htdoc目录上操作的进程的umask值。

用户文件创建模式掩码(umask)用于确定新创建文件的文件权限。它可用于控制新文件的默认文件权限。

因此,如果您将使用某种FTP程序将文件上载到/opt/lampp/htdoc,则需要配置FTP服务器以使用所需的umask。

例如,如果文件/目录需要由PHP创建,则需要修改PHP代码:

<?php
    umask(0022);
    // Other code
?>

如果要从Bash会话创建新文件/文件夹,可以在shell配置文件~/.bashrc文件中设置umask值。

或者可以在/etc/bashrc或/etc/profile文件中为所有用户设置umask。

将以下内容添加到文件中:

umask 022

Sample umask Values and File Creation Permissions
If umask value set to    User permission     Group permission     Others permission
000                            all                 all                   all
007                            all                 all                   none
027                            all             read / execute               none

要更改已创建文件的权限,可以使用find。

chmod 755-R/opt/lampp/htdocs将递归设置权限。无法仅在设置权限后创建的目录中自动设置文件的权限,但可以通过设置umask 022来更改系统范围内的默认文件权限。

对于仍在权限问题上挣扎的任何人,请导航到一个目录级别的cd。。从项目的根目录中,将自己(用户)添加到目录中,并允许编辑其中的所有内容(在macOS上测试)。

为此,您可以运行以下命令(首选):

sudo chown -R username: foldername .*

注意:对于当前未保存的更改,可能需要首先重新启动代码编辑器,以便能够保存而无需询问密码。

此外,请记住,您可以在键入用户名和文件夹时按Tab键查看选项,以使自己更方便。


或者简单地:

sudo chmod -R 755 foldername

但是如上所述,您需要小心使用第二种方法。

Use:

sudo chmod 755 -R /whatever/your/directory/is

但是,要小心。如果您更改了错误文件/文件夹的权限,这确实会伤害您。

其他答案是正确的,因为chmod-R 755将为树中的所有文件和子文件夹设置这些权限。但你到底为什么要这样做?这可能对目录有意义,但为什么要在所有文件上设置执行位?

我怀疑您真正想做的是将目录设置为755,或者将文件单独保存,或者将它们设置为644。为此,可以使用find命令。例如:

要将所有目录更改为755(drwxr-xr-x):

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

要将所有文件更改为644(-rw-r-r-),请执行以下操作:

find /opt/lampp/htdocs -type f -exec chmod 644 {} \;

一些splainin:(谢谢@tobez)

chmod 755{}指定find将为每个目录执行的命令chmod 644{}指定find将为每个文件执行的命令{}被路径替换; 分号告诉find它应该执行的命令到此结束\; 分号被转义,否则将由shell而不是find解释