为什么我可以使用 sudo vi 更新 root 拥有的文件,但不能使用 sudo echo "Thing" >> file 向其中添加一行?

为什么我可以使用 sudo vi 更新 root 拥有的文件,但不能使用 sudo echo "Thing" >> file 向其中添加一行?

我想要一个脚本,可以自动从另一个网站迁移网站,并将包含内容附加到 /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

相关内容