そのようにファイルが存在するかどうかを確認したい
[ -f /path/to/file/ ]
しかし、私はこのコマンドを通常のユーザーとして実行しており、ファイルの所有者はrootです。 Sudoを使用してこれを実現するにはどうすればよいですか。
Sudo [ -f /path/to/file/ ]
動作しません。
絶対パスを使用していて、-f
(「ファイルが存在し、通常のファイルです」)が実際に実行したいテストである限り、あなたが説明していることはうまくいくはずです。
質問の投稿の末尾に/
が表示されます-ディレクトリをテストしていますか?それは-d
、または単に-e
である必要があります(「タイプに関係なく、その名前で何かが存在します」)
また、途中で何かが読めない場合を除き、test
([
)は、rootが所有するファイルが存在するかどうかを通知できるはずです(たとえば、[ -f /root/.ssh/known_hosts ]
はおそらく失敗します)。 /root/.sshディレクトリが通常のユーザーに読み取れない(または少なくともすべきではない)ためです。[ -f /etc/crontab ]
は成功するはずです)。
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
他の回答に加えて、テストとSudo認証の失敗の区別は、最初にSudo true
を実行することで実行できます。私が知っているほとんどの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