Warum kann ich eine Datei, deren Eigentümer root ist, mit „sudo vi“ aktualisieren, aber nicht mit „sudo echo "Thing" >> file“ eine Zeile daran anhängen?

Warum kann ich eine Datei, deren Eigentümer root ist, mit „sudo vi“ aktualisieren, aber nicht mit „sudo echo "Thing" >> file“ eine Zeile daran anhängen?

Ich hätte gerne ein Skript, das automatisierte Migrationen von Websites von einer anderen durchführt und in der Lage ist, Includes an die Datei /etc/httpd/conf.d/vhosts.conf anzuhängen.

Wenn ich jedoch versuche, mit echo einen String an das Ende der Datei anzuhängen, erhalte ich Folgendes:

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

und dennoch kann ich /etc/httpd/conf.d/vhosts.conf vi, die Zeile hinzufügen und :wq zur Datei ausführen, um sie zu speichern und zu schließen.

Was vermisse ich?

Antwort1

Sudo erhöht den aufgerufenen Prozess, jedoch nicht die Verarbeitungsvorgänge der aktuellen Shell, wie Umleitung, Globbing usw.

Die Dateiumleitung >> /etc/httpd/conf.d/vhosts.confwird von IhremaktuellShell, die weiterhin mit Ihren aktuellen Berechtigungen ausgeführt wird.

Du könntest so etwas versuchen.

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

Oder

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

verwandte Informationen