【问题标题】:Linux: Set permission only to directories [closed]Linux:仅对目录设置权限[关闭]
【发布时间】:2013-06-10 02:07:18
【问题描述】:

我必须将apache中htdocs目录的权限更改为某个组并具有一定的读/写/执行权限。

目录需要775权限,文件需要664权限。

如果我对htdocs 执行递归 664,那么所有文件和目录都将更改为 664。

我不想手动更改目录。

有没有办法只更改文件或目录?

【问题讨论】:

    标签: linux bash directory chmod


    【解决方案1】:

    使用find 搜索目录并对其应用 chmod:

    find -type d | xargs chmod 775
    

    对文件使用类型f

    find -type f | xargs chmod 775
    

    【讨论】:

      【解决方案2】:

      使用 find 的 -type 选项来限制对文件和目录的操作。使用-o 选项为不同类型指定备用操作,因此您只需运行find 一次,而不是为每种类型单独运行。

      find htdocs -type f -exec chmod 664 {} + -o -type d -exec chmod 775 {} +
      

      【讨论】:

      • 最好使用chmods 内置支持。请参阅下面的Gordon Davisson's 答案
      • 此方法更好,因为如果您在不需要它的基本文件上有一堆“x”,则上面的 find 方法将它们全部清理干净,而 u=rwX,go=rX 则不会清理任何东西。
      • 这就像一个魅力,节省了几个小时的工作。谢谢!!
      【解决方案3】:

      尝试:

      find htdocs -type d -exec chmod 775 {} +
      

      【讨论】:

      • 设置目录权限,但不设置文件权限。
      【解决方案4】:

      chmod 实际上可以自己做到这一点; X 符号权限的意思是“执行,如果有意义的话”,这通常意味着目录而不是文件。所以,你可以使用:

      chmod -R u=rwX,go=rX /path/to/htdocs
      

      唯一的潜在问题是,如果任何普通文件已经设置了执行集,chmod 会假定它是故意的并保留它。如果这是一个潜在的问题并且你有chmod的GNU版本(即你在Linux上),你可以得到它来删除任何杂散的执行权限,如下所示:

      chmod -R a-x,u=rwX,go=rX /path/to/htdocs
      

      不幸的是,这个技巧不适用于chmod 的 bsd (/macOS) 版本(我不确定其他版本)。这是因为bsd版本基于“原始(未修改)模式”应用X权限,即在a-x修改完成之前是否有任何执行位之前(见the man page )。

      【讨论】:

      • 到目前为止的最佳答案,如果您有足够的递归目录,xargs 最终将失败。查看man pages了解更多信息
      • 为了解决现有执行标志剩余的潜在问题,您可以使用:chmod -R a-rwx,u+rwX,go+rX 这有效地删除了用户、组和其他人的所有权限,然后只添加您想要的那些。
      • @AxelWilczek 不幸的是,该技巧仅适用于 chmod 的某些版本。但我会在答案中添加一个解释。
      【解决方案5】:

      上面 Gordon 的回答是正确的,但是如果您试图锁定对目录树的访问权限,它会留下对所有者可执行的脚本,也可以对被授予大写 X 的人执行。

      使用

      find <path> -type d -exec chmod 775 {} +
      

      find <path> -type d -exec chmod 755 {} +
      

      更安全。

      【讨论】:

        【解决方案6】:

        我使用类似于 Gordon 提供的解决方案:

        chmod -R ug=rw,o=r,a+X /path/to/folder/
        

        它应该始终为文件夹设置 775,为文件设置 664,即使之前为某些文件设置了执行权限

        【讨论】:

          【解决方案7】:

          用于目录或文件

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-10-05
            • 1970-01-01
            • 2010-12-20
            • 2011-12-30
            • 2015-12-22
            • 1970-01-01
            • 2023-02-11
            • 1970-01-01
            相关资源
            最近更新 更多