我需要sudo作为一个不同的用来执行某个命令。我正在尝试使用strace并将其输出重定向到文件中以供进一步分析。棘手的部分是,作为sudo'ed用户,我没有权限写入我要保存文件的位置。(并且没有sudo'ing我没有权限执行该命令开始) 。
那么如何以用户A的身份执行命令,并将其输出重定向为用户B?
答案 0 :(得分:9)
尝试:
sudo sh -c "command > output.txt"
通过这种方式,您应该可以运行任何命令并在任何地方写入。
如果您确实需要,由于某些原因我不明白,以用户A执行命令并写为用户B,您可以执行以下操作:
sudo -u A command | sudo -u B tee /somewhere > /dev/null
A和B是您想要的用户。仅当不希望在stdout上重定向命令输出时才需要> /dev/null
部分。
答案 1 :(得分:5)
您可以使用tee
。程序读取stdin
并将输入写入一个或多个文件以及stdout:
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
。
答案 2 :(得分:0)
另一个避免将东西回流到/dev/zero
的选项是
sudo command | sudo dd of=output.txt
答案 3 :(得分:0)
也许我误解了原来的问题。
如果您想捕获sudo strace foo
的整个输出,那么最简单的方法是首先运行script
。
如果您想捕获stderr
的{{1}},可以尝试sudo strace foo
。
如果您只想捕获sudo strace foo 2> >(tee logfile)
而不是strace
的输出,那么您可以尝试foo
。
如果你不能使用sudo strace -o /dev/fd/3 foo 3> >(tee logfile)
,那么我认为你仍然可以使用fd重定向。