File-Permissions

為什麼我可以使用 sudo vi 更新 root 擁有的文件,但不能使用 sudo echo ‘Thing’ >> file 在其上追加一行?

  • January 27, 2020

我希望腳本能夠自動從另一個網站遷移網站,以便將包含附加到 /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 文件以保存並關閉它。

我錯過了什麼?

Sudo 提升了它呼叫的程序,它不會提升目前 shell 的任何處理,如重定向、萬用字元等。

文件重定向>> /etc/httpd/conf.d/vhosts.conf正在由您目前的shell 處理,該 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

引用自:https://serverfault.com/questions/1000184