為什麼我可以使用 sudo vi 更新 root 擁有的文件,但不能使用 sudo echo "Thing" >> file 向其附加一行?

為什麼我可以使用 sudo vi 更新 root 擁有的文件,但不能使用 sudo echo "Thing" >> file 向其附加一行?

我希望有一個腳本可以從另一個網站自動遷移網站,並將 Includes 附加到 /etc/httpd/conf.d/vhosts.conf 檔案中。

但是,當我嘗試使用 echo 將字串附加到文件末尾時,我得到以下資訊:

$ sudo echo "Include thing" >> /etc/httpd/conf.d/vhosts.conf
-bash: /etc/httpd/conf.d/vhosts.conf: Permission denied

但我可以 vi /etc/httpd/conf.d/vhosts.conf,添加行和 :wq 檔案來保存並關閉它。

我缺什麼?

答案1

Sudo 提升它所呼叫的進程,它不會提升任何目前 shell 的處理,如重定向、通配符等。

>> /etc/httpd/conf.d/vhosts.conf您正在處理檔案重定向目前的shell,它仍在您目前的權限下運行。

你可以嘗試這樣的事情。

sudo bash -c 'echo "Include thing" >> /etc/httpd/conf.d/vhosts.conf'

或者

echo "Include thing" | sudo tee -a /etc/httpd/conf.d/vhosts.conf

相關內容