【问题标题】:How do I find files/directories that are executable by anybody?如何找到任何人都可以执行的文件/目录?
【发布时间】:2014-09-22 19:38:08
【问题描述】:

我正在尝试查找可由用户、组或其他用户执行的所有文件或目录。到目前为止,我想出了这个

find . -perm -u+x

我也不知道如何搜索组和其他。我知道

find .-perm -ugo+x

将搜索所有 3 个可以执行的文件/目录(基本上是 a+x)。

我已经搜索过,但无法弄清楚如何查找这 3 个中的任何一个。建议一个地方

find . -perm -u+x, g+x, o+x

但我得到了错误

find: -perm: u+x,: illegal mode string

有什么想法吗?

【问题讨论】:

    标签: linux bash unix permissions


    【解决方案1】:

    试试这个:

    find .  -perm /u=x,g=x,o=x 
    

    【讨论】:

    • 或更短的find . -perm /111(或更旧的语法find . -perm +111
    • 糟糕,在我的回答中忘记了/,+1。不过,您应该添加对错误的解释。
    • 当我尝试 /111 或 /u=x,g=x,o=x 我仍然得到“非法模式字符串”。但是我尝试了 +111 并且有效。有人可以向我解释一下吗,是否有类似于 /u=x,g=x, o=x 的 +111 等价物?
    • @HaydenHolligan +111 是(现在)已弃用的语法(用于 GNU 查找)并且与 /111 执行相同的操作 - 例如查找具有任何可执行位的任何文件。你一定有一个糟糕的旧 linux,或者你有一些类似 BSD 的系统,但没有 GNU find。
    • @HaydenHolligan 听起来像 bsd find(例如 osx)。值得注意的是,您应该使用+111(对某些用户可执行)而不是-111(对所有用户都可执行)。
    【解决方案2】:

    符合 POSIX 的语法是

    find . \( -perm u=x -o -perm g=x -o -perm o=x \)
    

    三个-perm 中的每一个都检查文件是否可由用户、组或其他人执行;它们由-o 加入,因此整个\(...\) 组只有一个为真。

    【讨论】:

    • +1。除非您指定特定操作或其他选项,否则不要认为括号是必需的(它们实际上是隐含的 -print)。
    • 哦,好点。我会留下它们,以防有人试图在这个答案中添加另一个过滤器。
    • 我想你的意思是-perm -u=x -o …(注意u前面的破折号)。如果 u/g/o 之前没有破折号,该命令将仅查找具有 0100 (---x------)、0010 (-----x---) 或 0001 (--- ------x) 权限 完全 这可能是您想要的,但也可能不是。 (来自 POSIX 文档:“如果 被省略......当文件权限位 完全匹配 生成模板的值时,评估为真。否则,如果模式以 …如果至少结果模板中的所有位都设置在文件权限位中,则评估为真。”)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多