コマンドを実行するために「sudo」権限が必要かどうかを確認する方法は?

コマンドを実行するために「sudo」権限が必要かどうかを確認する方法は?

特定のファイルを読み書きできるかどうかを簡単に確認する方法はありますか?それともこれを行うには「sudo」を使用する必要がありますか?不必要に sudo でコマンドを実行すると、ファイルが root ユーザーを所有者として生成されるため、望ましくありません。

それはまるで

is_readable /path/to/file
if [[ $? == 0 ]]; then
    do_command /path/to/file;
else
    sudo do_command /path/to/file;
fi

答え1

ユーティリティ-wスイッチを試してみてくださいtest

[ -w /path/to/file ] && do_command /path/to/file || sudo do_command /path/to/file

または長いバージョン:

if [ -w /path/to/file ]; then
  do_command /path/to/file 
else
  sudo do_command /path/to/file
fi

~からマンページ

-w FILE
              FILE exists and write permission is granted

答え2

is_readable /path/to/fileスペルはtest -r /path/to/fileor[ -r /path/to/file ]またはです[[ -r /path/to/file ]]。バラよりシングルまたはダブルカッコの使用 - bashどう違うか調べてください。is_writable使用-w

ファイルにアクセスできないことは、「sudoが必要」を示す良い指標ではありません。ルートの代わりに他のユーザーまたはグループとして実行する必要があるかもしれません。特定のシステムでrootアクセス権を取得する方法は、実行するのではなく、sudo他のメカニズム(su、、calife...)を実行することです。既知の構成を使用して既知のシステムのファイルへのアクセスをテストしてもかまいません。これを行うスクリプトをデプロイする場合は、これは信頼できるテストではなく経験的なテストにすぎないことを覚えておいて、ユーザーが判断を簡単に無視できるようにしてください。

ファイルが読み取り可能であるとテストしても、実際にファイルを読み取ることができるという意味ではありません。ファイルの権限が同時に変更された可能性があります。場合によっては、ファイル権限が言うものとアクセスチェックが実際に実行するものとの間に矛盾があります。つまり、ローカルファイルシステムが理解できないエキゾチックな属性を持つリモートファイルシステム、SELinuxなどのセキュリティフレームワークなどがあります。

関連情報