将目录中所有文件和文件夹的权限更改为644/755

244

如何使用chmod命令在Linux终端中将所有文件更改为644,所有文件夹更改为755?


6
如果有人(@animuson)能够友好地解释一下,为什么这个chmod问题不属于该网站的主题范畴,而其他所有问题(共14,438个结果)都属于…… - hugo der hungrige
1
有点晚了,但是这个命令也可以一次完成被接受的答案:chmod -R a=r,a+X,u+w /your/path - Kladskull
好问题,不应该被关闭。这些问题应该移动到 StackOverflow 的子站点而不是关闭。 - Erik Friesen
1
@hugoderhungrige的意思是去在服务器网站上询问,比如:http://superuser.com :P 但这个问题在这里帮到了我,谢谢。 - emotality
这个问题在Google上排名靠前,所以应该回答它,而不是关闭它。 - kenorb
4
简短回答:chmod -R u+rwX,go+rX,go-w /foo。该命令将递归修改/foo目录及其内容的权限。其中,"u+rwX"将所有者(user)的读写权限设置为可读可写可执行,其中大写的X表示如果文件是可执行文件或目录,则自动添加执行权限;"go+rX"将组(group)和其他人(others)的读权限设置为可读,同时同样包括上述针对可执行文件和目录的规则;"go-w"将组和其他人的写权限设置为不可写入。 - kenorb
8个回答

410

一种方法是使用find:

对于目录

find /desired_location -type d -print0 | xargs -0 chmod 0755

对于文件

find /desired_location -type f -print0 | xargs -0 chmod 0644

33
对于像我这样的普通用户,这并不起作用。相反,请尝试使用以下命令:对于文件,使用sudo find /your/location -type f -exec chmod 644 {} \;;对于目录,使用sudo find /your/location -type d -exec chmod 755 {} \; - NineCattoRules
我运行了原始解决方案,它弄乱了我的文件和目录权限。要小心!评论中的解决方案可行,谢谢! - Mahsa Mortazavi
6
为什么使用chmod -R a=r,u+w,a+X /foo比它更好? - Peter Krauss
执行失败,显示“无法执行/bin/chmod:参数列表太长”。 - vladkras
如果我只想在指定desired_location时将子文件夹chmod为755怎么办?因为这也会使父文件夹变为755。 - MaXi32
我认为你可以将这两种方法结合起来:sudo chmod -R 755 "/your/location"; sudo find "/your/location" -type f -exec chmod 644 {} \;。(并不会有太大的区别) - WoodrowShigeru

130

最简单的方法是这样做:

chmod -R u+rwX,go+rX,go-w /path/to/dir

这基本意味着:

通过给出以下内容来递归地更改文件模式:

  • user:拥有read、write和eXecute权限,
  • group和other用户:拥有read和eXecute权限,但没有-write权限。

请注意,X将使目录可执行,但不会使文件可执行,除非它已经是可搜索/可执行的。

+X - 如果任何人可以搜索/执行,则使目录或文件对每个人都可搜索/执行。

有关更多详细信息,请查看man chmod

另请参见:如何递归地修改所有目录的权限而排除所有文件?(SU)


9
将/foo目录下所有文件和子目录的权限设置为所有用户可读,所有者可写,所有用户可执行。命令为"chmod -R a=r,u+w,a+X /foo"。 - John Allsup
16
这个回答虽然很好,但有一个问题:运行命令之前可以执行的文件在运行命令之后仍然是可执行的。请参考@JohnAllsup的回答,他提供了一个没有这个缺陷的命令。 - mzuther
9
除非这个问题实际上是你的特性。 - RiaD

72

我能想到的最短的是:

chmod -R a=r,u+w,a+X /foo

这个工具可以在GNU/Linux上使用,我相信它通常也可以在Posix上使用(从我的阅读中得知: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html)。

它的功能是:

  1. 将文件/目录设置为r__r__r__(0444)
  2. 添加所有者的写权限,以获取rw_r__r__(0644)
  3. 如果是目录,则对所有用户设置执行权限(对于目录为0755,对于文件为0644)。

重要的是,步骤1的权限清除所有执行位,因此步骤3仅为目录添加执行位(从不对文件)。此外,这三个步骤都发生在进入目录之前(因此这与例如...不等价)。

chmod -R a=r /foo
chmod -R u+w /foo
chmod -R a+X /foo

因为a=r将从目录中移除x, 所以chmod无法递归访问目录。


2
太棒了!帮助了我很多。 - Jannie Theunissen

49

https://help.directadmin.com/item.php?id=589上写道:

如果您需要快速将public_html目录设置为755,文件设置为644,则可以使用以下方式:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

我测试过了,它可行!


1
救命稻草!感谢您提供了这个干净的解决方案来解决这个问题!当我需要修复WordPress安装的权限问题时,它对我很有用! - twknab
1
在目录内进行调整效果很好。 - Christian Berendt

25

我最容易记住的是两个操作:

chmod -R 644 dirName
chmod -R +X dirName

+X 只影响目录。


6
最简单、更安全。 - Marco Marsala

9
这对我有用:

这对我有用:

find /A -type d -exec chmod 0755 {} \;
find /A -type f -exec chmod 0644 {} \;

4
注意:这些命令无法处理文件或目录名称中包含空格的情况。而被接受的答案中的命令可以处理含有空格的文件或目录。 - Chad Nouis
1
只有当{}没有被引号包围时,这个警告才适用...因此,没有理由去尝试print0和xargs -0,以下命令就足够了: find /A -type X -exec chmod Y '{}' \; - Michael Stumpfl

6

使用以下方法一次完成两个任务:

find -type f ... -o -type d ...

就是说,找到类型为f或d的文件,并对文件执行第一个...操作,对目录执行第二个...操作。具体来说:

find -type f -exec chmod --changes 644 {} + -o -type d -exec chmod --changes 755 {} +

如果你想让它在后台默默地工作,可以省略--changes


-11

这也可以工作:

chmod -R 755 *  // All files and folders to 755.

chmod -R 644 *.*  // All files will be 644.

6
不要这么做!它会影响整个服务器! - T.Todua

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接