FUNIX

Mettez un manchot dans votre PC



Cours utilisateur UNIX : Commandes UNIX et redirection
[Syntaxe d'une commande | Les entrées sorties | Redirection des entrées sorties | Redirection des erreurs | Les pipes]

 

Commandes UNIX et redirection

Syntaxe d'une commande

La syntaxe standard d'une commande UNIX est la suivante :
commande -options arg1 arg2 arg3
Les options varient en fonction de la commande, le nombre des arguments qui suivent dépend aussi de la commande, par exemple la commande :
sort -r mon-fichier
sort (trier) permet de trier un fichier, l'option r (reverse), permet de trier en sens inverse le fichier. L'argument unique de la commande est le nom du fichier. Avec
cp -R mon-repertoire nouveau-repertoire
La commande cp (copy) copie un répertoire (option R) vers un autre répertoire, on a ici deux arguments.

On peut coupler deux options : ps -ef, avec cette commande on a l'option e et f (voir plus loin la signification de la commande).

A noter que pour introduire une option on met -, ce n'est pas nécessaire pour certaines commandes (tar par exemple).

Les entrées sorties

Il y a trois sortes d'entrées sorties ou flux de données : le premier est l'entrée standard, c'est à dire ce que vous saisissez au clavier, le deuxième est la sortie standard, c'est à dire l'écran, plus précisément le shell, et le troisième est la sortie standard des messages d'erreurs consécutifs à une commande, qui est généralement l'écran.

Chacun de ces flux de données est identifié par un numéro descripteur, 0 pour l'entrée standard, 1 pour la sortie standard et 2 pour la sortie standard des messages d'erreur.

Redirection des entrées sorties

Quand vous lancez une commande dans un shell, il peut y avoir du texte qui s'affiche suite à l'exécution de la commande, ce texte par défaut, s'affiche dans le shell. On dit que le shell (ou terminal) est la sortie standard, c'est là où va s'afficher tous les commentaires d'une commande.

Vous pouvez changer ce comportement, en tapant :

ma-commande > mon-fichier
Tous les commentaires, les sorties, de la commande, ne vont pas apparaître au shell mais être écrits dans un fichier. En d'autres termes, la standard standard est redirigé vers un fichier. Cela peut être utile, si vous avez une commande qui génère énormément de commentaire, et que vous voulez les récupérer, pour les exploiter par la suite, à la terminaison de la commande.

La redirection > a pour effet de créer le fichier mon-fichier, si ce fichier existait déjà, il est tout simplement écrasé (supprimé et recréé), ce qui peut être gênant si vous ne voulez pas perdre ce qu'il contient, vous disposez donc de la redirection >>. En tapant :

ma-commande >> mon-fichier
Le fichier mon-fichier n'est pas écrasé, mais la sortie standard (les commentaires de la commande) sont ajoutés en fin de fichier, à la suite du texte qui était déjà dans le fichier.

Les redirections marchent dans les deux sens, par exemple en tapant la commande suivante :

sort < mon-fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie), celle-ci va donc trier le contenu du fichier, par défaut le résultat sort sur la sortie standard, c'est à dire à l'écran, plus précisément sur le shell. Avec :
sort < mon-fichier > fichier-trie
On a vu que sort < mon-fichier avait pour effet de trier le fichier mon-fichier, l'expression >fichier-trie a pour effet d'envoyer le résultat (le fichier trié) dans un fichier fichier-trie, le résultat n'apparaît plus à l'écran, mais est sauvegardé dans un fichier.

Avec la redirection << la commande va lire les caractères jusqu'à la rencontre d'une certaine chaîne de caractères. Exemple avec la commande cat (catalogue, permet d'éditer le contenu d'un fichier).

>cat << fin je tape du texte jusqu'à la chaîne de caractère fin >
En tapant la commande, vous revenez à la ligne, mais perdez le prompt, cat va lire (et éditer) les caractères que vous saisissez jusqu'à qu'il rencontre la chaîne fin, à ce moment là, le prompt apparaît à nouveau. Si vous voulez créer un fichier avec un peu de texte à l'intérieur, vous ferez :
>cat << fin > mon-fichier je tape du texte qui sera sauvegardé dans mon-fichier, pour terminer le texte fin >
Le texte que vous venez de saisir, se trouve donc dans mon-fichier.

Avec la commande :

>fichier-vide
Vous créez un fichier vide fichier-vide.

Redirection des erreurs

Par défaut les messages d'erreur s'affichent à l'écran (sortie standard par défaut), vous pouvez modifier ce comportement. On rappelle que la sortie d'erreur a pour code 2. Vous pouvez sauvegarder dans un fichier vos messages d'erreur, pour analyse ultérieure, en tapant :
cat mon-fichier 2>fichier-erreur
Si on rencontre une erreur pendant l'exécutionde la commande d'édition cat de mon-fichier (absence du fichier par exemple), le message d'erreur sera sauvegardé dans le fichier fichier-erreur.

En tapant :

sort mon-fichier > fichier-trie
Vous redirigez le résultat de la commande sort mon-fichier vers le fichierfichier-trie, la sortie standard (descripteur 1) n'est donc plus l'écran (plus précisément le shell ou terminal) mais le fichier fichier-trie.

Par défaut les messages d'erreur s'affichent dans le shell, vous pouvez faire en sorte qu'ils s'affichent dans le fichier fichier-trie, en tapant :

sort mon-fichier > fichier-trie 2>&1
Avec la syntaxe >& vous indiquez que les messages d'erreurs seront redirigés vers la sortie standard qui est le fichier fichier-trie.

Les pipes

Un pipe (en français tube de communication) permet de rediriger la sortie d'une commande vers une autre. En d'autres termes, pour rediriger les résultats (la sortie) d'une commande, on a vu qu'on pouvait taper :
commande1 > sortie1
On redirige cette sortie vers une autre commande, ça devient donc une entrée pour cette dernière commande, pour cela vous tapez :
commande2 < sortie1
En fait la syntaxe commande1|commande2 (| étant le symbole de pipe) est totalement équivalente aux deux lignes de commandes précédentes.

Exemple : ls permet la visualisation de fichiers, en tapant ls, on obtient :

fichier1 fichier2 totofichier
grep permet la recherche d'une chaîne de caractère dans une liste donnée, en tapant grep toto * (* signifie tous les fichiers, grep recherche la chaîne de caractère toto dans les noms de tous les fichiers), on obtient :
totofichier
On a le même résultat avec le |, en tapant :
ls | grep toto
La première commande aura pour effet de lister le nom des fichiers se trouvant à l'endroit où l'on a tapé la commande, la sortie standard (le résultat de la commande) est donc une liste de nom, elle est redirigée vers la commande grep, qui va y chercher une chaîne de caractère contenant toto. Le résultat est donc aussi:
totofichier