Dies ist eine ziemlich einfache Frage zu Sudo-Berechtigungen unter Linux, zumindest scheint es so, als ob es so sein sollte.
Es gibt viele Fälle, in denen ich nur etwas an /etc/hosts
eine ähnliche Datei anhängen möchte, dies aber am Ende nicht kann, weil beides >
und >>
auch mit root nicht erlaubt sind.
Gibt es eine Möglichkeit, diese Arbeit zu machen, ohne zu su
oder sudo su
in root zu müssen?
echo 'tmpfs /tmp tmpfs defaults 0 0' | sudo tee /etc/fstab
tun würdetee -a
anstelle von seintee --append
.-a
--append
Flag ( ) würde der Befehl die gesamte Datei mit der angegebenen Zeichenfolge überschreiben, anstatt sie an das Ende anzuhängen .Das Problem ist, dass die Shell eine Umleitung ausgibt, nicht Sudo oder Echo. Dies geschieht also als Ihr normaler Benutzer.
Versuchen Sie das folgende Code-Snippet:
quelle
sh
kann Echo Escape-Sequenzen wie\t
in einfachen Anführungszeichen interpretieren . Sie könntenprintf %s 'something'
stattdessen verwenden.sudo /bin/bash -c "echo 'fs.inotify.max_user_watches = 524288' > /etc/sysctl.d/60-golang-inotify.conf"
zum Beispiel.Das Problem ist, dass Ihre Shell die Umleitung übernimmt. Es wird versucht, die Datei mit Ihren Berechtigungen zu öffnen, nicht mit denen des Prozesses, den Sie unter sudo ausführen.
Verwenden Sie vielleicht so etwas:
quelle
sudo
die Umgebung (aus Sicherheitsgründen) nicht an den Unterprozess weitergegeben wird. Sie könnensudo -E
diese Einschränkung verwenden , um sie zu umgehen.sudo sh -c "echo 'something' >> $FILENAME"
, mit doppelten Anführungszeichen, dies wird funktionieren - die Variablensubstitution durch die äußere Schale getan, nicht die sudoed Shell.quelle
Tun
sollte arbeiten. Das Problem ist, dass> und >> von Ihrer Shell behandelt werden, nicht vom Befehl "sudoed". Die Berechtigungen sind also Ihre und nicht die des Benutzers, in den Sie "sudoing".
quelle
Für Neugierige möchte ich darauf hinweisen, dass Sie auch einen Heredoc (für große Blöcke) zitieren können:
quelle
"
aber der Befehl nicht fehlschlägt.)In Bash können Sie
tee
in Kombination mit verwenden> /dev/null
, um stdout sauber zu halten.quelle
Mit Yoo Antwort , setzen Sie diese in Ihre
~/.bashrc
:Jetzt kannst du rennen
sudoe 'deb blah # blah' /etc/apt/sources.list
Bearbeiten:
Eine vollständigere Version, mit der Sie Eingaben in eine Datei leiten oder von dieser umleiten können. Sie enthält a
-a
Schalter zum Deaktivieren des Anhängens enthält (der standardmäßig aktiviert ist):quelle
Sie können auch
sponge
aus demmoreutils
Paket verwenden und müssen die Ausgabe nicht umleiten (dh keintee
Rauschen zum Ausblenden):quelle
Durch die Nutzung sed -i mit $ a können Sie nach der letzten Zeile Text anhängen, der sowohl Variablen als auch Sonderzeichen enthält.
Beispiel: Hinzufügen von $ NEW_HOST mit $ NEW_IP zu / etc / hosts:
sed Optionen erklärt:
quelle
Echo 'Hallo Welt' | (sudo tee -a /etc/apt/sources.list)
quelle
Wie wäre es mit:
Echo Text | sudo dd status = none of = privilegierte
Datei Ich möchte / proc / sys / net / ipv4 / tcp_rmem ändern.
Ich habe
Folgendes getan: sudo dd status = keine von = / proc / sys / net / ipv4 / tcp_rmem <<< "4096 131072 1024000"
eliminiert das Echo mit einem einzeiligen Dokument
quelle
Das hat bei mir funktioniert: ursprünglicher Befehl
Arbeitsbefehl
quelle
tee -a
. Nurtee
wird die Datei überschreiben!Können Sie den Besitz der Datei ändern und sie nach
cat >>
dem Anhängen wieder ändern ?So etwas für dich?
quelle