如何检查" s"在Linux shell上设置权限位?还是Perl?

时间:2015-03-16 17:39:44

标签: linux perl file-permissions

我正在写一些脚本来检查" s"为特定文件设置权限位。 例如 - 我的文件的权限如下 -

drwxr-s---

如果设置了s位,我如何检查bash脚本或perl脚本?

2 个答案:

答案 0 :(得分:3)

如果您使用的是perl,请查看perldoc

-u  File has setuid bit set.
-g  File has setgid bit set.
-k  File has sticky bit set.

类似于:

if (-u $filename) { ... }

答案 1 :(得分:0)

非perl选项

使用stat

#!/bin/bash
check_file="/tmp/foo.bar";
touch "$check_file";
chmod g+s "$check_file";

if stat -L -c "%A" "$check_file" | cut -c7 | grep -E '^S$' > /dev/null; then
    echo "File $check_file has setgid."
fi

说明:

  • 使用stat打印文件权限。
  • 我们知道组执行权限是字符7,因此我们用cut
  • 提取了该权限。
  • 我们使用grep来检查结果是否为S(指示为setgid),如果是,我们将对具有setgid的文件进行任何操作。

使用find

我发现(哈哈)该发现对于基于权限查找内容非常有用。

find . -perm -g=s -exec echo chmod g-s "{}" \;

使用setgid查找所有文件/目录并取消设置。