解決策 1:
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
テストのマニュアル ページ
反対に、特定のユーザーがファイルまたはディレクトリを読み取れるかどうかをルートから確認したい場合は、
if sudo -u username test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
解決策 2:
絶対パスと -f
を使用している限り、あなたが説明していることはうまくいくはずです (「ファイルが存在し、通常のファイルです」) は、実際に実行したいテストです。
末尾に /
が表示されます あなたの質問に投稿したもので-ディレクトリをテストしていますか?それは -d
でなければなりません 、または単に -e
(「その名前の何かが存在します - タイプに関係なく」)
また、途中で読めないものがない限り test
([
) は、ルートが所有するファイルが存在するかどうかを通知できるはずです (例:[ -f /root/.ssh/known_hosts ]
/root/.ssh ディレクトリがそうではない (または少なくとも すべきではない ため)、おそらく失敗します。 ) 通常のユーザーが読み取ることができます。 [ -f /etc/crontab ]
成功するはずです)。
解決策 3:
他の回答に加えて、最初に sudo true
を実行することで、テストまたは sudo 認証の失敗を区別できます。 .私が知っているほとんどの sudo 実装は、短期間で再認証を必要としません。
例:
if sudo true; then
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
else
echo "SUDO AUTHENTICATION FAILED"
fi