问:

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

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

chmod 775 /opt/lampp/htdocs

有没有办法为 /opt/lampp/htdocs 及其所有内容(包括子文件夹和文件)设置 chmod 755?

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

我也看过这个 Stack Overflow 问题:

How can I set a default ‘chmod’ in a Linux terminal?

答1:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

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

有人愿意解释行末的 {} \; 是什么意思吗?

@Nilzor chmod 644 {} \; 指定 find 将为每个文件执行的命令。 {} 被文件路径替换,分号表示命令的结束(转义,否则它会被 shell 解释而不是 find)。

“但为什么要在所有文件上设置执行位” 为什么不呢?我是 Ubuntu/Linux 的新手...

@FlavorScape Womble 在 find 返回的目录上专门设置执行位。目录的执行权限允许用户类列出该目录的内容并 cd 进入该目录。一般来说,您希望目录中的 r 和 x 都可供您访问,即使可能存在奇怪的边缘情况,您只设置了一个或另一个。有关详细信息,请参阅本指南:nixsrv.com/llthw/ex23

除了 sleepynate 之外,每个回复都忽略了解决他关于未来创建的文件/文件夹权限设置的问题。

答2:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

检查 -R 选项

chmod -R

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

man 

所以在这种情况下:

man chmod

它代表手册页,是一个 linux 命令,显示命令的手册页(大多数 linux 命令都有手册页)。试试 man ls 或 man man。

这对我在 Mac OS X 的终端中不起作用。在那里我做了“chmod -R *”并且它起作用了。

另请参阅@WombleGoneBad 下面的答案。您将希望为文件和文件夹设置不同的权限。

我认为现在在这里发帖或使用 Google 比使用 man 更快。特别是对于像 grep 这样的内容,如果您不熟悉 man,在文档中查找示例可能非常耗时,但 Google 或 SO 会在几秒钟内提供示例。

郑重声明,不熟悉 Linux 的人可能不熟悉 man。我只知道它的存在,但试图弄清楚如何使用它需要谷歌冒险本身。可能是一个值得的冒险,但你应该意识到我通过谷歌找到了这篇非常好的帖子,它回答了我所问的确切问题。资源啊朋友资源是无价的。你可能认为这是毫无意义的,他应该检查一下这个人,但这帮助了我和其他数百人(甚至数千人)。所以请考虑一下。

答3:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

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

chmod -R a+rX *

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

很好的答案。请注意, * 不会匹配隐藏文件(以点开头的名称)。那么,使用 . (对于当前目录)。

这是正确的答案。就我而言,我想将所有目录设置为 775,将所有文件设置为 664。 @Pete 的出色回答将我带到了 chmod 文档,在那里我发现我可以使用 chmod -R g+wX .。太棒了!

这不会删除文件上的 x(如果他们已经拥有它)。

如果不完全清楚,大写 X 表示“使所有目录可执行”(但不是文件)。

@BenoitDuffez 如果您的目标是还从文件中删除可执行位,则可以组合指令,例如“a-x+rX”以从所有内容中删除“x”,然后将“r”设置为所有内容,将“x”设置为仅目录.

答4:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

您可以将 -R 与 chmod 一起使用,以递归遍历所有文件和子文件夹。

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

sudo chmod -R 755 /opt/lampp/htdocs

不知何故,sudo chmod 755 -R /directory 不起作用,但 sudo chmod -R 755 /directory 起作用了。诡异的。顺便说一句,我正在使用 Mac os x。

这在我的经验中是正确的。该标志必须直接出现在 chmod 之后,而不是字符串中的任何位置。

上面写的命令是错误的。正确的递归命令是:sudo chmod -R 755 /opt/lampp/htdocs 注意:-R 应该在 755 之前

应该被编辑,在没有迂腐语法的 mac osx 上不起作用。

OSX USSING: sudo chmod 777 logs/ -R GETTING: chmod: -R: No such file or directory 应该是: sudo chmod -R 777 logs/

答5:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

正确的递归命令是:

sudo chmod -R 755 /opt/lampp/htdocs

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

嗨,尽管有路径,您确定当前文件夹是一个吗?

OSX 使用:sudo chmod 777 logs/ -R GETTING:chmod:-R:没有这样的文件或目录应该是:sudo chmod -R 777 logs/

答6:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

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

chmod 755 /folder -R

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

不要将您的 umask 设置为 755!您将无法列出、读取或使用您创建的任何文件或目录!

这将所有设置为 755,包括文件。!

@sleepynate 你到底在说什么? 755 表示所有者可以读、写和执行,所有其他用户可以读和执行,但不能写入对象

@NicHartley @svin83 umask 是将从权限中屏蔽掉的位,因此它实际上是 chmod 的倒数。 λ ~ → umask 022 λ ~ → umask -S u=rwx,g=rx,o=rx λ ~ → umask 755 λ ~ → umask -S u=,g=w,o=w

应该不需要删除(这就是修订历史的目的)。答案应该看起来好像是今天写的。

答7:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

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

sleepynate 的答案是唯一正确的答案。发帖人问了两个问题:1)如何修复文件和文件夹的权限,以及 2)如何更改默认值(意思是“未来”文件)。正如 nate 所说,第一个是“chmod”,第二个是“umask”。我还要补充一点,没有办法仅在 1 个目录上更改 umask ...... umask 是每个用户的“全有或全无”。然而,没有什么能阻止你创建一个与你共享组的新用户,这样你就可以“sudo -u someuser [create file]”。这有点跳出框框思考,但这是一个很好的解决方法。

我认为您是对的,但是 inherit 不能成为许多情况的解决方案,还是仅适用于 NTFS-3G?

将来可能会在未授予文件夹权限的情况下创建文件夹,例如 myforlder 从其他地方(如 PC)复制到此目标目录(在服务器上),因为它会尝试创建一个目标目录中名称为 myfolder 的新文件夹,您没有这样做的权限。因为我有 root,所以我只使用 chown -R username:usergroup /directory。

答8:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

您可能需要考虑 Super User 上的 this answer given by nik 并对所有文件/文件夹使用“一个 chmod”,如下所示:

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

警告,很容易遇到命令行限制。

我有这个错误:-bash: /bin/chmod: Argument list too long

最好使用 find 的 -exec 选项来克服 Argument list too long 错误。

相关:Change all folder permissions with one command 在 U & L.

同意@miravalls——找到。 -type d -exec chmod 755 {} \;&& 查找。 -type f -exec chmod 644 {} \;

答9:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

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

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

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

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

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

干杯

现在,如何将其转换为 shell 脚本以便我们可以运行 openmod $folder ?

各位,请使用 xargs。它节省了数千个进程调用。

{} + 可以用 find 做与 xargs 通常做的事情相同的事情。

答10:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

利用:

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

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

答11:

huntsbot.com – 高效赚钱,自由工作

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

我做到了,但无法从那里打开终端。我无法修复它。

原文链接:https://www.huntsbot.com/qa/YlVe/how-to-change-permissions-for-a-folder-and-its-subfolders-files-in-one-step?lang=zh_CN&from=csdn

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

Logo

更多推荐