sudoを使用してファイルが存在するかどうかを確認するにはどうすればよいですか?


13

そのようなファイルが存在するかどうかを確認したい

[ -f /path/to/file/ ]

ただし、私はこのコマンドを通常のユーザーとして実行しており、ファイルの所有者はrootです。どうすればsudoを使用してこれを達成できますか。

sudo [ -f /path/to/file/ ] 動作しません。


2
私のシステムでは動作します。症状は何ですか?-eではなく-fを使用してもよろしいですか?
-b0fh

回答:


11

絶対パスを使用している限り-f(および「ファイルが存在し、通常のファイルである」)、実際に実行したいテストである限り、記述している内容は正常に機能します。

/質問に投稿した内容の末尾に表示されます-ディレクトリをテストしていますか?それは-d、または単純に-e(「その名前で何かが存在する-タイプに関係なく」)

また、道に沿って何かが読み取れない場合を除きことに注意してくださいは、test[)など(rootが所有し、ファイルが存在するかどうかを伝えることができる必要があり[ -f /root/.ssh/known_hosts ]、おそらく失敗するでしょう、/root/.sshディレクトリではありませんので(あるいは少なくともshouldn 't be)通常のユーザーが読み取り可能です。 [ -f /etc/crontab ]成功する必要があります。


4
問題が発生する可能性があります:sudoコマンドが失敗した場合(不正なパスワード、/ etc / sudoersで許可されていないなど)、ファイルが存在しない場合と同じ結果が得られます。
ゴードンデイヴィソン

1
@Gordon-true:私の答えはsudo働く部分に基づいています:)
voretaq7

13
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

ルカ・ボリオーネの答えは私にとって完璧に機能しました。ルートでのみ読み取り可能なディレクトリの奥深くにあるファイルの存在をテストする必要がありました。
ウォールヒーター

1

他の回答に追加して、最初にを実行すると、テストまたは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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.