如何一步更改文件夹及其子文件夹/文件的权限
我想在 Linux 中一步(命令)更改文件夹及其所有子文件夹和文件的权限。我已经尝试过以下命令,但它仅适用于提到的文件夹:有没有办法为 /opt/lampp/htdocs 及其所有内容(包括子文件夹和文件)设置 chmod 755?另外,将来如果我在 htdocs 中创建一个新文件夹或文件,如何将其权限自动设置为 755?我也看过这个 Stack Overflow 问题:How can I set
问:
我想在 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?文件的权限成为默认权限。
我做到了,但无法从那里打开终端。我无法修复它。
huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感
更多推荐
所有评论(0)