¿Por qué puedo actualizar un archivo propiedad de root usando sudo vi, pero no agregarle una línea con sudo echo "Thing" >> file?

¿Por qué puedo actualizar un archivo propiedad de root usando sudo vi, pero no agregarle una línea con sudo echo "Thing" >> file?

Me gustaría que un script que realice migraciones automáticas de sitios web desde otro pueda agregar Incluye al archivo /etc/httpd/conf.d/vhosts.conf.

Sin embargo, cuando intento usar echo para agregar una cadena al final del archivo, aparece esto:

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

y aún así puedo vi /etc/httpd/conf.d/vhosts.conf, agregar la línea y :wq el archivo para guardarlo y cerrarlo.

¿Qué me estoy perdiendo?

Respuesta1

Sudo eleva el proceso que llama, no eleva ninguno de los procesamientos del shell actual, como redirección, globbing, etc.

La redirección de archivos >> /etc/httpd/conf.d/vhosts.confestá siendo procesada por suactualshell, que todavía se está ejecutando con sus privilegios actuales.

Podrías intentar algo como esto.

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

O

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

información relacionada