GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie verwende ich sudo, um die Ausgabe an einen Ort umzuleiten, an dem ich keine Schreibberechtigung habe?

Ihr Befehl funktioniert nicht, da die Umleitung von Ihrer Shell durchgeführt wird, die keine Berechtigung zum Schreiben in /root/test.out hat . Die Umleitung der Ausgabe ist nicht durchgeführt von sudo.

Es gibt mehrere Lösungen:

  • Führen Sie eine Shell mit sudo aus und geben Sie ihr den Befehl mit -c Möglichkeit:

    sudo sh -c 'ls -hal /root/ > /root/test.out'
    
  • Erstellen Sie ein Skript mit Ihren Befehlen und führen Sie dieses Skript mit sudo:

    aus
    #!/bin/sh
    ls -hal /root/ > /root/test.out
    

    Führen Sie sudo ls.sh aus . Sehen Sie sich die Antwort von Steve Bennett an, wenn Sie keine temporäre Datei erstellen möchten.

  • Starten Sie eine Shell mit sudo -s Führen Sie dann Ihre Befehle aus:

    [[email protected]]$ sudo -s
    [[email protected]]# ls -hal /root/ > /root/test.out
    [[email protected]]# ^D
    [[email protected]]$
    
  • Verwenden Sie sudo tee (wenn Sie bei der Verwendung von -c viel entkommen müssen Option):

    sudo ls -hal /root/ | sudo tee /root/test.out > /dev/null
    

    Die Weiterleitung zu /dev/null wird benötigt, um tee zu stoppen von der Ausgabe auf dem Bildschirm. Zum Anhängen anstatt die Ausgabedatei zu überschreiben (>> ), verwenden Sie tee -a oder tee --append (Der letzte ist spezifisch für GNU Coreutils).

Vielen Dank an Jd, Adam J. Forster und Johnathan für die zweite, dritte und vierte Lösung.


Jemand hier hat gerade sudoing tee vorgeschlagen:

sudo ls -hal /root/ | sudo tee /root/test.out > /dev/null

Dies könnte auch verwendet werden, um jeden Befehl in ein Verzeichnis umzuleiten, auf das Sie keinen Zugriff haben. Es funktioniert, weil das tee-Programm effektiv ein "echo to a file"-Programm ist, und die Weiterleitung nach /dev/null soll verhindern, dass es auch auf dem Bildschirm ausgegeben wird, um es so zu halten wie das ursprünglich erfundene Beispiel oben.


Ein Trick, den ich selbst herausgefunden habe, war

sudo ls -hal /root/ | sudo dd of=/root/test.out

Linux
  1. So verwenden Sie Nginx zum Umleiten

  2. So leiten Sie die Ausgabe in eine Datei und Stdout in Linux um

  3. Wie leite ich die Ausgabe eines Programms in eine Zip-Datei um?

  4. Wie kann man sich merken, wie man die Umleitung verwendet?

  5. So leiten Sie die Ausgabe des systemd-Dienstes in eine Datei um

So verwenden Sie den Linux-te-Befehl

So verwenden Sie Sudo und die Sudoers-Datei

So leiten Sie die Shell-Befehlsausgabe um

So leiten Sie die Ausgabe unter Linux nach /dev/null um

So leiten Sie die gesamte Ausgabe von spark-submit in eine Datei um

Wie überprüfe ich, ob ich sudo-Zugriff habe?