GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser sudo pour rediriger la sortie vers un emplacement sur lequel je n'ai pas l'autorisation d'écrire ?

Votre commande ne fonctionne pas car la redirection est effectuée par votre shell qui n'a pas le droit d'écrire dans /root/test.out . La redirection de la sortie n'est pas réalisé par sudo.

Il existe plusieurs solutions :

  • Exécutez un shell avec sudo et donnez-lui la commande en utilisant le -c choix :

    sudo sh -c 'ls -hal /root/ > /root/test.out'
    
  • Créez un script avec vos commandes et exécutez ce script avec sudo :

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

    Exécutez sudo ls.sh . Voir la réponse de Steve Bennett si vous ne voulez pas créer de fichier temporaire.

  • Lancer un shell avec sudo -s puis lancez vos commandes :

    [[email protected]]$ sudo -s
    [[email protected]]# ls -hal /root/ > /root/test.out
    [[email protected]]# ^D
    [[email protected]]$
    
  • Utilisez sudo tee (si vous devez beaucoup vous échapper lorsque vous utilisez le -c option):

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

    La redirection vers /dev/null est nécessaire pour arrêter le de la sortie à l'écran. Pour ajouter au lieu d'écraser le fichier de sortie (>> ), utilisez tee -a ou tee --append (le dernier est spécifique à GNU coreutils).

Merci à Jd, Adam J. Forster et Johnathan pour les deuxième, troisième et quatrième solutions.


Quelqu'un ici vient de suggérer sudoing tee :

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

Cela pourrait également être utilisé pour rediriger n'importe quelle commande vers un répertoire auquel vous n'avez pas accès. Cela fonctionne parce que le programme tee est en fait un programme "écho vers un fichier", et la redirection vers /dev/null consiste à l'empêcher de sortir également à l'écran pour qu'il reste identique à l'exemple artificiel original ci-dessus.


Un truc que j'ai compris moi-même était

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

Linux
  1. Comment rediriger la sortie d'un programme vers un fichier Zip ? ?

  2. Comment se rappeler comment utiliser la redirection ?

  3. Comment rediriger la sortie de system() vers un fichier ?

  4. Rediriger la sortie de la commande vers le fichier et le terminal

  5. Comment puis-je faire en sorte que tcpdump écrive dans un fichier et que la sortie standard affiche les données appropriées?

Comment utiliser la commande Linux tee

Comment utiliser Sudo et le fichier Sudoers

Comment rediriger la sortie de la commande shell

Comment rediriger la sortie vers /dev/null sous Linux

Comment rediriger la sortie vers un fichier et stdout

Comment rediriger la sortie du service systemd vers un fichier