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

Adam 1711 linux directory permissions chmod

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

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

chmod 775 /opt/lampp/htdocs

有没有一种方法来设置chmod 755/opt/lampp/htdocs所有内容,包括子文件夹和文件?

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

我也看过这个链接:

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

提前致谢.

小智.. 2811

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

  • @Nilzor`chmod 644 {} \;`指定将由`find`为每个文件执行的命令.`{}`由文件路径替换,分号表示命令的结尾(转义,否则它将被shell解释而不是`find`). (283认同)
  • 任何人都在关心解释`{} \;`到底是什么意思? (213认同)
  • "但为什么要在所有文件上设置执行位"为什么不呢?我是Ubuntu/Linux的新手...... (24认同)
  • 除了sleepynate之外,每个响应都忽略了解决他关于设置*future*中创建的文件/文件夹权限的问题. (23认同)
  • @FlavorScape Womble仅在find返回的目录上设置执行位.目录的执行权限允许用户类列出该目录的内容并将其cd入其中.一般来说,您希望目录上的r和x都可以访问它,即使可能存在奇怪的边缘情况,您只能设置其中一个.有关详细信息,请参阅本指南:http://nixsrv.com/llthw/ex23 (10认同)
  • 为此,我必须执行`/ path/to/directory/*`才能使它工作.希望这有助于某人. (2认同)
  • 您应该至少将占位符包装为单引号,以便文件名中可能存在的空格不会产生多个参数; 即:`-exec chmod 755'{}'\;` - ...当使用单引号作为占位符时,更容易记住用单引号转义分号的可能性; 即:`-exec chmod 755'{}'';'` (2认同)

Steve Robill.. 756

检查-R选项

chmod -R <permissionsettings> <dirname>

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

man <command name>

所以在这种情况下:

man chmod

  • 什么是'男人'? (142认同)
  • 我想现在,在这里发布或使用Google比使用"man"更快.特别是对于像`grep`这样的东西,如果你是`man`的新手,在文档中找到示例可能非常耗时,但Google或SO在几秒钟内就会提供示例. (123认同)
  • 它代表手册页,是一个linux命令,显示命令的手册页(大多数linux命令都有一个手册页).试试男人或男人. (34认同)
  • 对于记录,那些不熟悉Linux的人可能不熟悉man.我只知道它的存在,但试图弄清楚如何使用它需要谷歌冒险本身.可能是一个有价值的冒险,但你应该意识到我通过谷歌找到了这个非常好的帖子,它回答了我问的确切问题.资源,我的朋友.资源非常宝贵.你可能认为这是毫无意义的,他应该检查一下这个男人,但这对我和其他人(甚至数千人)都有帮助.所以请考虑一下. (15认同)
  • 这对我来说在Mac OS X的终端中不起作用.在那里我做了"chmod -R <permissionsettings> <dirname>*"并且它有效. (8认同)
  • 请看@WombleGoneBad下面的答案.您需要为文件与文件夹设置不同的权限. (4认同)
  • 我看到太多次看到'检查手册页'是一种让你感到羞耻的方式,非常讨厌. (3认同)

小智.. 370

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

chmod -R a+rX *

X(即资本X,不小x!)可以忽略的文件(除非它们是可执行的人的话),但用于目录.

  • 很好的答案.请注意*不会与隐藏文件(以点开头的名称)匹配.那么,使用它可能更有意义.(对于当前目录). (25认同)
  • 这是正确的答案.对于我的情况,我想将所有目录设置为**775**并将所有文件设置为**664**.@ Pete的优秀答案让我进入了`chmod`文档,在那里我发现我可以使用`chmod -R g + wX .`.好样的! (17认同)
  • 如果文件已经存在,则不会删除文件上的`x`. (8认同)
  • 如果它不完全清楚,大写X意味着"使所有目录可执行"(但不是文件). (4认同)
  • @BenoitDuffez如果您的目标是从文件中删除可执行位,您可以组合指令,如"a-x + rX"从所有内容中删除"x",然后将"r"设置为所有内容,将"x"设置为仅限目录. (4认同)
  • 在`chmod -R a + rX`和`chmod -R g + wX`中,`a`是all而`g`是group.还有'u`用户/所有者和`o`其他.在这些命令中,您要添加一个读/写位和一个执行位(大写`X`表示"仅当文件是目录时") (2认同)

ravi ranjan.. 133

您可以使用-Rwith chmod进行所有文件和子文件夹的递归遍历.

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

sudo chmod 755 -R /opt/lampp/htdocs

  • 不知何故,`sudo chmod 755 -R/directory`没有工作,但`sudo chmod -R 755/directory`没有.奇怪的.我顺便使用Mac OS x. (16认同)
  • 根据我的经验,这是正确的.标志必须直接出现在chmod之后,而不是字符串中的任何位置. (7认同)

Topera.. 73

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

chmod 755 /folder -R

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

  • 不要将你的`umask`设置为755!您将无法列出,阅读或使用您创建的任何文件或目录! (23认同)
  • 你是说umask 022吗? (13认同)
  • 这将所有设置为755,包括文件. (4认同)

Pramendra Gu.. 68

正确的递归命令是:

sudo chmod 755 -R /opt/lampp/htdocs

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


sleepynate.. 50

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

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

Iam Zesh.. 25

您可能想要考虑nik在超级用户上给出的答案,并对所有文件/文件夹使用"one chmod",如下所示:

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

  • 警告,很容易遇到命令行限制. (9认同)

Nate Starner.. 20

使用:

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

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


chrisfargen.. 20

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

干杯


Sanchit Gupt.. 13

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


小智.. 9

您希望确保适当的文件和目录是chmoded /权限.对于您想要的所有目录

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

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

chmod 644 img/* js/* html/*

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

chmod 600 file


小智.. 8

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

chmod -R 755 /directory

是的,正如所有其他人所说,做这件事时要小心.


小智.. 6

我认为Adam正在询问如何为所有在/opt/lampp/htdocs目录上运行的进程更改umask值.

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

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

如果文件/目录例如由php创建,则需要修改php代码

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

如果要从bash会话创建新文件/文件夹,可以在shell配置文件中设置umask值〜/ .bashrc或者可以为所有用户设置umask /etc/bashrc/etc/profilefile.将以下内容添加到文件中: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.希望这可以帮助.