我想在Linux的一个步骤(命令)中更改文件夹及其所有子文件夹和文件的权限。
我已经尝试过下面的命令,但它只适用于上述文件夹:
1
| chmod 775 /opt/lampp/htdocs |
有没有办法为/opt/lampp/htdocs及其所有内容(包括子文件夹和文件)设置chmod 755?
另外,将来,如果我在htdocs中创建一个新的文件夹或文件,那么该文件夹或文件的权限如何自动设置为755?
我也看过这个链接:
http://stackoverflow.com/questions/3740187/how-to-set-default-chmod-in-linux-terminal
- 是否尝试编写命令脚本?可能是bash,csh还是zsh?
- 你打算写chmod 75 /opt/lampp/htdocs还是应该写chmod 755 /opt/lampp/htdocs?
- sudo chown-r用户名:group目录………它将更改目录和目录本身内所有文件和目录的所有权(用户和组)。
- 关于Linux的第四位投票最高的问题是"作为非主题关闭"这一事实是很滑稽的。除了程序员,谁会关心chmod?这是怎么脱离主题的?为什么"权限"、"文件夹"和"cmod"即使是主题之外的标签?
- @Arthurdent,因为这个问题(虽然非常有效和有用)更适合于以系统为中心的SE站点,如超级用户或服务器故障。它与编程没有明确的关系。
- @当然可以,但我再次问,为什么"权限"、"文件夹"和"cmod"标记?CMOD什么时候会被"明确"用于编程?
- @Timelmer这个问题不是关于bash中的编程吗?
- 如果你真的想变得挑剔,bash实际上是一种脚本语言,但是php也是,它看起来并不介意。
其他答案是正确的,因为chmod -R 755将为树中的所有文件和子文件夹设置这些权限。但你到底为什么要这么做?对于目录来说可能是有意义的,但是为什么要在所有文件上设置执行位呢?
我怀疑您真正想做的是将目录设置为755,然后单独保存文件或将它们设置为644。为此,您可以使用find命令。例如:
要将所有目录更改为755(drwxr-xr-x:
1
| find /opt/lampp/htdocs -type d -exec chmod 755 {} \; |
将所有文件更改为644(-rw-r--r--):
1
| find /opt/lampp/htdocs -type f -exec chmod 644 {} \; |
- 有人愿意解释这行末尾的{} \;是什么意思吗?
- @nilzor chmod 644 {} \;指定将由find为每个文件执行的命令。{}被文件路径替换,分号表示命令结束(转义,否则将由shell而不是find解释)。
- "但是为什么不在所有文件上设置执行位呢?"我刚接触Ubuntu/Linux…
- @Flavorscape Womble正在find返回的目录上专门设置execute位。目录上的执行权限允许用户类列出该目录的内容并将其CD到其中。一般来说,您希望R和X都在一个目录中,这样您就可以访问它,即使在某些奇怪的边缘情况下,您只设置了一个或另一个。有关详细信息,请参阅本指南:nixsrv.com/llthw/ex23
- 除了sleepynate之外,每个回复都忽略了他关于设置将来创建的文件/文件夹权限的问题。
- @tobbez不把find的输出传递到chmod命令中吗?换句话说,我认为指定从find命令传递的参数(文件/路径),在这种情况下,chmod命令的管道随后将接收这些参数。
- 因为我下载了一个权限不正确的存储库。数百个文件,其中一半需要可执行。所以我想让他们都来建造这个项目。
- 隐马尔可夫模型。。要继承的棘手问题。另外,fstab呢?一般来说,许多LAMP应用程序(比如wp)希望或期望在docroot下的每件事情上都有755个,而600个应用程序则由其他地方的异常管理。但要验证CIFS安装,因为chmod可以忽略,尽管报告成功。(不建议在www或其他位置进行远程存储。)
- @麦肯森是一个微妙的暗示(设置粘性位和内容将继承权限?)
- 是的,为了避免闲聊,所有的答案都没有覆盖v或c标志,当使用时递归地确认或回送更改的工件。有助于评估"漂移"。一个老的wp用户,我喜欢"serverbody"插件,它可以检查一个站点的755。不想进入杂烩或粘性位,或下一件事,我们知道我们正在谈论的是ACL和第三方方案。chmod 755-rc目标工程。
- 很抱歉,但是如何在不更改目录htdocs的权限的情况下执行此命令?因为htdocs基目录容易受到攻击
- @Toskan的一个选项是在运行find命令后,使用chmod YOUR_PERMISSIONS /opt/lampp/htdocs手动更改它。
- 在哪里可以阅读更多关于Linux/Ubuntu中的权限良好实践的信息?
- 为此,我不得不做/path/to/directory/*来让它工作。希望这能帮助别人。
- 抱歉,为什么不设置要执行的文件?
- 我以'/'作为路径运行了您的第二个命令(不理解:()的权限为400。很多文件的权限都被更改了。有什么方法可以恢复它吗?
- 在这种情况下,使用find /opt/lampp/htdocs -type d -exec chmod 755 {} +和find /opt/lampp/htdocs -type f -exec chmod 644 {} +来减少fork和exec调用chmod的调用。(用+代替\;)
- 您至少应该将占位符括在单引号中,这样文件名中可能存在的空格就不会产生多个参数;例如:-exec chmod 755 '{}' \;…,当对占位符使用单引号时,也更容易记住用单引号转义分号的可能性;例如:-exec chmod 755 '{}' ';'。
- duckduckgo显示了搜索linux make directories public and files public chmod的这个答案。
- 你不想在一个可执行脚本目录上放755吗?
- 通过ssh,我给cmd这样的h-16[~]find public_html-type d-exec chod 755 580;但是它给出了这个find:chod:没有这样的文件或目录。你能帮我吗?
- 执行此操作时,目录中正在创建的新文件没有继承正确的权限,此命令在任何现有文件上都可以正常工作,但每次生成新文件时,都需要再次运行此命令。
- 如果我们想更改特定文件的权限,比如说,它们的名称是example_file,位于多个目录中,那么该命令将如何执行?
- 它对我不起作用:(它遍历一组空字符串目录。我想这是因为我在钓鱼而不是狂欢。我应该换回巴什。
- @泰山,你有错别字,命令是chmod而不是chod。
- 只是为了添加,我还将-maxdepth 1添加到命令中,以使它在我的情况下更快,因为我只需要应用到在目标根目录中创建的新文件夹,而不应用到那些(已经有权限的,否则将不存在)的所有现有子文件夹中。
- "目录可能有意义",如果这对任何人都不清楚,那是因为用户需要对目录执行权限才能遍历/打开它。来源
- 相关:是否使用位于的一个命令更改所有文件夹权限?U??L.
检查-r选项
chmod -R
将来,您可以通过首先查看手册页节省大量时间:
所以在这种情况下:
- 那是什么东西?
- 它代表手动页面,是一个Linux命令,显示命令的手册页(大多数Linux命令都有手册页)。试试男人或男人。
- 在Mac OS X的终端中,这对我不起作用。在那里我做了"chmod-r*",它起作用了。
- 请参见下面@womblegonebad的回答。您将希望为文件和文件夹设置不同的权限。
- 我认为现在,在这里发布或使用谷歌实际上比使用man更快。尤其是对于像grep这样的东西,如果您是man的新手,在文档中查找示例可能会非常耗时,而google或其他公司在几秒钟内提供示例。
- 回答得很好,伙计!你能讲讲如何从我现在所在的文件夹开始吗?
- 答案的前两行很好。但是,检查对堆栈溢出的正确调用要比浏览手册页快得多。
- @亚当对于这样的问题,你真的应该使用man命令。
- 键入此内容后出错(我在正确的目录上)……CHmod-R 755 Squid3/……错误为:-chmod:更改"squid3/"的权限:不允许操作………-为什么?
- @Nimishan您可能不拥有有问题的文件或文件夹。尝试使用sudo命令。
- 在Steverobillard工作,很抱歉打扰你,我是Ubuntu的新手
- @但是,SteveRobillard对解决方案有一个顾虑,当涉及到x/执行许可时,当您执行-x/时,您不想意外地使直接不可执行的cd/。
- 据记录,那些不熟悉Linux的人可能不熟悉man。我只知道它的存在,但要想想想知道如何使用它,就需要谷歌本身进行一次冒险。这可能是一个有价值的尝试,但你应该意识到我通过谷歌找到了这篇文章,它回答了我问的确切问题。资源,我的朋友。资源是无价的。你可能认为这是毫无意义的,他应该检查一下这个人,但这帮助了我和其他数百人(甚至上千人)。所以请考虑一下。
- 太多次我看到"检查手册页"是一种羞辱你的方式,真的很烦人。
- @上岸并不是为了羞辱任何人,而是为了向他们展示如何捕鱼,而不是给他们一条鱼(即如何帮助自己)。
如果要将所有文件的权限设置为a+r,将所有目录设置为a+x,并通过完整的子目录树递归执行此操作,请使用:
X(即大写X,不是小写X)被忽略的文件(除非它们已经对某人可执行),但用于目录。
- 很好的回答。请注意,*将不匹配隐藏文件(名称以点开头)。那么,使用它可能更有意义。(对于当前目录)。
- 这是正确的答案。对于我的案例,我想将所有目录设置为775,将所有文件设置为664。@皮特出色的回答让我找到了chmod文档,在那里我发现我可以使用chmod -R g+wX .。好极了!
- 这不会删除文件上的x,如果他们已经有了它的话。
- 如果不完全清楚,大写的x表示"使所有目录都可执行"(但不是文件)。
- @BenoitDuffez如果您的目标是同时从文件中删除可执行位,您可以组合指令,例如"a-x+r x",从所有内容中删除"x",然后将"r"设置为所有内容,将"x"设置为仅目录。
- 在chmod -R a+rX和chmod -R g+wX中,a为全,g为群。还有u用户/所有者和o其他。在这些命令中,您要添加一个读/写位和一个执行位(capital x表示"仅当文件是目录时")。
- 伟大的。所以,当我修改文件夹时,我通常想做的是:sudo chmod -R u+rwX,g+rwX,o+rX .在文件上设置664,在文件夹上设置775。
可以将-R与chmod一起用于所有文件和子文件夹的递归遍历。
您可能需要sudo,因为它取决于当前用户或其他用户安装的灯:
1
| sudo chmod 755 -R /opt/lampp/htdocs |
- 不知怎么的,sudo chmod 755 -R /directory不起作用,但sudo chmod -R 755 /directory起作用。奇怪的。顺便说一下,我用的是MacOSX。
- 根据我的经验,这是正确的。标志必须直接出现在chmod之后,而不是字符串中的任何位置。
- 上面写的命令是错误的。正确的递归命令是:sudo chmod-r 755/opt/lampp/htdocs注:r应该在755之前
- 这个解决方案对Redhat很有效。谢谢!
- 对Rhel和sudo chmod 755 -R工作良好
要设置为所有子文件夹(递归),请使用-r
并使用umask将默认值设置为新文件夹/文件光盘/文件夹乌姆赛克755< /打击>
- 不要把你的umask设为755!您将无法列出、读取或使用您创建的任何文件或目录!
- 你是说乌马斯克022吗?
- 这将全部设置为755,包括文件。!
- @为什么要睡觉?
- @你到底在说什么?755表示所有者可以读取、写入和执行,所有其他用户可以读取和执行,但不能写入对象。
- 为我工作sudo chmod 777我的文件夹-r
- @nichartley@svin83 umask是将被屏蔽掉权限的位,因此它实际上是chmod的倒数。λ ~ → umask 022 λ ~ → umask -S u=rwx,g=rx,o=rx λ ~ → umask 755 λ ~ → umask -S u=,g=w,o=w
正确的递归命令是:
1
| sudo chmod 755 -R /opt/lampp/htdocs |
-R:更改包括当前文件夹在内的每个子文件夹
chmod 755 -R /opt/lampp/htdocs将递归设置权限。无法仅在设置权限后创建的此目录中自动设置文件权限,但可以通过设置umask 022更改系统范围内的默认文件权限。
- Sleepynate的答案是唯一正确的。海报提出了两个问题:1)如何修复文件和文件夹的权限;2)如何更改默认值(意味着"将来"的文件)。正如内特所说,第一个字母是"chmod",第二个字母是"umask"。我还要补充一点,没有办法只更改一个目录上的umask…umask是每个用户的"全部或全部"。然而,没有什么能阻止你创建一个新用户,他与你共享组,这样你就可以"sudo-u someuser[创建文件]"。这是一个很好的解决方法。
- 我认为你是对的,但是inherit不能解决很多情况吗?或者它只能与NTFS-3G一起工作吗?
- 如果没有对文件夹的授权,将来可能会创建文件夹,例如,myforlder从其他位置(如PC)复制到目标目录(在服务器上),因为它将尝试在目标目录中创建名为myfolder的新文件夹,而您没有权限这样做。因为我有root,所以我只使用chown -R username:usergroup /directory。
您可能需要考虑nik on superuser给出的这个答案,并对所有文件/文件夹使用"一个chmod",如下所示:
1 2
| chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f) |
- 警告,很容易遇到命令行限制。
- 我有这个错误:-bash:/bin/chmod:参数列表太长
- 最好使用find的-exec选项,以克服Argument list too long错误。
- 相关:是否使用位于的一个命令更改所有文件夹权限?U??L.
用途:
1
| sudo chmod 755 -R /whatever/your/directory/is |
但是,要小心。如果您更改了错误文件/文件夹的权限,这真的会伤害您。
这是另一种将目录设置为775,文件设置为664的方法。
1 2 3
| find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \) |
它可能看起来很长,但有三个原因很酷:
只扫描文件系统一次,而不是两次。
提供更好的文件处理方式和目录处理方式的控制。这在处理特殊模式(如粘性位)时很有用,您可能希望将其应用于目录而不是文件。
直接使用man页中的技术(见下文)。
注意,我还没有确认这个解决方案和使用两个find命令(如彼得·莫特森的解决方案)之间的性能差异(如果有)。然而,在手册中看到类似的例子是令人鼓舞的。
man find页示例:
1 2 3 4 5 6 7 8
| find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p
\) , \
\( -size +100M -fprintf /root/big.txt %-10s %p
\)
Traverse the filesystem just once, listing setuid files and direc‐
tories into /root/suid.txt and large files into /root/big.txt. |
干杯
- 现在,如何在shell脚本中转换它,以便我们可以运行openmod$folder?
- 各位,请使用xargs。它节省了数千个进程调用。
chmod -R 755 directory_name可以工作,但您如何将新文件保存到755?文件的权限将成为默认权限。
您要确保适当的文件和目录是chmod ed/这些文件和目录的权限是适当的。对于您想要的所有目录
1
| find /opt/lampp/htdocs -type d -exec chmod 711 {} \; |
对于所有的图片,javascript,css,html…你不应该执行它们。所以用
1
| chmod 644 img/* js/* html/* |
但是对于所有的逻辑代码(例如php代码),您应该设置权限,以便用户看不到该代码:
对于Mac OS X 10.7(Lion),它是:
是的,就像其他人说的,做这件事时要小心。
我认为Adam是在询问如何更改与/opt/lampp/htdocs目录上操作相关的所有进程的umask值。
用户文件创建模式掩码(umask)用于确定新创建文件的文件权限。它可以用来控制新文件的默认文件权限。
因此,如果您将使用某种ftp程序将文件上载到/opt/lampp/htdocs中,则需要将ftp服务器配置为使用所需的umask。
如果文件/目录是由PHP创建的,则需要修改PHP代码。
1 2 3 4
| <?php
umask(0022);
// other code
?> |
如果要从bash会话创建新的文件/文件夹,可以在shell配置文件~/.bashrc中设置umask值。也可以在/etc/bashrc或/etc/profile文件中为所有用户设置umask。将以下内容添加到文件:乌姆赛克022
1 2 3 4 5
| 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 |
若要更改已创建文件的权限,可以使用"查找"。希望这有帮助。
找到文件并将chmod应用到文件中有两个答案。第一个是find文件,并应用chmod,正如它发现的那样(如@womblegonebad建议的那样)。
1
| find /opt/lampp/htdocs -type d -exec chmod 755 {} \; |
第二种解决方案是使用find命令生成所有文件的列表,并将该列表提供给chmod命令(如@lamgesh建议的那样)。
1
| chmod 755 $(find /path/to/base/dir -type d) |
只要find命令返回的文件数量很小,这两个版本都能很好地工作。第二个解决方案看起来很好,比第一个更可读。如果有大量文件,第二个解决方案返回错误:Argument list too long.。
所以我的建议是
如果要同时更改所有文件和目录的权限,请使用chmod -R 755 /opt/lampp/htdocs。
如果您使用的文件数量非常大,请使用find /opt/lampp/htdocs -type d -exec chmod 755 {} \;。-type x选项仅搜索特定类型的文件,其中d用于查找目录,f用于文件,l用于链接。
否则使用chmod 755 $(find /path/to/base/dir -type d)。
最好在任何情况下使用第一个
这很简单。
在终端中,转到文件管理器。示例:sudo nemo。转到/opt/,然后单击属性→权限。然后是其他。最后,更改为创建和删除,文件访问权限为读写,然后单击按钮应用…工作。