Linux 将输出重定向为其他用户

Linux 将输出重定向为其他用户,linux,pipe,sudo,redirectstandardoutput,Linux,Pipe,Sudo,Redirectstandardoutput,我需要使用sudo作为一个不同的命令来执行某个命令。我正在尝试使用strace,并将其输出重定向到一个文件中进行进一步分析。棘手的是,作为sudo'ed用户,我没有权限写入我想要保存文件的位置。(没有sudo'ing,我一开始就没有执行该命令的权限) 那么,我如何以用户A的身份执行命令,并将其输出重定向为用户B呢 您可以使用tee。程序读取stdin,并将输入写入一个或多个文件以及stdout: sudo funny_command | sudo tee output_file > /de

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


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

您可以使用
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

尝试:

sudo sh-c“command>output.txt”

通过这种方式,您应该能够运行任何命令并到处写入

如果出于某种原因,我不明白您是否真的需要以用户A的身份执行命令并以用户B的身份写入,您可以执行以下操作:

sudo-u A命令| sudo-u B tee/where>/dev/null


其中A和B是您想要的用户。只有在不希望命令输出也在stdout上重定向时,才需要
/dev/null
部分。

另一个避免将内容管道传输回
/dev/zero
的选项是

sudo command | sudo dd of=output.txt

也许我误解了最初的问题

如果要捕获
sudo strace foo
的整个输出,最简单的方法是首先运行
script

如果您想捕获
sudo strace foo
stderr
,可以尝试
sudo strace foo 2>(tee日志文件)

如果您只想捕获
strace
的输出,而不想捕获
foo
的输出,那么您可以尝试
sudo strace-o/dev/fd/3 foo 3>(tee日志文件)


如果您不能使用
3>
,那么我认为您仍然可以使用fd重定向来执行此操作。

对于那些多余的sh调用,您在做什么?如果你把
sudo
tee
结合起来,整个过程就完美地完成了
sudo-u nobody ls | sudo-u root tee>/test
我得到
bash:/test:权限被拒绝
。实际上我无法解释原因,但在我的系统中,我需要调用sh(或bash)。如果有人有解释,那是欢迎的。这是因为您使用的是
tee
错误:)。请阅读手册。将要写入的文件作为/argument/提供。在您的示例中,管道是由您自己的用户完成的(因为
是从调用方的外壳解释的),而正确使用
tee
则该部分的调用方是相关的(在本例中是
root
)哦,谢谢。你说得对。更新我的答案,投你的一票,值得投上一票。:)也许与答案无关,但我只需要执行以下命令:echo“the text content”| sudo-u developer tee output.txt