GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso utilizzare sudo per reindirizzare l'output a una posizione in cui non ho il permesso di scrivere?

Il tuo comando non funziona perché il reindirizzamento viene eseguito dalla tua shell che non ha il permesso di scrivere su /root/test.out . Il reindirizzamento dell'output non è eseguita da sudo.

Ci sono più soluzioni:

  • Esegui una shell con sudo e dai il comando usando -c opzione:

    sudo sh -c 'ls -hal /root/ > /root/test.out'
    
  • Crea uno script con i tuoi comandi ed esegui quello script con sudo:

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

    Esegui sudo ls.sh . Vedi la risposta di Steve Bennett se non vuoi creare un file temporaneo.

  • Avvia una shell con sudo -s quindi esegui i tuoi comandi:

    [[email protected]]$ sudo -s
    [[email protected]]# ls -hal /root/ > /root/test.out
    [[email protected]]# ^D
    [[email protected]]$
    
  • Usa sudo tee (se devi scappare molto quando usi il -c opzione):

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

    Il reindirizzamento a /dev/null è necessario per fermare tee dall'output sullo schermo. Da aggiungere invece di sovrascrivere il file di output (>> ), utilizzare tee -a o tee --append (l'ultimo è specifico per GNU coreutils).

Grazie a Jd, Adam J. Forster e Johnathan per la seconda, terza e quarta soluzione.


Qualcuno qui ha appena suggerito di sudo tee:

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

Questo potrebbe anche essere usato per reindirizzare qualsiasi comando, a una directory a cui non hai accesso. Funziona perché il programma tee è effettivamente un programma "eco a un file" e il reindirizzamento a /dev/null serve a interrompere anche l'output sullo schermo per mantenerlo uguale all'esempio originale inventato sopra.


Un trucco che ho scoperto io stesso era

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

Linux
  1. Come ricordare come utilizzare il reindirizzamento?

  2. Come reindirizzare l'output su un file e stdout

  3. Come reindirizzare l'output di system() su un file?

  4. Come posso fare in modo che tcpdump scriva su file e emetta in output standard i dati appropriati?

  5. come utilizzare cURL su un'interfaccia specifica

Come utilizzare il comando tee di Linux

Come usare Sudo e il file Sudoers

Come utilizzare Nginx per reindirizzare

Come reindirizzare l'output del comando della shell

Come reindirizzare l'output su /dev/null in Linux

Come posso usare sudo per verificare se esiste un file?