如何更改文件夹及其所有子文件夹和文件的权限?
这仅适用于/opt/lampp/htdocs文件夹,而不适用于其内容:
chmod 775 /opt/lampp/htdocs
如何为/opt/lampp/htdocs文件夹的所有当前内容设置chmod 755,以及将来自动为其下创建的新文件夹/文件设置chmod?
如何更改文件夹及其所有子文件夹和文件的权限?
这仅适用于/opt/lampp/htdocs文件夹,而不适用于其内容:
chmod 775 /opt/lampp/htdocs
如何为/opt/lampp/htdocs文件夹的所有当前内容设置chmod 755,以及将来自动为其下创建的新文件夹/文件设置chmod?
当前回答
正确的递归命令是:
sudo chmod -R 755 /opt/lampp/htdocs
-R: 更改每个子文件夹,包括当前文件夹
其他回答
chmod 755-R/opt/lampp/htdocs将递归设置权限。无法仅在设置权限后创建的目录中自动设置文件的权限,但可以通过设置umask 022来更改系统范围内的默认文件权限。
我认为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-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解释
这里有另一种方法可以将目录设置为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.
查找文件并对其应用chmod有两种答案。
第一个方法是找到文件,并根据找到的文件应用chmod(正如@WombleGoneBad所建议的那样)。
find /opt/lampp/htdocs -type d -exec chmod 755 {} \;
第二种解决方案是使用find命令生成所有文件的列表,并将该列表提供给chmod命令(如@lamgesh所建议的)。
chmod 755 $(find /path/to/base/dir -type d)
只要find命令返回的文件数量很少,这两个版本都能很好地工作。第二种解决方案看起来很好看,比第一种更易读。如果有大量文件,第二个解决方案将返回错误:参数列表太长。
所以我的建议是
如果要同时更改所有文件和目录的权限,请使用chmod-R 755/opt/lampp/htdocs。使用find/opt/lamp/htdocs-type d-exec chmod 755{}\;如果您使用的文件数量非常大。-type x选项仅搜索特定类型的文件,其中d用于查找目录,f用于文件,l用于链接。否则使用chmod 755$(find/path/to/base/dir-type d)在任何情况下都最好使用第一个