TPN5:Redirections,Tubes&Filtres
1- Les entres sorties
Chaque processus possde 3 flux standards qu'il utilise pour communiquer en gnral avec
l'utilisateur :
Entre/sortie Appelation Descripteur/flux Reprsentation par dfaut
entre standard STDIN 0 Provenant du clavier
sortie standard STDOUT 1 Dirige vers lcran (le shell)
sortie derreurs STDERR 2 Egalement redirige vers lcran
Ce comportement par dfaut peut tre modifi en utilisant les redirections dentres/sorties :
stdout ou stderr : redirection vers un fichier plutt qu lcran
stdin : redirection depuis un fichier plutt que le clavier
En utilisant les oprateurs suivants :
> : Redirection de la sortie vers un fichier
>> : Redirection de la sortie la fin du fichier (concatnation)
< : Redirection de lentre depuis un fichier
La redirection signifie simplement la capture de la sortie d'un fichier, d'une commande, d'un
programme, d'un script, voire mme d'un bloc de code dans un script et le renvoi du flux
comme entre d'un autre fichier, commande, programme ou script.
Q1 : Quelle est la diffrence entre les deux syntaxes ?(exemple de la commande cat)
Par dfaut les messages d'erreur s'affichent l'cran (sortie standard par dfaut), ce
comportement peut tre modifi. On rappelle que la sortie d'erreur a pour code 2(numro
descripteur). Vous pouvez sauvegarder dans un fichier vos messages d'erreur, pour une
analyse ultrieure, en tapant : $ cat mon-fichier 2>fichier-erreur
Si on rencontre une erreur pendant l'excution de la commande d'dition cat de mon-fichier
(absence du fichier par exemple), le message d'erreur sera sauvegard dans le fichier fichier-
erreur.
On peut rediriger les deux flux (sortie et erreur) dans un mme fichier, en remplaant
la syntaxe suivante :
$ commande > sortie.txt 2> erreur.txt
Par :
$ commande > sortie-erreur 2>&1 ou
$ commande >& sortie-erreur
Tester :
exemple 1 :
$ ls kjhj 2>fich-err
$ cat fich-err
exemple 2 :
crer un fichier mon-fichier et remplir par exemple de quelque lettres
de l'alphabet chacune dans une ligne a part et faire le trie
Lorsquun programme attend des donnes depuis le clavier, on peut lui fournir
directement ces donnes en utilisant le contenu dun fichier. commande < Nom_Fichier
Vous envoyez le contenu du fichier mon-fichier vers la commande sort (trie), celle-ci va
donc trier le contenu du fichier, par dfaut le rsultat apparat sur la sortie standard, c'est
dire l'cran, plus prcisment sur le shell. On peut galemet rediriger le rsultat de la
commande vers un autre fichier :
$ sort < mon-fichier > fichier-trie
on envoie le rsultat (le fichier tri) dans un fichier fichier-trie, le rsultat n'apparat plus
l'cran, mais est sauvegard dans un fichier fichier-trie .
Tester
$cat calcul
2*3+4
$bc < calcul # bc:arbitrary precision; calculator language (voir man).
10
$
NB : commande1 | commande2 | commande1 n'est pas une boucle. Ce sont trois processus
distincts. C'est la mme chose que commande1 | commande2 | commande3 avec
commande3=commande1. C'est ce que l'on appelle un tuyau (pipeline).
le rsultat de la commande cat fichier va tre traiter par la seconde commande sort .Au
lieu d'afficher le contenu du fichier (cat fichier) on va le rediriger vers la commande sort pour
le trier et le rsultat final va tre afficher sur l'cran.
SORTIE_COMMANDE >
# Redirige la sortie vers un fichier.
# Cre le fichier s'il n'est pas prsent, sinon il l'crase.
SORTIE_COMMANDE >>
# Redirige stdout vers un fichier.
# Cre le fichier s'il n'est pas prsent, sinon il lui ajoute le flux.
# Commandes de redirection sur une seule ligne (affecte seulement la
ligne sur laquelle ils sont):
--------------------------------------------------------------------
1>nom_fichier
# Redirige stdout vers le fichier "nom_fichier".
1>>nom_fichier
# Redirige et ajoute stdout au fichier "nom_fichier".
2>nom_fichier
# Redirige stderr vers le fichier "nom_fichier".
2>>nom_fichier
# Redirige et ajoute stderr au fichier "nom_fichier".
&>nom_fichier
# Redirige la fois stdout et stderr vers le fichier "nom_fichier".
#=======================================================================
2>&1 \
# Redirige stderr vers stdout.
# Les messages d'erreur sont envoys la mme place que la sortie
standard.
#=======================================================================
|
# Tube.
# outil de chanage de processus et de commande but gnral.
# Similaire > , mais plus gnral dans l'effet.
# Utile pour chaner des commandes, scripts, fichiers et programmes.
cat *.txt | sort | uniq > fichier-resultat
# Trie la sortie de tous les fichiers .txt et supprime les lignes
# dupliques, pour finalement enregistrer les rsultats dans
# fichier-rsultat .
3- Filtres
Les filtres Unix font partie intgrante de son fonctionnement, ce sont des commandes qui,
partir d'un flux d'entres donn, effectuent des traitement avant d'afficher le rsultat en sortie.
On les nomment galement commandes de traitement de flux.
3.1 Aperu sur la commande : cut
cut [OPTION]... [FICHIER]...
Afficher des parties de lignes (selon les options) de chaque FICHIER vers la sortie standard.
La commande cut prsente 2 formes suivant que l'on slectionne des colonnes, de caractres
ou qu'on distingue des champs spars par un caractre prcis (sparateur).
Remarque : Sans FICHIER, ou quand FICHIER est -, cut va lire l'entre standard.
tr - translate or delete characters, est un filtre le plus souvent associe des redirections, les
caractres entrs sont traits et le rsultat est envoy sur la sortie standard.
Syntaxe Exemple
Rsum
Les tubes Unix permettent de combiner des commandes en les utilisant comme des
briques indpendamment de leur provenance (shell, script, programme..). C'est l'une des
grandes forces d'Unix. On note galement la prsence des filtres, que l'on peut considrer
qu'ils filtrent le flux de sortie des programmes auxquels ils sappliquent. En dautres termes,
un filtre peut tre utilis avec un tube puisquil attend systmatiquement des donnes sur son
flux dentre et envoie le rsultat du filtrage sur son flux de sortie.
cat, cut, head, join, nl, paste, sort, split, tac, tail, tr, uniq, wc, grep, sed, awk..
Exercices
Exo 1 :
1. Crez un fichier dont chaque ligne commence par un chiffre, suivi d'un slash (/), puis
d'un ou plusieurs mots.
2. Comment mettre dans un fichier la liste de tous les fichiers de l'arborescence (tree)
partir du rpertoire courant ?
3. Crez un fichier liste contenant la liste de tous vos fichiers, avec leur taille,
leurs droits, etc.
4. Comment afficher uniquement les fichiers du rpertoire courant qui sont des liens
symboliques ?
5. Combien de lignes contiennent le mot file dans la page de man de less ?
6. En utilisant la commande tr, cut et la commande head. Quels sont les dix plus gros
fichiers de /usr/bin/ ?
Exo 2 :
1. crire le message bonjour tout le monde dans un fichier appel test en
redirigeant la sortie de la commande echo.