sudo echo
Dans le billet Changer le hostname de votre PC, je donnais une commande permettant de changer le nom du PC en écrivant grâce à la commande echo, le nouveau nom directement dans le fichier /etc/hostname. La commande donnée était celle-ci:
$ sudo echo Nouveau_Nom > /etc/hostname
Je n’y avais pas prêté attention à l’époque mais cette commande est évidemment incorrecte.
Son but était de permettre l’écriture dans le fichier /etc/hostname qui réclame des droits d’administration pour être modifié. Malheureusement, le sudo s’applique à la commande echo et pas à la redirection de la sortie standard vers le fichier. Pour le vérifier, tapons cette commande dans un terminal:
$ sudo echo Nouveau_Nom > /etc/hostname bash: /etc/hostname: Permission non accordée
Pour résoudre ce problème nous allons utiliser un petit programme appelé tee qui, d’après la page de manuel, lit ce qui se trouve sur son entrée standard (stdin) et le réécrit sur sa sortie standard (stdout) ou dans un fichier:
$ echo Nouveau_Nom | sudo tee /etc/hostname
Le caractère de redirection | redirige la sortie standard du programme à sa gauche vers l’entrée standard du programme à sa droite (voir Shell – Redirections de flux). La commande prend donc la sortie de la commande echo, l’envoie sur l’entrée standard de tee qui grâce au sudo réécrit son entrée standard dans le fichier /etc/hostname mais cette fois avec des droits suffisants.
Si vous voulez ajouter en appending quelque chose avec la commande tee, celle-ci possède une option -a, pour append, permettant d’ajouter quelque chose au fichier. Par exemple:
$ echo Nouveau_Nom | sudo tee -a /etc/hostname
Dans ce cas, Nouveau_Nom sera ajouté au fichier plutôt que de remplacer le contenu comme dans le cas précedent.
Posted: janvier 15th, 2010 under Ubuntu.
Comments: 2
Tweet
Comments
Pingback from Faire la redirection d’une commande exécutée avec sudo | Void And Any
Time: 18 janvier 2010, 14 h 43 min
[…] : Une autre solution : http://linux.leunen.com/?p=780 Articles qui pourraient vous intéresser :Installer mdadm sans PostfixSupprimer un volume […]
Comment from VoidAndAny
Time: 18 janvier 2010, 14 h 39 min
Je me suis moi aussi « heurté » à ce problème et j’avias à l’époque trouvé une (enfin 2) autre pour le contourner :
1/ passer en super utilisateur
sudo -s
2/ utiliser la commande bash
sudo bash -c « ma_commande >> mon_fichier »
Le lien de mon article concernant le problème dans mon pseudo