为了执行某个命令,我需要将 sudo 作为不同的使用。我正在尝试使用 strace 并将其输出重定向到文件中以进行进一步分析。棘手的部分是,作为 sudo'ed 用户,我无权写入要保存文件的位置。(如果没有 sudo'ing,我无权执行该命令开始) .
那么如何以用户 A 的身份执行我的命令,并将其输出重定向为用户 B?
为了执行某个命令,我需要将 sudo 作为不同的使用。我正在尝试使用 strace 并将其输出重定向到文件中以进行进一步分析。棘手的部分是,作为 sudo'ed 用户,我无权写入要保存文件的位置。(如果没有 sudo'ing,我无权执行该命令开始) .
那么如何以用户 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
仅当不希望命令输出也被重定向到标准输出时才需要该部分。
你可以使用tee
它。程序读取stdin
和写入一个或多个文件以及标准输出的输入:
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
。
也许我误解了最初的问题。
如果要捕获整个输出,sudo strace foo
那么最简单的方法是先运行script
。
如果你想捕捉stderr
你sudo strace foo
可以尝试sudo strace foo 2> >(tee logfile)
。
如果您只想捕获的输出strace
而不是 offoo
那么您可以尝试sudo strace -o /dev/fd/3 foo 3> >(tee logfile)
.
如果你不能使用3> >
,那么我认为你仍然可以使用 fd 重定向来做到这一点。
另一个避免管道回输的选项/dev/zero
是
sudo command | sudo dd of=output.txt