使用 sudo 重定向输出

使用 sudo 重定向输出

我想使用 sudo 以另一个用户的身份运行命令,并将该命令的输出重定向为该用户。例如,如果我运行:

touch some-file

在用户 simon 下,some-file 将归用户 simon 所有。如果我运行:

sudo -u ernesto touch some-file

那么 some-file 归用户 ernesto 所有,因为我指定要以 ernesto 身份运行 touch 命令。最后,如果我运行:

sudo -u ernesto ls /some-folder/ > some-file

some-file 再次归用户 simon 所有,因为 > 运算符将 > 之前的整个命令的输出重定向到 some-file(实际上由用户 simon 运行)。我需要获取以 ernesto 身份列出目录的输出,但使用 sudo,因为我想要列出的目录归 ernesto 所有,我无法使用 simon 列出目录。

它必须使用 sudo,因为用户 ernesto 允许我无需密码即可运行 sudo 命令。

我试过

sudo -u ernesto $(ls /some-folder/ > some-file)
sudo -u ernesto `ls /some-folder/ > some-file`
sudo -u ernesto 'ls /some-folder/ > some-file'
sudo -u ernesto eval(ls /some-folder/ > some-file)
sudo -u ernesto exec(ls /some-folder/ > some-file)

希望其中有些能够奏效,但仍然没有运气。

答案1

您可以使用teethroughsudo以另一个用户的身份写入文件。

在你编写目录列表的用例中,它变得简单

sudo -u ernesto ls some-directory | sudo -u ernesto tee some-file

相关内容