シェル スクリプトを使用してファイルのアクセス許可をテストするにはどうすればよいですか?

シェル スクリプトを使用してファイルのアクセス許可をテストするにはどうすればよいですか?

次のスクリプトを root として実行して、ファイルに読み取り権限があるかどうかをテストしています。

#!/usr/bin/env bash

FILE="/etc/shadow"

if ! [ -r $FILE ]; then
  echo "Hello"
fi

exit 0

Hello理想的には、読み取り権限がないため、スクリプトを印刷する必要があります。しかし、それは実行されません。

ls -ltrh /etc/shadow
---------- 1 root root 7.1K Jun  7 06:59 /etc/shadow

スクリプトで何を変更する必要がありますか?

答え1

ディレクトリ、ファイル、リンクの権限に関する情報を確認する

stat -L -c "%a %G %U" FILE or DIRECTORY

答え2

#!/usr/bin/env bash

FILE="/etc/shadow"

if ! [[ $(stat -c "%A" $FILE) =~ "r" ]]; then
  echo "Hello"
fi

exit 0

これにより、現在のユーザーがファイルを読み取り可能かどうかを確認するのではなく、ファイルに読み取り権限があるかどうかがチェックされます。

関連情報