特定のコマンドを実行するために使用される別のsudoとしてsudoを実行する必要があります。私はそれでstraceを使用し、さらに分析するためにその出力をファイルにリダイレクトしようとしています。トリッキーな部分は、sudoを実行したユーザーとして、ファイルを保存する場所に書き込む権限がないことです(sudoを実行しないと、最初からそのコマンドを実行する権限がありません)。 。
では、コマンドをユーザーAとして実行し、その出力をユーザーBとしてリダイレクトするにはどうすればよいですか?
特定のコマンドを実行するために使用される別のsudoとしてsudoを実行する必要があります。私はそれでstraceを使用し、さらに分析するためにその出力をファイルにリダイレクトしようとしています。トリッキーな部分は、sudoを実行したユーザーとして、ファイルを保存する場所に書き込む権限がないことです(sudoを実行しないと、最初からそのコマンドを実行する権限がありません)。 。
では、コマンドをユーザーAとして実行し、その出力をユーザーBとしてリダイレクトするにはどうすればよいですか?
試してみてください:
sudo sh -c "command > output.txt"
このようにして、任意のコマンドを実行し、どこにでも書き込むことができるはずです。
どういうわけか、私にはわからないことが本当に必要な場合は、ユーザーAとしてコマンドを実行し、ユーザーBとして書き込むと、次のことができます。
sudo -u A command | sudo -u B tee /somewhere > /dev/null
ここで、AとBは必要なユーザーです。この> /dev/null
部分は、コマンド出力をstdoutにリダイレクトしたくない場合にのみ必要です。
あなたはそのために使うことができますtee
。stdin
プログラムは、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
。
ものを元に戻したり、元に戻したりすることを回避する別のオプション/dev/zero
は、
sudo command | sudo dd of=output.txt
たぶん私は元の質問を誤解しました。
の出力全体をキャプチャする場合は、最初sudo strace foo
に実行するのが最も簡単な方法です。script
をキャプチャしたい場合は、stderr
試しsudo strace foo
てみてくださいsudo strace foo 2> >(tee logfile)
。
の出力のみをキャプチャし、の出力をキャプチャしたくない場合strace
はfoo
、を試すことができますsudo strace -o /dev/fd/3 foo 3> >(tee logfile)
。
使用できない場合3> >
でも、fdリダイレクトを使用して使用できると思います。