Main menu:

Site search

Categories

janvier 2010
L M M J V S D
 123
45678910
11121314151617
18192021222324
25262728293031

Archive

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.

Comments

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

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 […]