So fügen Sie einer Datei, die nur über Root-Schreibberechtigung verfügt, eine Zeile hinzu und setzen die Skriptausführung fort

9

Ich versuche, Bash-Scripting zu lernen. Ich arbeite an einem praktischen Problem und muss irgendwann eine Zeile zu einer Datei hinzufügen, für die eine rootSchreibberechtigung erforderlich ist .

Der Code sieht folgendermaßen aus:

# some code
echo "add this line to the code" >> fileName
# some code

Ist es möglich, das Skript irgendwie nach dem Root-Passwort fragen zu lassen, das Passwort zu validieren und bei erfolgreicher Authentifizierung die Datei zu ändern? Das Skript sollte dann in den Benutzermodus zurückkehren und die Befehlsausführung fortsetzen.

Alex
quelle

Antworten:

13

Auf der sudoManpage gibt es einen Tipp, der erklärt, wie man so etwas macht. Hier ist mein Einzeiler:

#!/usr/bin/bash
sudo sh -c "echo \"add this line to the code\" >> fileName"

Natürlich müssen Sie zuerst Ihren Benutzer so einrichten, dass er über sudoBerechtigungen verfügt. Die shShell wird aufgrund der Umleitung in die Root-Datei verwendet. Ich musste mich auch den Anführungszeichen für den echoBefehl entziehen .

SigueSigueBen
quelle
2

su ist auf den meisten Unix-Systemen verfügbar und sollte funktionieren:

su root -c 'echo "add this line to the code" >> fileName'
Wunder173
quelle
Im Gegensatz zu mit sudoscheinen Passwörter nicht zwischengespeichert zu werden su.
Ryne Everett
@ Ryne Everett: Ich kenne Sudo nicht. Aber das Verhalten von 'su' entspricht tatsächlich dem Skript des OP. Meistens benutze ich 'su' umgekehrt: von root zu einem anderen Benutzer wechseln. In diesem Fall wird überhaupt kein Passwort benötigt.
Wunder173
1

Sie könnten verwenden teemit sudo:

echo "add this line to the code" | sudo tee -a filename > /dev/null

echoDie Ausgabe wird mit |( Pipe ) an umgeleitet sudo tee. teeLiest von der Standardeingabe und schreibt in diesem Fall eine bestimmte Datei in die Standardausgabefilename . -a(oder --append) macht teeAnhängen an Dateien, ohne die die Dateien überschrieben würden. Wie teeausgeführt mit sudoes Dateien mit root-Berechtigungen öffnet. Schließlich > /dev/nullunterdrückt tee‚s Ausgabe an die Standardausgabe .

Ein Vorteil der Verwendung, teeanstatt nur den gesamten Befehl einschließlich der Umleitung mit su -coder zu starten, sudo sh -cbesteht darin, dass Sie das Anführungszeichen des ursprünglichen Befehls in keiner Weise ändern müssen (Anführungszeichen, die bereits Anführungszeichen enthalten, können manchmal ziemlich hässlich werden).

Adaephon
quelle
0

Versuchen Sie dies Dieser Befehl ist unter Unix und Linux verfügbar.

sudo sh -c "echo 'add this line to the code' >> fileName"

JongYoung
quelle
-2

Würde den Trick machen:

ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"
user1934677
quelle
Warum ssh? Sie müssen nicht sumit sudound Sie müssen auch nicht angeben, rootda dies die Standardeinstellung ist. Alles in allem wären ein bisschen mehr Erklärungen nett, da das OP etwas lernen wollte und nicht nur ein Problem gelöst.
Adaephon
Ich denke, Sie werden Probleme mit Ihren doppelten Anführungszeichen bekommen
Wunder173