我想在Linux中通过一个步骤(命令)改变一个文件夹及其所有子文件夹和文件的权限。
我已经试过下面的命令,但它只对提到的文件夹有效。
chmod 775 /opt/lampp/htdocs
有没有办法为/opt/lampp/htdocs
及其所有内容(包括子文件夹和文件)设置chmod 755
?
另外,将来如果我在htdocs
内创建一个新的文件夹或文件,如何才能将其权限自动设置为755
?
我也看了一下这个链接。
https://stackoverflow.com/questions/3740187/how-to-set-default-chmod-in-linux-terminal
其他答案都是正确的,因为chmod -R 755
将对树中的所有文件和子文件夹设置这些权限。
但你到底为什么要呢?
对于目录来说,这可能是有意义的,但是为什么要对所有的文件设置执行位呢?
我猜想你真正想做的是把目录设置为755,然后不要管文件,或者把它们设置为644。
为此,你可以使用find
命令。
例如,你可以使用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 {} \;
你可以使用-R
和chmod
来递归遍历所有文件和子文件夹。
你可能需要使用sudo,因为它取决于[LAMP][1]是否被当前用户或其他用户安装。
sudo chmod 755 -R /opt/lampp/htdocs
[1]: http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29
正确的递归命令是:{{{7550864}}。
sudo chmod 755 -R /opt/lampp/htdocs
-R
:
改变每个子文件夹,包括当前文件夹
你可以考虑[nik给出的这个答案][1]在超级用户上使用"一个chmod"。 来处理所有文件/文件夹。
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
这里有另一种方法可以将目录设置为775,文件设置为664。
find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \)
它可能看起来很长,但它非常酷,原因有三。
提供更好的控制如何处理文件与目录。 3.提供了更好的控制_文件_的处理方式与_目录_的处理方式。 这在使用特殊模式时很有用,比如粘性位,你可能想应用于目录而不是文件。
使用了直接从man
页面中提取的技术(见下文)。
请注意,我还没有确认这个解决方案和简单地使用两个查找命令(如Peter Mortensen的解决方案)之间的性能差异(如果有的话)。 然而,在手册中看到一个类似的例子是令人鼓舞的。
来自man find
页面的例子。
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 direc‐
tories into /root/suid.txt and large files into /root/big.txt.
干杯
chmod -R 755 directory_name
可以用,但如何将新文件也保留到755?
文件'的权限成为默认权限。
我想Adam问的是如何改变所有在/opt/lampp/htdocs
目录下操作的进程的umask值。
用户文件创建模式掩码(umask)用于确定新创建文件的文件权限。 它可以用来控制新文件的默认文件权限。
因此,如果你将使用某种ftp程序将文件上传到/opt/lampp/htdocs
,你需要配置你的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"。 第一种是 "找到 "文件,然后在找到的时候应用 "chmod"(如@WombleGoneBad所建议)。
find /opt/lampp/htdocs -type d -exec chmod 755 {} \;
第二种方法是用 "find "命令生成所有文件的列表,并将此列表提供给 "chmod "命令(如@lamgesh所建议)。
chmod 755 $(find /path/to/base/dir -type d)
只要 "find "命令返回的文件数量不多,这两个版本都能很好地工作。
第二种方案看起来很好,比第一种方案更易读。
如果文件数量多,第二种方案会返回错误。
Argument list too long.
。
所以我的建议是
chmod -R 755 /opt/lampp/htdocs
。如果你使用的文件数量非常多,使用find /opt/lampp/htdocs -type d -exec chmod 755 {} \\;
。
-type x
选项只搜索特定类型的文件,其中d用于查找目录,f用于文件,l用于链接。
使用chmod 755 $(find /path/to/base/dir -type d)
,否则使用
在任何情况下最好使用第一种