将输出重定向为其他用户[重复]

问题描述 投票:0回答:4

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

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

linux pipe sudo redirectstandardoutput
4个回答
11
投票

尝试:

sudo sh -c "command > output.txt"

这样你应该能够运行任何命令并随处书写。

如果你确实需要,出于某种我不明白的原因,以用户A执行命令并以用户B写入,你可以执行以下操作:

sudo -u A command | sudo -u B tee /somewhere > /dev/null

其中A和B是您想要的用户。仅当不希望命令输出在 stdout 上重定向时才需要

> /dev/null
部分。


8
投票

您可以使用

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


2
投票

避免将东西通过管道输送回来然后再输送到

/dev/null
的另一种选择是

sudo command | sudo dd of=output.txt

0
投票

也许我误解了原来的问题。

如果您想捕获

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重定向来做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.