Utiliser sudo avec un pipe ou une redirection

Comment exécuter via sudo une commande qui comprend un pipe (|) ou une redirection (>) ?

La seule solution universelle (comprendre, ne dépendant pas d’un shell en particulier) passe par la commande sh à laquelle il est possible de passer les instructions directement en paramètres (à l’aide de l’option -c):

sudo sh -c 'echo "nameserver 8.8.8.8" >> /etc/resolv.conf'

Ici, nameserver 8.8.8.8 va être ajouté à la fin de /etc/resolv.conf à travers une redirection.

Cette méthode pose néanmoins un problème: toutes les instructions / commandes passées entre guillemets vont être exécutés avec les droits root (MAUVAIS !).

Il est donc préférable, lorsque cela est possible, de n’utiliser sudo que pour la commande le nécessitant:

curl 'http://download.mono-project.com/repo/xamarin.gpg' | sudo apt-key add -

Ici, curl est exécuté avec les droits normaux de l’utilisateur courant, sa sortie étant envoyée à apt-key qui, lui, s’exécutera avec les droits super-administrateurs.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s