it-swarm.com.de

Wie hängt man eine Datei als sudo an?

Ich will das tun:

echo "something" >> /etc/config_file

Da jedoch nur der Root-Benutzer Schreibrechte für diese Datei hat, kann ich das nicht tun. Aber das Folgende funktioniert auch nicht.

Sudo echo "something" >> /etc/config_file

Gibt es eine Möglichkeit, in dieser Situation an eine Datei anzuhängen, ohne sie zuerst mit einem Editor für Sudo zu öffnen und dann den neuen Inhalt manuell anzufügen?

257
hsribei

Das richtige Werkzeug für die richtige Aufgabe: ' tee '

tee - read from standard input and write to standard output and files

So wird Ihre Kommandozeile

% echo "output" | Sudo tee -a file

Der Vorteil von tee gegenüber der Ausführung von Bash mit Administratorrechten ist:

  • Sie führen Bash nicht mit Administratorrechten aus
  • Nur der Teil "In Datei schreiben" wird mit erweiterten Berechtigungen ausgeführt
  • Das Zitieren eines komplexen Befehls ist viel einfacher
372
akira

Die Umleitung wird in der aktuellen Shell ausgeführt. Um die Umleitung mit erhöhten Rechten durchzuführen, müssen Sie die Shell selbst mit erhöhten Rechten ausführen:

Sudo bash -c "somecommand >> somefile"

Lassen Sie Sudo eine Sub-Shell erzeugen:

Sudo sh -c "echo 'Java_HOME=/usr/lib/jvm/Java-6-Sun' >> /etc/profile"

In diesem Beispiel führt Sudo "sh" mit dem Rest als Argument aus.

(Dies ist ein Beispiel in der Sudo-Manpage)

26
Doug Harris

Normalerweise benutze ich Shell HERE document with Sudo tee -a . Etwas in der Art von:

Sudo tee -a /etc/profile.d/Java.sh << 'EOF'
# configures Java
JAVA_HOME=/usr/lib/jvm/Java-8-Oracle
export Java_HOME
export PATH=$PATH:$Java_HOME/bin
EOF
6

Meiner Meinung nach ist das Beste in diesem Fall dd:

Sudo dd of=/etc/profile <<< END
Java_HOME=/usr/lib/jvm/Java-6-Sun
END
4
user316693

Möglicherweise liegt hier ein Problem mit dem Sudo und der Umleitung vor. Verwenden Sie stattdessen einen Texteditor Ihrer Wahl, um die Zeile hinzuzufügen.

Sudo nano /etc/profile

Oder du könntest es stattdessen mit su versuchen

su
echo ‘Java_HOME=/usr/lib/jvm/Java-6-Sun’ >> /etc/profile
exit
3
Bobby

Benutze ex - way:

Sudo ex +'$put =\"FOO\"' -cwq /etc/profile

und FOO durch die anzuhängende Variable ersetzen.

In einigen Systemen (wie OS X) verfügt die /etc/profile-Datei über 444 Berechtigungen. Wenn Sie also weiterhin Berechtigung verweigert erhalten, überprüfen und korrigieren Sie zuerst die Berechtigung:

Sudo chmod 644 /etc/profile

dann nochmal versuchen.

0
kenorb

Dies funktioniert nicht, wenn Sie versuchen, die Ausgabe von Sudo umzuleiten (mit >>). Was Sie wirklich tun möchten, ist die Ausgabe von echo umzuleiten. Ich schlage vor, Sie verwenden einfach Ihren bevorzugten Editor und fügen diese Zeile manuell zu /etc/profile hinzu. Dies hat den zusätzlichen Vorteil, dass Sie prüfen können, ob /etc/profile bereits Java_HOME setzt.

0
innaM