将输出重定向为其他用户

时间:2012-07-02 09:49:23

标签: linux pipe sudo redirectstandardoutput

我需要sudo作为一个不同的用来执行某个命令。我正在尝试使用strace并将其输出重定向到文件中以供进一步分析。棘手的部分是,作为sudo'ed用户,我没有权限写入我要保存文件的位置。(并且没有sudo'ing我没有权限执行该命令开始) 。

那么如何以用户A的身份执行命令,并将其输出重定向为用户B?

4 个答案:

答案 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重定向。