为什么 sudo 不能将 stdout 重定向到 /etc/file,但 sudo 'nano' 或 'cp' 可以?

为什么 sudo 不能将 stdout 重定向到 /etc/file,但 sudo 'nano' 或 'cp' 可以?

为什么使用重定向、使用sudo以下命令时会出现错误?

$ sudo printf "foo" >/etc/file
bash: /etc/file: Permission denied

$ sudo printf "foo" ~/file; cat ~file >/etc/file 
bash: /etc/file: Permission denied

...但是当我使用编辑器或cp.
我想我以前从未尝试过这个,所以我不知道我的系统是否有问题,或者这是否正常。这似乎有点限制正常,但是(?)也许它是有意限制的......(使用Ubuntu)

答案1

这是正常的。后面的文件>不是由在 下运行的进程打开的sudo,而是由 shell 打开的,而 shell 则不是。试试这个:

printf "foo" | sudo tee /etc/file

相关内容