Por que posso atualizar um arquivo de propriedade do root usando sudo vi, mas não anexar uma linha a ele com sudo echo "Thing" >> file?

Por que posso atualizar um arquivo de propriedade do root usando sudo vi, mas não anexar uma linha a ele com sudo echo "Thing" >> file?

Eu gostaria que o script que está fazendo migrações automatizadas de sites de outro pudesse anexar Inclui ao arquivo /etc/httpd/conf.d/vhosts.conf.

No entanto, quando tento usar echo para anexar uma string ao final do arquivo, recebo o seguinte:

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

e ainda assim posso vi /etc/httpd/conf.d/vhosts.conf, adicionar a linha e :wq o arquivo para salvá-lo e fechá-lo.

o que estou perdendo?

Responder1

Sudo eleva o processo que ele chama, não eleva nenhum processamento do shell atual, como redirecionamento, globbing, etc.

O redirecionamento de arquivo >> /etc/httpd/conf.d/vhosts.confestá sendo processado pelo seuatualshell, que ainda está em execução com seus privilégios atuais.

Você poderia tentar algo assim.

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

Ou

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

informação relacionada