关于linux:如何测试文件是否可由其所有者执行**不一定是我**

How to test if a file is executable by its owner ** not necessarily me **

这不是一个重复的问题。

假设我有

  • 完整的道路
  • 到名为target的常规文件
  • 可能由其他一些用户拥有。
  • 并且可以剥离环境(busybox启用很少)
  • 在shell脚本中,当我可能不是它的所有者时,如何测试该文件是否可由其所有者执行?想象一下,我的程序的目的是检查是否所有内容都很好地设置为运行其他东西(因为环境可能已被其他用户破坏)并且它正在查找特定目录以确保每个文件的所有者都有权执行他们的档案。

    这是一个专业背景,而不是家庭作业。

    我将使用的任何解决方案都需要涵盖我没有设置的所有类型的旧Linux环境(因此它们可能会缺少您通常期望的whichfind上的某些选项等)。

    但是,这个问题可能对那些没有面临这种限制的人有用,所以我非常感谢需要更完整或现代环境的其他解决方案。

    [ -x"$path" ]只告诉我是否可以执行它。

    ls -l"$path"并检查第四个字符是否x似乎太脆弱了:-rwxrw-rw- 1 otheruser group 26 Jun 13 10:57 target

    ls -F"$path"并检查它是否以*结尾似乎好一点:target*我测试的一个环境确实考虑了实际所有者是谁......但这不是最好的方式......


    1
    2
    permissions=$(stat -c"%a" target)
    permissions=$(( ${permissions: -3: 1} % 2 ))

    stat以八进制为您提供文件权限。 然后我们只需要所有者权限的字符(技术上从右边第三个,而不是第一个字符),然后需要检查它是否是奇数(八进制中的可执行文件是1位)。

    如果权限为1,则所有者可以执行。 如果是0,则不是。

    较旧的环境可能需要算术表达式:

    1
    2
    3
    4
    5
    6
    permissions=$(stat -c"%a" $target)
    if [ $((0$permissions & 0100)) -ne 0 ]; then
        # executable by owner
    else
        # not executable by owner
    fi


    如果您不想解析某些内容的输出,可以使用find

    1
    2
    3
    4
    5
    if find ${path} -prune -perm -u+x | grep -q ''; then
      echo"Executable by owner"
    else
      echo"Not executable by owner"
    fi

    -perm选项让你检查它是否可由user(所有者)执行,如果${path}是一个目录,-prune选项阻止降序到目录,所以我们可以自己检查给定的路径。


    ls -l"$path"并检查第一组权限(所有者权限)。 如果其中有x,则该文件可由其所有者执行。