在Linux中,如何在一个步骤中更改文件夹及其所有子文件夹和文件的权限?

How do I change permissions for a folder and all of its subfolders and files in one step in Linux?

我想在Linux的一个步骤(命令)中更改文件夹及其所有子文件夹和文件的权限。

我已经尝试过下面的命令,但它只适用于上述文件夹:

1
chmod 775 /opt/lampp/htdocs

有没有办法为/opt/lampp/htdocs及其所有内容(包括子文件夹和文件)设置chmod 755

另外,将来,如果我在htdocs中创建一个新的文件夹或文件,那么该文件夹或文件的权限如何自动设置为755

我也看过这个链接:

http://stackoverflow.com/questions/3740187/how-to-set-default-chmod-in-linux-terminal


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

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

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

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

将所有文件更改为644(-rw-r--r--):

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


检查-r选项

chmod -R

将来,您可以通过首先查看手册页节省大量时间:

1
man <command name>

所以在这种情况下:

1
man chmod


如果要将所有文件的权限设置为a+r,将所有目录设置为a+x,并通过完整的子目录树递归执行此操作,请使用:

1
chmod -R a+rX *

X(即大写X,不是小写X)被忽略的文件(除非它们已经对某人可执行),但用于目录。


可以将-Rchmod一起用于所有文件和子文件夹的递归遍历。

您可能需要sudo,因为它取决于当前用户或其他用户安装的灯:

1
sudo chmod 755 -R /opt/lampp/htdocs


要设置为所有子文件夹(递归),请使用-r

1
chmod 755 /folder -R

并使用umask将默认值设置为新文件夹/文件光盘/文件夹乌姆赛克755< /打击>


正确的递归命令是:

1
sudo chmod 755 -R /opt/lampp/htdocs

-R:更改包括当前文件夹在内的每个子文件夹


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


您可能需要考虑nik on superuser给出的这个答案,并对所有文件/文件夹使用"一个chmod",如下所示:

1
2
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)


用途:

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

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


这是另一种将目录设置为775,文件设置为664的方法。

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

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

  • 只扫描文件系统一次,而不是两次。
  • 提供更好的文件处理方式和目录处理方式的控制。这在处理特殊模式(如粘性位)时很有用,您可能希望将其应用于目录而不是文件。
  • 直接使用man页中的技术(见下文)。
  • 注意,我还没有确认这个解决方案和使用两个find命令(如彼得·莫特森的解决方案)之间的性能差异(如果有)。然而,在手册中看到类似的例子是令人鼓舞的。

    man find页示例:

    1
    2
    3
    4
    5
    6
    7
    8
    find / \
    \( -perm -4000 -fprintf /root/suid.txt %#m %u %p
     \) , \
    \( -size +100M -fprintf /root/big.txt %-10s %p
     \)

    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?文件的权限将成为默认权限。


    您要确保适当的文件和目录是chmod ed/这些文件和目录的权限是适当的。对于您想要的所有目录

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

    对于所有的图片,javascript,css,html…你不应该执行它们。所以用

    1
    chmod 644 img/* js/* html/*

    但是对于所有的逻辑代码(例如php代码),您应该设置权限,以便用户看不到该代码:

    1
    chmod 600 file

    对于Mac OS X 10.7(Lion),它是:

    1
    chmod -R 755 /directory

    是的,就像其他人说的,做这件事时要小心。


    我认为Adam是在询问如何更改与/opt/lampp/htdocs目录上操作相关的所有进程的umask值。

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

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

    如果文件/目录是由PHP创建的,则需要修改PHP代码。

    1
    2
    3
    4
    <?php
    umask(0022);
    // other code
    ?>

    如果要从bash会话创建新的文件/文件夹,可以在shell配置文件~/.bashrc中设置umask值。也可以在/etc/bashrc/etc/profile文件中为所有用户设置umask。将以下内容添加到文件:乌姆赛克022

    1
    2
    3
    4
    5
    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

    若要更改已创建文件的权限,可以使用"查找"。希望这有帮助。


    找到文件并将chmod应用到文件中有两个答案。第一个是find文件,并应用chmod,正如它发现的那样(如@womblegonebad建议的那样)。

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

    第二种解决方案是使用find命令生成所有文件的列表,并将该列表提供给chmod命令(如@lamgesh建议的那样)。

    1
    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)
  • 最好在任何情况下使用第一个

  • 这很简单。

    在终端中,转到文件管理器。示例:sudo nemo。转到/opt/,然后单击属性→权限。然后是其他。最后,更改为创建和删除,文件访问权限为读写,然后单击按钮应用…工作。