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?
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:
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)
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
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
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
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.
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.