将输出重定向为不同的用户[重复]

Posted

技术标签:

【中文标题】将输出重定向为不同的用户[重复]【英文标题】:Redirect output as a different user [duplicate] 【发布时间】:2012-07-02 17:24:30 【问题描述】:

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

那么我怎样才能以用户 A 的身份执行我的命令,并将它的输出重定向为用户 B?

【问题讨论】:

【参考方案1】:

尝试:

sudo sh -c "command > output.txt"

这样你应该可以运行任何命令并在任何地方写入。

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

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

其中 A 和 B 是您想要的用户。 > /dev/null 部分仅在不希望命令输出也被重定向到标准输出时才需要。

【讨论】:

你对那些多余的 sh 调用做了什么?如果您将sudotee 结合起来,整个事情就可以完美运行…… 错误。 sudo -u nobody ls | sudo -u root tee > /test 我得到bash: /test: Permission denied。实际上我无法解释为什么,但在我的系统上,我需要调用 sh(或 bash)。如果有人有解释,欢迎。 那是因为你使用了tee 错误:)。请阅读手册页。您将要写入的文件作为 /argument/ 提供。在您的示例中,管道由您自己的用户完成(因为> 是从调用者的shell 解释的),而正确使用tee,该部分的调用者是相关的(在这种情况下为root......) 哦,谢谢。你说得对。更新我的答案并为您的答案投票,值得一票。 :)【参考方案2】:

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

【讨论】:

也许与答案无关,但我只需要执行此操作:echo "the text content" | sudo -u developer tee output.txt【参考方案3】:

另一种避免将内容通过管道传回 /dev/zero 的选项是

sudo command | sudo dd of=output.txt

【讨论】:

【参考方案4】:

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

如果您想捕获sudo strace foo 的全部输出,那么最简单的方法是先运行script

如果您想捕获sudo strace foo 中的stderr,可以尝试sudo strace foo 2> >(tee logfile)

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

如果您不能使用3> >,那么我认为您仍然可以使用 fd 重定向来做到这一点。

【讨论】:

以上是关于将输出重定向为不同的用户[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Express.js 将用户重定向到不同的网页? (是的,我尝试过使用`redirect`方法)[重复]

将标准输出重定向到文件[重复]

将所有输出重定向到 Bash 中的文件 [重复]

通过bash将输出重定向到文件[重复]

将程序输出重定向到文件和shell [重复]

Shell重定向