猿问

如何使用sudo将输出重定向到没有写入权限的位置?

如何使用sudo将输出重定向到没有写入权限的位置?

我在我们的一个开发RedHat Linux盒上获得了sudo访问权,我似乎发现自己经常需要将输出重定向到我通常没有写访问权限的位置。

问题是,这个人为的例子行不通:

sudo ls -hal /root/ > /root/test.out

我刚收到回复:

-bash: /root/test.out: Permission denied

我怎么才能让这个起作用?


慕容森
浏览 792回答 3
3回答

翻阅古今

这里有人建议说:sudo ls -hal /root/ | sudo tee /root/test.out > /dev/null这也可用于将任何命令重定向到您无法访问的目录。这是因为TEE程序实际上是一个“对文件的回显”程序,重定向到/dev/null是为了停止它,并将它输出到屏幕上,使其与上面设计的原始示例相同。

慕姐8265434

问题是命令在sudo,但是重定向获取在用户下运行的。这是由shell来完成的,你对此无能为力。sudo command > /some/file.log `-----v-----'`-------v-------'    command       redirection绕过这一点的通常方法是:将命令包装在您在sudo下调用的脚本中。如果命令和/或日志文件发生更改,则可以让脚本将这些作为参数。例如:sudo log_script command /log/file.txt调用shell并将命令行作为参数传递给-c这对于一个OFF复合命令特别有用。例如:sudo bash -c "{ command1 arg; command2 arg; } > /log/file.txt"
随时随地看视频慕课网APP
我要回答