Почему я могу обновить файл, владельцем которого является пользователь root, с помощью sudo vi, но не могу добавить к нему строку с помощью sudo echo "Thing" >> file?

Почему я могу обновить файл, владельцем которого является пользователь root, с помощью sudo vi, но не могу добавить к нему строку с помощью sudo echo "Thing" >> file?

Мне бы хотелось, чтобы скрипт, выполняющий автоматическую миграцию веб-сайтов с другого сайта, мог добавлять include в файл /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 повышает уровень вызываемого им процесса, но не повышает уровень какой-либо текущей обработки оболочки, такой как перенаправление, подстановка и т. д.

Перенаправление файла >> /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

Связанный контент