6

特定のコマンドを実行するために使用される別のsudoとしてsudoを実行する必要があります。私はそれでstraceを使用し、さらに分析するためにその出力をファイルにリダイレクトしようとしています。トリッキーな部分は、sudoを実行したユーザーとして、ファイルを保存する場所に書き込む権限がないことです(sudoを実行しないと、最初からそのコマンドを実行する権限がありません)。 。

では、コマンドをユーザーAとして実行し、その出力をユーザーBとしてリダイレクトするにはどうすればよいですか?

4

4 に答える 4

10

試してみてください:

sudo sh -c "command > output.txt"

このようにして、任意のコマンドを実行し、どこにでも書き込むことができるはずです。

どういうわけか、私にはわからないことが本当に必要な場合は、ユーザーAとしてコマンドを実行し、ユーザーBとして書き込むと、次のことができます。

sudo -u A command | sudo -u B tee /somewhere > /dev/null

ここで、AとBは必要なユーザーです。この> /dev/null部分は、コマンド出力をstdoutにリダイレクトしたくない場合にのみ必要です。

于 2012-07-02T11:56:04.683 に答える
6

あなたはそのために使うことができますteestdinプログラムは、stdoutだけでなく、1つ以上のファイルへの入力の読み取りと書き込みを行います。

sudo funny_command | sudo tee output_file > /dev/null

/編集:あなたはすでに他の(私の目には劣っている)答えを受け入れましたが、私はとにかくこれを完了します:

上記のユースケースは次のように実行できます

sudo command | sudo tee output.txt > /dev/null
sudo -u A command | sudo -u B tee output.txt > /dev/null

もちろん、リダイレクトを使用する必要はありません/dev/null

于 2012-07-02T10:12:32.873 に答える
0

ものを元に戻したり、元に戻したりすることを回避する別のオプション/dev/zeroは、

sudo command | sudo dd of=output.txt
于 2013-04-26T08:07:26.317 に答える
0

たぶん私は元の質問を誤解しました。

の出力全体をキャプチャする場合は、最初sudo strace fooに実行するのが最も簡単な方法です。script

をキャプチャしたい場合は、stderr試しsudo strace fooてみてくださいsudo strace foo 2> >(tee logfile)

の出力のみをキャプチャし、の出力をキャプチャしたくない場合stracefoo、を試すことができますsudo strace -o /dev/fd/3 foo 3> >(tee logfile)

使用できない場合3> >でも、fdリダイレクトを使用して使用できると思います。

于 2013-04-26T11:14:00.573 に答える