如何更改文件夹及其子文件夹/文件的权限?[已结束]

How do I change permissions for a folder and its subfolders/files? [closed]

提问人:Adam Halasz 提问时间:9/18/2010 最后编辑:Henry EckerAdam Halasz 更新时间:12/19/2022 访问量:5082992

问:


这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释该问题可能在哪里得到回答。

11个月前关闭。

锁定。这个问题及其答案被锁定,因为这个问题偏离了主题,但具有历史意义。它目前不接受新的答案或互动。

如何更改文件夹及其所有子文件夹和文件的权限?

这仅适用于文件夹,而不适用于其内容:/opt/lampp/htdocs

chmod 775 /opt/lampp/htdocs

如何为文件夹的所有当前内容设置,以及将来自动设置在其下创建的新文件夹/文件?chmod 755/opt/lampp/htdocs

Linux 权限 目录 chmod

评论

4赞 HelloGoodbye 1/20/2016
你是打算写的还是真的应该写?chmod 75 /opt/lampp/htdocschmod 755 /opt/lampp/htdocs
9赞 timelmer 5/2/2018
@ArthurDent,因为这个问题(虽然完全有效且有用)更适合以系统为中心的 SE 站点,例如 SuperUser 或 ServerFault。它与编程没有明确关系。
38赞 Arthur Dent 5/2/2018
@timelmer 当然,但我再问一遍,为什么是“permissions”、“folder”和“cmod”标签?什么时候会“明确”使用 cmod 进行编程?
4赞 Joffrey 8/1/2018
@timelmer 这个问题难道不是关于 bash 编程吗?
11赞 timelmer 8/3/2018
如果你想变得非常挑剔,Bash 实际上是一种脚本语言,但 php 也是如此,SO 似乎并不介意。

答:

90赞 Topera 9/18/2010 #1

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

chmod 755 /folder -R

评论

4赞 Patrick Mutwiri 10/28/2015
这会将 all 设置为 755,包括文件。!
875赞 Steve Robillard 9/18/2010 #2

选中 -R 选项

chmod -R <permissionsettings> <dirname>

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

man <command name>

所以在这种情况下:

man chmod

评论

38赞 Steve Robillard 9/18/2010
它代表手册页,是一个 Linux 命令,显示命令的手册页(大多数 Linux 命令都有一个手册页)。试试 man ls 或 man man。
9赞 Einar Ólafsson 1/25/2012
这在Mac OS X的终端中对我不起作用。在那里,我做了“chmod -R <permissionsettings> <dirname>*”,它起作用了。
0赞 ϹοδεMεδιϲ 4/24/2016
@SteveRobillard 不过,解决方案的一个问题是,当涉及到/执行权限时,当您正在做;你不想不小心做一个直接不能。x-xcd
22赞 Nate Starner 9/18/2010 #3

用:

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

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

59赞 sleepynate 9/18/2010 #4

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

评论

11赞 Scott Prive 6/3/2015
sleepynate的答案是唯一正确的答案。海报问了两个问题:1)如何修复文件和文件夹的权限,以及2)如何更改默认值(即“未来”文件)。正如 nate 所说,第一个是“chmod”,第二个是“umask”。我还要补充一点,没有办法在 1 个目录上更改 ummask......Umask 是每个用户的“全有或全无”。但是,没有什么能阻止您创建一个与您共享组的新用户,以便您只需“sudo -u someuser [创建文件]”。这有点跳出框框思考,但这是一个很好的解决方法。
0赞 Sebastian Schlicht 7/30/2015
我认为你是对的,但不能成为许多情况的解决方案,或者它只能与 NTFS-3G 一起使用吗?inherit
0赞 Jia Gao 11/2/2018
如果没有授予文件夹权限,将来可能会创建文件夹,可能无法将文件夹复制,例如从其他地方(如PC)复制到此目标目录(在服务器上),因为它将尝试在目标目录中创建一个新文件夹,其名称您无权这样做。就像我一样,我只是使用.myforldermyfolderrootchown -R username:usergroup /directory
93赞 Pramendra Gupta 9/18/2010 #5

正确的递归命令是:

sudo chmod -R 755 /opt/lampp/htdocs

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

评论

1赞 shareef 2/7/2017
嗨,你确定当前文件夹,尽管路径,你是一个?
13赞 wmartin 7/10/2012 #6

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

chmod -R 755 /directory

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

3421赞 WombleGoneBad 7/17/2012 #7

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

评论

29赞 FlavorScape 6/28/2013
“但为什么要在所有文件上设置执行位”为什么不呢?我是 Ubuntu/Linux 的新手...
15赞 Alexandr Kurilin 7/26/2013
@FlavorScape Womble 专门在 find 返回的目录上设置执行位。对目录的执行权限允许用户类列出该目录的内容并将 cd 放入其中。一般来说,你希望一个目录上有 r 和 x,以便你能够访问它,即使可能存在一些奇怪的边缘情况,你只设置一个或另一个。有关详细信息,请参阅本指南:nixsrv.com/llthw/ex23
30赞 JGarrido 1/9/2014
除了 sleepynate 之外,每个回复都忽略了他关于设置未来创建的文件/文件夹权限的问题。
3赞 Goose 5/18/2016
为此,我必须让它工作。希望这对某人有所帮助。/path/to/directory/*
3赞 sun 9/1/2016
应至少将占位符换行到单引号中,以便文件名中可能存在的空格不会导致多个参数;即:— ...当使用单引号作为占位符时,更容易记住用单引号转义分号的可能性;即:-exec chmod 755 '{}' \;-exec chmod 755 '{}' ';'
436赞 Pete 2/1/2013 #8

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

chmod -R a+rX *

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

评论

31赞 Aaron Adams 4/4/2013
很好的答案。请注意,* 不会匹配隐藏文件(名称以点开头)。那么,使用 .(对于当前目录)。
10赞 Benoit Duffez 1/30/2014
如果他们已经拥有文件,则不会将其删除。x
9赞 Matt Browne 1/22/2015
如果不完全清楚,大写的 X 表示“使所有目录都可执行”(但不是文件)。
7赞 nunks 12/20/2016
@BenoitDuffez,如果您的目标是从文件中删除可执行位,则可以组合指令,例如“a-x+rX”以从所有内容中删除“x”,然后将“r”设置为所有内容,将“x”设置为仅目录。
2赞 tim-phillips 3/31/2017
在 和 中,是全部,并且是组。还有用户/所有者和其他。在这些命令中,您将添加一个读/写位和一个执行位(大写表示“仅当文件是目录时”)chmod -R a+rXchmod -R g+wXaguoX
33赞 Iam Zesh 2/27/2013 #9

您可能需要考虑 nik 在超级用户给出的这个答案,并对所有文件/文件夹使用“一个 chmod”,如下所示:

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

评论

10赞 Lothar 4/27/2015
警告,很容易遇到命令行限制。
2赞 Oleg Abrazhaev 7/16/2015
我有这个错误:-bash:/bin/chmod:参数列表太长
3赞 miravalls 2/22/2018
最好使用 为了克服错误而使用选项。-execfindArgument list too long
0赞 G-Man Says 'Reinstate Monica' 10/13/2018
相关:在U&L使用一个命令更改所有文件夹权限
1赞 Vagif 9/26/2020
同意@miravalls – 找到 .-type d -exec chmod 755 {} \;&& 找到 .-type f -exec chmod 644 {} \;
12赞 Prabhu 7/29/2013 #10

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

第一个是文件,并在找到时应用(如@WombleGoneBad所建议)。findchmod

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

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

chmod 755 $(find /path/to/base/dir -type d)

只要命令返回的文件数很少,这两个版本都可以很好地工作。第二种解决方案看起来很棒,并且比第一种解决方案更具可读性。如果文件数量较多,则第二个解决方案将返回错误:findArgument list too long.

所以我的建议是

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

这是将目录设置为 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

请注意,我尚未确认此解决方案与仅使用两个查找命令(如 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.

评论

0赞 seanahern 10/27/2018
人们,请使用 xargs。它节省了数以千计的进程调用。
0赞 Amit Naidu 10/15/2020
{} +可以对 find 执行与 xargs 通常相同的操作。
9赞 Viktor 1/7/2014 #12

我认为亚当是在问如何更改尝试在目录上操作的所有进程的掩码值。/opt/lampp/htdocs

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

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

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

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

如果您要从 Bash 会话创建新文件/文件夹,您可以在 shell 配置文件 ~/.bashrc 文件中设置 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.

11赞 NikolaiDante 1/12/2014 #13

你要确保适当的文件和目录是 chmod-ed/permissions for those are appropriate.对于您想要的所有目录

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

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

chmod 644 img/* js/* html/*

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

chmod 600 file
182赞 ravi ranjan 4/19/2014 #14

您可以使用 with 对所有文件和子文件夹进行递归遍历。-Rchmod

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

sudo chmod -R 755 /opt/lampp/htdocs

评论

17赞 lomse 9/29/2016
不知何故,没有奏效,但确实奏效了。奇怪。顺便说一句,我正在使用 Mac os x。sudo chmod 755 -R /directorysudo chmod -R 755 /directory
8赞 orionrush 12/6/2016
根据我的经验,这是正确的。该标志必须直接出现在 chmod 之后,而不是字符串中的任何位置。
1赞 Sandip Patel - SM 10/11/2017
上面的书面命令是错误的。正确的递归命令是:sudo chmod -R 755 /opt/lampp/htdocs 注意:-R 应该在 755 之前
1赞 Anonymous Type 8/3/2019
应该编辑,在没有迂腐语法的情况下无法在 Mac OSX 上运行。
0赞 elad silver 10/11/2019
OSX USSING: sudo chmod 777 logs/ -R GETTING: chmod: -R: 没有这样的文件或目录 应该是: sudo chmod -R 777 logs/
16赞 Sanchit Gupta 4/30/2014 #15

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

-1赞 Debian. 6/16/2014 #16

这很简单。

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

评论

1赞 Vikranth Inti 5/19/2020
什么是须藤尼莫?
1赞 Brice M. Dempsey 10/24/2020
nemo是 Cinnamon 的图形文件管理器。它可能已安装,也可能不会安装,并且需要您运行图形环境。
0赞 Jovylle 12/8/2021
请注明这是针对桌面操作系统的。
0赞 ethry 4/14/2022
*仅适用于 Linux Mint
4赞 MD SHAYON 10/12/2020 #17

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

sudo chmod go+rwx /opt/lampp/htdocs
12赞 Jakub A Suplicki 11/19/2020 #18

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

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

sudo chown -R username: foldername .*

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

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


或者简单地说:

sudo chmod -R 755 foldername

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

-1赞 Pawel Cioch 1/31/2021 #19

用:

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

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

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