2093

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

我已经尝试过以下命令,但它仅适用于提到的文件夹:

chmod 775 /opt/lampp/htdocs

有没有办法设置它chmod 755/opt/lampp/htdocs所有内容,包括子文件夹和文件?

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

我也看过这个 Stack Overflow 问题:

如何在 Linux 终端中设置默认的“chmod”?

4

20 回答 20

3322

其他答案是正确的,因为这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 {} \;

一些解释:(感谢@tobbez

  • chmod 755 {}指定find对每个目录执行的命令
  • chmod 644 {}指定find对每个文件执行的命令
  • {}被路径替换
  • ;分号告诉find这是它应该执行的命令的结尾
  • \;分号被转义,否则它将由 shell 解释而不是find
于 2012-07-16T20:42:23.790 回答
850

检查 -R 选项

chmod -R <permissionsettings> <dirname>

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

man <command name>

所以在这种情况下:

man chmod
于 2010-09-18T02:36:12.820 回答
427

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

chmod -R a+rX *

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

于 2013-01-31T20:39:26.010 回答
175

您可以使用-Rwithchmod递归遍历所有文件和子文件夹。

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

sudo chmod -R 755 /opt/lampp/htdocs
于 2014-04-19T15:43:56.107 回答
91

正确的递归命令是:

sudo chmod -R 755 /opt/lampp/htdocs

-R:更改每个子文件夹,包括当前文件夹

于 2010-09-18T02:40:57.377 回答
88

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

chmod 755 /folder -R

并使用 umask 将默认设置为新文件夹/文件 cd /folder umask 755

于 2010-09-18T02:35:59.167 回答
59

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

于 2010-09-18T02:38:42.453 回答
32

您可能需要考虑nik在Super User上给出的答案,并对所有文件/文件夹使用“one chmod”,如下所示:

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
于 2013-02-27T06:42:05.860 回答
23

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

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

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

  1. 只扫描文件系统一次而不是两次。
  2. 更好地控制文件的处理方式与目录的处理方式。这在使用特殊模式时很有用,例如粘性位,您可能希望将其应用于目录而不是文件。
  3. 直接使用man页面外的技术(见下文)。

请注意,我尚未确认此解决方案与仅使用两个 find 命令(如 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 direct‐
tories into /root/suid.txt and large files into /root/big.txt.

干杯

于 2013-11-17T05:47:18.657 回答
21

采用:

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

但是,请注意这一点。如果您更改了错误文件/文件夹的权限,这真的会伤害您。

于 2010-09-18T02:37:58.303 回答
16

chmod -R 755 directory_name有效,但是您如何将新文件也保留到 755 呢?文件的权限成为默认权限。

于 2014-04-30T00:22:09.403 回答
12

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

chmod -R 755 /directory

是的,正如所有其他人所说,这样做时要小心。

于 2012-07-10T09:33:35.670 回答
11

您要确保适当的文件和目录是适当的 chmod-ed/permissions。对于您想要的所有目录

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

对于所有的图像、JavaScript、CSS、HTML……好吧,你不应该执行它们。所以使用

chmod 644 img/* js/* html/*

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

chmod 600 file
于 2014-01-12T04:03:46.843 回答
10

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

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

sudo chown -R username: foldername .*

注意:对于当前未保存的更改,可能需要先重新启动代码编辑器才能在不要求输入密码的情况下进行保存。

另外,请记住,您可以Tab在输入用户名和文件夹时按查看选项,以方便您自己操作。


或者简单地说:

sudo chmod -R 755 foldername

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

于 2020-11-19T03:44:01.160 回答
8

chmod找到文件并应用到它们有两个答案。

第一个是find文件并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.

所以我的建议是

  1. chmod -R 755 /opt/lampp/htdocs如果您想一次更改所有文件和目录的权限,请使用。
  2. 如果您使用find /opt/lampp/htdocs -type d -exec chmod 755 {} \;的文件数量非常大,请使用。该-type x选项仅搜索特定类型的文件,其中 d 用于查找目录,f 用于文件,l 用于链接。
  3. chmod 755 $(find /path/to/base/dir -type d)以其他方式使用
  4. 最好在任何情况下使用第一个
于 2013-07-29T10:47:25.487 回答
8

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

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

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

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

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

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

或者,您可以为所有用户设置一个 umask/etc/bashrc/etc/profile文件。

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

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

于 2014-01-07T11:39:20.287 回答
2

您可以使用以下命令更改权限:

sudo chmod go+rwx /opt/lampp/htdocs
于 2020-10-12T15:34:16.850 回答
1

这很简单。

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

于 2014-06-16T09:34:49.543 回答
0

对于已经创建的文件:

find . \( -type f -exec chmod g=r,o=r {} \; \) , \( -type d -exec chmod g=rx,o=rx {} \; \)

对于未来创建的文件:

sudo nano /etc/profile

并设置:

umask 022

常见的模式有:

  • 077: u=rw,g=,o=
  • 007: u=rw,g=rw,o=
  • 022: u=rw,g=r,o=r
  • 002: u=rw,g=rw,o=r
于 2020-11-10T19:07:47.230 回答
-1

采用:

sudo chmod -R a=-x,u=rwX,g=,o= folder

所有者 rw,其他人无权访问,并且目录带有 rwx。这将清除文件上现有的“x”。

符号 chmod 计算在Chmod 744中解释。

于 2021-01-31T06:23:02.100 回答