Warm tip: This article is reproduced from serverfault.com, please click

linux-使用sudo重定向输出

(redirecting output using sudo)

发布于 2021-03-19 08:25:58

我想以其他用户的身份使用sudo运行命令,然后以该用户的身份重定向该命令的输出。例如,如果我运行:

touch some-file

在用户simon下,某些文件将由用户simon拥有。如果我运行:

sudo -u ernesto touch some-file

那么某些文件由用户ernesto拥有,因为我指定我要以ernesto身份运行touch命令。最后,如果我运行:

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

某些文件再次由用户simon拥有,因为>运算符会将>之前的整个命令的输出重定向到某个文件(实际上是由用户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)

希望这种方法能够奏效,但仍然没有运气。

Questioner
Simon Ernesto Cardenas Zarate
Viewed
12
Ginnungagap 2019-01-24 15:07:02

你可以使用tee直通sudo作为另一个用户写入文件。

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

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