簡體   English   中英

如何檢查 Linux shell 上是否設置了“s”權限位? 或Perl?

[英]How to check if “s” permission bit is set on Linux shell? or Perl?

我正在編寫一些腳本來檢查是否為特定文件設置了“s”權限位。 例如 - 我的文件的權限如下 -

drwxr-s---

如果設置了 s 位,我如何檢查 bash 腳本或 perl 腳本?

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

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

所以像:

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

非 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打印文件權限。
  • 我們知道 group-execute 權限是字符號 7,所以我們用cut提取它
  • 我們使用grep來檢查結果是否為S (表示為 setgid),如果是,我們對具有 setgid 的文件做任何我們想做的事情。

使用find

我發現(哈哈) find 對於根據權限查找內容非常有用。

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

使用 setgid 查找所有文件/目錄並取消設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM