![为什么我可以使用 sudo vi 更新 root 拥有的文件,但不能使用 sudo echo "Thing" >> file 向其中添加一行?](https://linux22.com/image/747691/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20sudo%20vi%20%E6%9B%B4%E6%96%B0%20root%20%E6%8B%A5%E6%9C%89%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%8C%E4%BD%86%E4%B8%8D%E8%83%BD%E4%BD%BF%E7%94%A8%20sudo%20echo%20%22Thing%22%20%3E%3E%20file%20%E5%90%91%E5%85%B6%E4%B8%AD%E6%B7%BB%E5%8A%A0%E4%B8%80%E8%A1%8C%EF%BC%9F.png)
我想要一个脚本,可以自动从另一个网站迁移网站,并将包含内容附加到 /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