In diesem Tutorial zeige ich Ihnen, wie Sie die sudo Befehl, wenn Sie ihn mit Umleitung oder Pipe verwenden. Beim Benutzen sudo mit Umleitung (>) oder Pipe (|), erhalten Sie Zugriff verweigert Fehlermeldung in bash Ausgang. Weiter hier zeige ich Ihnen verschiedene Möglichkeiten, dieses Problem zu beheben.
Benutzen sudo mit T-Stück
Um beispielsweise die Ausgabe des Befehls ‘echo 1’ in die Datei ‘ip_forward’ umzuleiten, führen Sie Folgendes aus:
$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward
bash: /proc/sys/net/ipv4/ip_forward: Permission denied
Obenstehendes sudo Befehl führte zu Zugriff verweigert weil die Umleitung durch die . erfolgt Hülse die keine Schreibberechtigung hat.
Wir können benutzen sudo Befehl mit tee-Befehl, um diesen Fehler zu beheben:
$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
Bei Verwendung des obigen Ansatzes wird der ausgeführte Befehl vor der Pipe nicht als Root ausgeführt (Echo 1). Das ist nützlich, wenn Sie nur die Ausgabe eines Programms benötigen, das keine Root-Rechte erfordert.
Falls der Befehl vor der Pipe root erfordert, könnten wir verwenden sudo vor jedem Befehl, als:
$ sudo echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward > /dev/null
Der ähnliche Ansatz, den wir verwenden können, um “1” in die Datei “ip_forward” zu schreiben, wie in den vorherigen Beispielen, besteht darin, den Prozess zum Schreiben in die Datei zu erhöhen.
Ein example wäre wie folgt:
$ sudo tee /proc/sys/net/ipv4/ip_forward > /dev/null << EOF
1
EOF
Shell ausführen mit sudo -C
Ein anderer beliebter Ansatz wäre, eine andere Shell als root mit dem -c
Möglichkeit.
Beispiel:
$ sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
Führen Sie die Shell mit aus sudo -S
Eine andere Möglichkeit wäre, eine Shell mit zu starten sudo -s
und führen Sie dann den Befehl aus:
$ sudo -s
# echo 1 > /proc/sys/net/ipv4/ip_forward
# ^D
$
Durch die Verwendung eines Bash-Skripts
Es gibt noch eine andere Art zu laufen sudo mit Umleitung oder Pipe, und zwar durch Erstellen von a bash Skript mit all Ihren Befehlen und führen Sie dieses Skript mit aus sudo.
Mal sehen, wie wir das erreichen können. Zuerst müssen wir mit einem beliebigen Texteditor wie nano, vim, gedit oder einem anderen eine neue Datei erstellen. Nennen wir es “myscript.sh”.
Fügen Sie dann die folgenden Befehle in myscript.sh ein und speichern Sie die Datei:
#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
Jetzt müssen Sie nur noch die Datei myscript.sh mit ausführen sudo Befehl:
$ sudo myscript.sh
Fazit
Wir haben mehrere Verwendungsmöglichkeiten gesehen sudo mit Umleitung oder Pipe und vermeiden Sie Fehler mit verweigerter Berechtigung. Wenn Sie eine andere Möglichkeit kennen, dies zu erreichen, oder Fragen haben, posten Sie diese bitte im Kommentarbereich unten.