题 如何为文件夹及其所有子文件夹和文件设置chmod? [关闭]


有没有办法设定 chmod 755 对于 /opt/lampp/htdocs 及其所有内容,包括子文件夹和文件?

此外,将来,如果我在里面创建一个新的文件夹或文件 htdocs,如何自动设置权限 755

这有效,但仅适用于此文件夹:

chmod 775 /opt/lampp/htdocs

1299
2017-09-18 02:31


起源


你试图编写命令脚本吗?也许是bash,csh还是zsh? - jww
你打算写吗? chmod 75 /opt/lampp/htdocs 或者应该是真的 chmod 755 /opt/lampp/htdocs? - HelloGoodbye
关于Linux的第四个最高投票问题是“关闭为主题”这一事实很有趣。谁只是程序员会关心chmod?这个偏离主题怎么样?为什么“权限”,“文件夹”和“cmod”甚至是标签,如果它们是偏离主题的? - Arthur Dent
@ArthurDent,因为这个问题(虽然完全有效且有帮助)更适合以系统为中心的SE站点,例如SuperUser或ServerFault。它与编程没有明确的关系。 - timelmer
@timelmer当然可以,但我再问一遍,为什么“权限”,“文件夹”和“cmod”标签?什么时候cmod会被“明确地”用于编程? - Arthur Dent


答案:


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

2261
2017-07-16 20:42



任何人都在乎解释什么 {} \; 这条线意味着什么? - Nilzor
@Nilzor chmod 644 {} \; 指定将由其执行的命令 find 对于每个文件。 {} 由文件路径替换,分号表示命令的结尾(转义,否则它将被shell解释而不是 find)。 - tobbez
“但为什么要在所有文件上设置执行位”为什么不呢?我是Ubuntu / Linux的新手...... - FlavorScape
@FlavorScape Womble仅在find返回的目录上设置执行位。目录的执行权限允许用户类列出该目录的内容并将其cd入其中。一般来说,您希望目录上的r和x都可以访问,即使可能存在奇怪的边缘情况,您只能设置其中一个。有关详细信息,请参阅本指南: nixsrv.com/llthw/ex23 - Alexandr Kurilin
除了sleepynate之外,每个响应都忽略了解决他关于设置对文件/文件夹的权限的问题的方面。 未来。 - JGarrido


检查-R选项

chmod -R <permissionsettings> <dirname>

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

man <command name>

所以在这种情况下:

man chmod

638
2017-09-18 02:36



那是什么 man? - Adam
它代表手册页,是一个linux命令,显示命令的手册页(大多数linux命令都有一个手册页)。试试男人或男人。 - Steve Robillard
这对我来说在Mac OS X的终端中不起作用。在那里我做了“chmod -R <permissionsettings> <dirname> *”并且它有效。 - Einar Ólafsson
我想现在,在这里发布或使用谷歌比使用更快 man。特别喜欢的东西 grep 如果你是新手的话 man 在文档中查找示例可能非常耗时,但Google或SO会在几秒钟内提供示例。 - ely
对于记录,那些不熟悉Linux的人可能不熟悉man。我只知道它的存在,但试图找出如何使用它需要谷歌冒险本身。可能是一个有价值的冒险,但你应该意识到我通过谷歌找到了这个非常好的帖子,它回答了我问的确切问题。资源,我的朋友。资源非常宝贵。你可能认为这是毫无意义的,他应该检查一下这个男人,但这对我和其他人(甚至数千人)都有帮助。所以请考虑一下。 - Soundfx4


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

chmod -R a+rX *

X (这就是资本 X,不小 x!)被忽略的文件(除非它们已经可以为某人执行)但用于目录。


288
2018-01-31 20:39



很好的答案。请注意*不会与隐藏文件(以点开头的名称)匹配。那么,使用它可能更有意义。 (对于当前目录)。 - Aaron Adams
这是正确的答案。对于我的情况,我想将所有目录设置为 775 和所有文件 664。 @ Pete的出色回答引领我走向了 chmod docs,我发现我可以使用 chmod -R g+wX .。好样的! - chadoh
这不会删除 x 在文件上,如果他们已经拥有它。 - Benoit Duffez
如果它不完全清楚,大写X意味着“使所有目录可执行”(但不是文件)。 - Matt Browne
@BenoitDuffez如果您的目标是从文件中删除可执行位,您可以组合指令,如“a-x + rX”从所有内容中删除“x”,然后将“r”设置为所有内容,将“x”设置为仅限目录。 - nunks


您可以使用 -R 同 chmod 用于递归遍历所有文件和子文件夹。

你可能需要sudo,因为它取决于  由当前用户或另一个用户安装:

sudo chmod 755 -R /opt/lampp/htdocs

103
2018-04-19 15:43



不知何故, sudo chmod 755 -R /directory 没用,但是 sudo chmod -R 755 /directory 没有。奇怪的。我顺便使用Mac OS x。 - Sélom
根据我的经验,这是正确的。标志必须直接出现在chmod之后,而不是字符串中的任何位置。 - orionrush
上面写的命令是错误的。正确的递归命令是:sudo chmod -R 755 / opt / lampp / htdocs注意:-R应该在755之前 - Sandip Patel - SM
这个解决方案适用于Redhat。谢谢! - Lavande


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

chmod 755 /folder -R

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


65
2017-09-18 02:35



不要设置你的 umask 在755!您将无法列出,阅读或使用您创建的任何文件或目录! - sleepynate
你是说umask 022吗? - Xkeeper
这将所有设置为755,包括文件。 - Patrick Mutwiri
@sleepynate为什么? - Nic Hartley
@sleepynate你到底在说什么? 755表示所有者可以读取,写入和执行,所有其他用户可以读取和执行,但不能写入对象 - svin83


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


46
2017-09-18 02:38



sleepynate的答案是唯一正确的答案。海报提出两个问题:1)如何修复文件和文件夹的权限,以及2)如何更改默认值(意味着“未来”文件)。正如nate所说,第一个是“chmod”,第二个是“umask”。我还补充说,没有办法在1个目录上更改umask ... umask对每个用户来说都是“全有或全无”。但是,没有什么可以阻止你创建一个与你共享组的新用户,这样你就可以'sudo -u someuser [创建文件]“。这就是在盒子外面思考一下,但这是一个很好的解决方法。 - Crossfit_and_Beer
我认为你是对的,但不能 inherit 是许多案例的解决方案还是仅适用于NTFS-3G? - Sebastian Schlicht


正确的递归命令是:

sudo chmod 755 -R /opt/lampp/htdocs

-R:更改包含当前文件夹的每个子文件夹


41
2017-09-18 02:40



嗨,你确定当前的文件夹,你是一个尽管路径? - shareef


你可能想考虑一下 这个答案由nik给出 在超级用户上并对所有文件/文件夹使用“one chmod”,如下所示:

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

22
2018-02-27 06:42



警告,很容易遇到命令行限制。 - Lothar
我有这个错误:-bash:/ bin / chmod:参数列表太长了 - Oleg Abrazhaev
最好使用 -exec 的选择 find 为了克服这个问题 Argument list too long 错误。 - miravalls


使用:

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

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


20
2017-09-18 02:37





这是将目录设置为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  direc‐
tories into /root/suid.txt and large files into /root/big.txt.

干杯


18
2017-11-17 05:47



现在,如何在shell脚本中转​​换它,以便我们可以运行openmod $文件夹? - StR


chmod -R 755 directory_name 有效,但你如何将新文件保存到755?文件的权限成为默认权限。


11
2018-04-30 00:22