Vous êtes sur la page 1sur 6

Universit Cady AYYAD GTR

ENSA -SAFI- 2016-2017

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.

2- Redirection des entres sorties


2.1- Redirection de la sortie standard et des erreurs

La redirection de la sortie standard permet de rediriger ce qui est normalement affich


lcran dans un fichier. Elle est symbolise par la syntaxe :
a. commande > fichier
b. commande >> fichier

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

Ing.L.BERAMDAN 1 TP: GNU/Linux


Universit Cady AYYAD GTR
ENSA -SAFI- 2016-2017

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

$ sort mon-fichier > fichier-trie 2>&1


La syntaxe >& indique que les messages d'erreurs seront redirigs vers la
nouvelle sortie standard qui est le fichier fichier-trie.

2.2- Redirection de lentre standard

Lorsquun programme attend des donnes depuis le clavier, on peut lui fournir
directement ces donnes en utilisant le contenu dun fichier. commande < Nom_Fichier

Exemple : $ 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 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
$

Q2 : dterminer le rle et leffet de la redirection << ?

2.3- Redirection entre commandes : Tubes (pipes)

La redirection entre commandes est appele pipe ( | =AltGr+6 ) :


La syntaxe commande1|commande2 est quivalente aux deux lignes de commandes
suivantes : commande1 > sortie1 et commande2 < sortie1

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).

Exemple : $cat fichier | sort

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.

Ing.L.BERAMDAN 2 TP: GNU/Linux


Universit Cady AYYAD GTR
ENSA -SAFI- 2016-2017
Rcapitulation

SORTIE_COMMANDE >
# Redirige la sortie vers un fichier.
# Cre le fichier s'il n'est pas prsent, sinon il l'crase.

ls -lR > repertoire.liste


# Cre un fichier contenant la liste des fichiers du rpertoire.

: > nom_fichier (quivalent > nom_fichier pour certain shells)


# Le > vide le fichier "nom_fichier".
# Si le fichier n'est pas prsent, cre un fichier vide (=touch).
# Le : sert en tant que contenant, ne produisant aucune sortie.

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 .

Ing.L.BERAMDAN 3 TP: GNU/Linux


Universit Cady AYYAD GTR
ENSA -SAFI- 2016-2017

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.

Slection colonne : cut -c(slection_colonnes) [fichier]


Slection champs : cut -d(sparateur) -f(slection_champs) [fichier]
Exercice1: tudier les commandes suivantes
cut -c5 fichier
cut -c5-10 fichier
cut -c5- fichier
cut -d ":" -f1,6 /etc/passwd
cut -c3 <entrer>

3.2 Aperu sur la commande : tr

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

tr [options] ch1 ch2 $ read ligne; echo $ligne | tr 'a-z' 'A-Z'


Remplace toutes les occurrences de
TOUS les caractres de ch1 par le Convertir et afficher la ligne saisie au clavier en
caractre de ch2, de mme rang, dans majuscules
le flot d'entre.
tr -c chaine car $ echo $ligne | tr -c 'a-z' ' '
remplace tout caractre NON INCLUS Remplace tous les caractres diffrents de a,b, ..z
dans la chaine chaine par le par un espace , s'il y a un numro dans ligne , il
caractre car va tre remplacer par un espace.

tr -d chaine $ echo $ligne | tr -d 'a-z'


supprime tout caractre entr, supprime toutes les minuscules non accentues.
appartenant la chaine chaine

tr -s chaine $ echo $ligne | tr -s ' '


supprime toute rptition des supprime les espaces multiples entre les mots
caractres contenus dans chaine

Ing.L.BERAMDAN 4 TP: GNU/Linux


Universit Cady AYYAD GTR
ENSA -SAFI- 2016-2017
Exercice 2 : Expliquer les effets de ces commandes
1. tr 'a,/' 'A;_' <fich1 >fich2
2. tr 'a-z' 'A-Z' <fich1 >fich2
3. cat /etc/passwd | tr '/' ';'
4. tr -cs 'a-zA-Z0-9' '\n' <fich1 | sort | uniq >fich2 # '\n' new line (voir le man de tr et de
uniq)

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.

Parmi les filtres les plus utiliss on cite :

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.

Affichez les lignes de ce fichier tries en ordre croissant, suivant le nombre


plac en dbut de ligne;
liminez de chaque ligne le chiffre et le caractre /;
Triez ces lignes par ordre alphabtique inverse.

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.

Ing.L.BERAMDAN 5 TP: GNU/Linux


Universit Cady AYYAD GTR
ENSA -SAFI- 2016-2017
2. crire le message au revoir dans le mme fichier test en redirigeant la sortie de
la commande echo et sans craser le contenu de test vrifier avec cat
3. excuter la commande find /etc -name hosts,y a t-il des messages d'erreurs qui sont
affichs?rediriger les messages d'erreur de la commande prcdente vers le fichier
err.txt
4. rediriger maintenant la sortie standard et la sortie d'erreur de la commande find /etc
-name hosts vers deux fichiers diffrents (std.out et std.err)
5. prsent excuter les deux commandes suivantes:
user@localhost:~$find /etc -name hosts >find1.out 2>&1
user@localhost:~$find /etc -name hosts 2>find2.out >&2

6. comparer le contenu des deux fichiers find1.out et find2.out,quelles sont vos


remarques
7. excuter la commande tr 'a-z' 'A-Z' ,une fois excute la commande tr attend du texte
partir de l'entre standard saisissez 3 lignes de textes faire passer comme argument
tr (pour arrter la saisie pressez ctrl+d)
8. rediriger l'entre de tr 'a-z' 'A-Z' depuis le fichier test de la question 2.
9. en utilisant la commande tr 'a-z' 'A-Z' convertir le contenu de find1.out en
majuscule puis le placer dans un fichier FIND1.out ,vrifier avec cat.
10.en utilisant un pipe rediriger la sortie de la commande ls -l /etc vers l'entre de la
commande more.
11.le fichier /etc/passwd contient les informations sur tous les comptes utilisateurs du
systme
12.afficher le contenu de /etc/passwd avec more.
13./etc/passwd contient plusieurs champs,le premier champ reprsente le nom de
l'utilisateur,quel est le dlimiteur qui spare ces champs
14.en utilisant la commande cut extraire depuis /etc/passwd les noms des utilisateurs
15.en utilisant un pipe trier la sortie de la commande cut prcdente par ordre
alphabtique puis afficher le rsultat avec more
16.numroter les lignes de /etc/passwd avec nl
17.en utilisant la commande nl prcdente et les commande head et tail afficher les lignes
de /etc/passwd comprises entre la ligne 7 et la ligne 12.

Ing.L.BERAMDAN 6 TP: GNU/Linux