Wie kann ich Befehle mit sudo verwenden, ohne den Eigentümer der Dateien zu ändern?

12

Wenn ich sudo verwende, um einige Aktivitäten mit Dateien durchzuführen, ändern diese Dateien den Besitzer. Wie kann ich Befehle mit sudo verwenden, ohne den Eigentümer der Dateien zu ändern?

Beispieldatei archivos35.sh ist von Apache, aber ich verwende sed (mit usr admin sudo)

$ ls -l
-rwxr-xrw-. 1 apache apache 181 Aug 5 11:56 archivos35.sh

Benutzer adminmit sudo ---

sudo sed -i s/old/new/g archivos35.sh

Wenn Sie diesen Befehl jedoch mit sudo ausführen, wird der Eigentümer der Datei geändert

$ ls -l
-rwxr-xrw-. 1 admin apache 181 Aug 5 11:56 archivos35.sh

Wie kann ich vermeiden, den Befehl mit sudo zu verwenden, um den Eigentümer der Datei zu ändern? Ich möchte nur Änderungen an der Datei vornehmen, ohne den Eigentümer zu ändern.

Dok Gus
quelle
Warum kann Ihr Skript in der Welt geschrieben werden?
Jim L.
Aus Versehen habe ich es mit 756 gesetzt. Ich sollte nicht
Dok Gus

Antworten:

29

Wenn Sie sudozum Ändern der Datei verwenden müssen, wechseln Sie damit zum richtigen Benutzer. Sie müssen nicht brauchen , um root zu wechseln, die nur der Standard ist. In Ihrem Fall möchten Sie also Folgendes tun:

sudo -iu apache sed -i 's/old/new/g' archivos35.sh

Dadurch wird der sedBefehl als Benutzer ausgeführt apache.

terdon
quelle
2

Sie ändern nicht wirklich den Eigentümer der Datei, sondern entfernen die alte Datei und erstellen eine neue. Wenn Sie dies tun, wird die neue Datei im Besitz der Benutzer-ID des Erstellers erstellt. Um dies zu vermeiden, müssen Sie die Datei an Ort und Stelle ändern. Bearbeiten Sie es mit einem Texteditor, der durch Überschreiben der Originaldatei gespeichert wird. Oder führen Sie Ihre sed-Befehle mit Ausgabe in eine temporäre Datei aus und kopieren Sie die temporäre Datei über die Originaldatei.

Kyle Jones
quelle
1
Sie würden denken, dass die -iOption aka --in-placetatsächlich Inplace ändern würde ...
JShorthouse
Mit der @teldon-Antwort habe ich es geschafft, das zu tun, was ich brauche. Mit sed ändere ich den Ort, ohne die Datei zu öffnen.
Dok Gus
1
@JShorthouse Du würdest denken, aber das tut es nicht, zumindest nicht überall.
Kyle Jones
3
@JShorthouse Die meisten sogenannten 'In-Place'-Bearbeitungen werden nicht durchgeführt. Meistens werden temporäre Dateien geändert und anschließend über das Original verschoben (und dies schließt die meisten, wenn nicht alle Implementierungen von sed. Und perl. Sowie die meisten anderen Programme ein mit der Option "In-Place-Bearbeitung"). Wenn Sie eine direkte Bearbeitung wünschen, verwenden Sie einen skriptfähigen Texteditor wie edoder exoder vi/ vim.
cas
1
Sogar einige Texteditoren verwenden beim Schreiben der Datei die Methode temp + rename, um im Falle eines Absturzes beim Schreiben eine Ausfallsicherheit zu gewährleisten. Emacs tut dies zum Beispiel standardmäßig, aber Sie können es mit der Konfiguration überschreiben.
Barmar