我想使用 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
您可以使用tee
throughsudo
以另一个用户的身份写入文件。
在你编写目录列表的用例中,它变得简单
sudo -u ernesto ls some-directory | sudo -u ernesto tee some-file