Vous êtes sur la page 1sur 6

Pratiques Linux

TP3 – Traitement des chaines de caractères, pipes, filtres, et redirections

Objectif
Le but de ce TP est de maitriser les commandes relatives à la manipulation des chaînes de caractères,
la redirection des Entrées/Sorties standards, et l’utilisation des "pipes".

Partie 1 : Traitement des chaînes de caractères et redirection des Entrées/Sorties standards

1. Créer et ajouter une ligne de texte dans un fichier nommé « test » à l’aide de la commande
echo et la redirection.
$ echo bienvenue >> test
2. Rediriger la sortie standard et la sortie d’erreur de la commande « cat test » vers un fichier
nommé « erreur »
$ cat test >erreur 2>&1
3. Que contient le fichier erreur ?
4. Executer cette commande:
$ cat bienvenu once again>> test >>erreur 2>&1
5. Que contient maintenant le fichier erreur?
6. Executer cette commande:
$ ls dossier 2>&1|grep Aucun . Quelle est l’utilité de cette commande?
7. Copier le fichier /etc/passwd dans votre répertoire personnel, sous le nom mypasswd.
8. Générer une liste des différents shell en cours d'utilisation sur l'ordinateur et l’enregistrer dans un
fichier sous le nom shells. Visualiser par la suite le contenu du nouveau fichier créé shells.
Expliquer :
le rôle des options -d et -f.
$ cut -d : -f 7 mypasswd > shells
$ cat shells

9. Que permettent ces deux commandes de


réaliser ?
$ cut -c 1-10 mypasswd > mypasswd1
$ cut -c 11- mypasswd > mypasswd2

10. Fusionner le contenu des deux fichiers myspasswd1 et mypasswd2 à l’aide de la commande
paste. Maintenant fusionner le contenu des deux fichiers dans un troisième fichier
mypasswd3.

11. Le fichier shells contient toutes les informations recherchées, mais sans un ordre
particulier. Trier les lignes de la sortie et placer les nouvelles données dans un nouveau fichier
intitulé sorted.shells.
$ sort shells > sorted.shells

12. Certaines valeurs identiques se répètent dans le fichier sorted.shells. Utiliser la commande uniq
pour déterminer le nombre d’instances de chaque valeur.
$ uniq -c sorted.shells > uniq.sorted.shells

Pourquoi il est nécessaire de trier la sortie avant d'utiliser la commande uniq ? Vous pouvez
essayer la commande :
$ uniq -c shells

13. Utiliser la commande qui suit pour obtenir une liste triée dans ordre décroissant des shells en
cours d'utilisation sur l'ordinateur, où chaque shell affiché sera précédé par le nombre
d’occurrences dans le fichier.
$ sort -nr uniq.sorted.shells

13. Copier le fichier /usr/share/dict/words dans votre répertoire personnel, sous le nom
mywords.

14. Exécuter la commande suivante pour obtenir en sortie les lignes du fichier mywords (se
trouvant dans votre répertoire personnel) contenant un motif de texte précis (par exemple le
motif fish) :

$ grep fish mywords

Comparer le résultat obtenu avec la commande :


$ grep -i fish mywords

15. Utiliser la commande grep pour afficher toutes les lignes du fichier mywords contenant le
motif fish, de même que les deux lignes succédant et précédant chacune de ces lignes (afin
d'obtenir un contexte plus étendu).

16. Utiliser la commande grep pour répondre à chacune des questions suivantes :
a. Indiquer le nombre de fois que le motif fish apparaît dans le fichier mywords.
b. Afficher une ligne pour chacune des répétitions du motif fish dans le fichier mywords, y
compris le numéro de ligne où celles-ci se trouvent. Sur quelle ligne le mot starfish a été
trouvé?

17. En utilisant le fichier déjà crée mypasswd, réaliser les tâches suivantes :
c. Afficher la ligne de tout compte utilisateur commençant pat la
lettre g
$ grep ^g mypasswd

d. Afficher la ligne de tout compte utilisateur utilisant le shell


/bin/bash
$ grep bash$ mypasswd

e. Afficher la ligne de tout compte n'utilisant pas le


shell /bin/bash
$ grep -v bash$ mypasswd

18. Utiliser la commande suivante pour créer une copie modifiée du fichier mypasswd ne
contenant aucune ligne ayant les lettres N ou P:
$ grep -v [N,P] mypasswd > modified.passwd

19. Utiliser la commande tr pour convertir toutes les lettres minuscules (s'il y en a) en
majuscules.
$ tr "a-z" "A-Z" < modified.passwd > modified2.passwd

Partie 2 : Utilisation des pipes


22. Pour créer une liste triée de shell, les pipes seront utilisées pour combiner certaines commandes
exécutées dans les questions précédentes. Ainsi, il n’y a plus besoin d'aucun fichier temporaire
car l’exécution est faite en conduisant la sortie d’une commande vers une autre.

$ cut -d: -f7 mypasswd | sort | uniq -c | sort -nr

23. Utiliser la commande ps pour obtenir une liste des processus en cours d'exécution ainsi que le
nom d'utilisateur ayant lancé l’exécution de chacun d’entre eux. Puis conduire la sortie vers
grep pour n'obtenir que la sortie des processus appartenant à l’utilisateur root. Le symbole ^
indique à grep de ne chercher que la chaîne root au début de chaque ligne.
$ ps auwx | grep ^root

24. Imaginer qu'il faut passer ces données à un autre programme ou script qui n'a besoin que des
noms des processus. Utiliser une combinaison des commandes tr et cut pour produire cette
liste. Premièrement tr est utilisée pour transformer les espaces blancs en un séparateur de champs
pouvant être compris par cut (un % dans ce cas). Ensuite, cut est utilisé pour afficher
uniquement les noms de processus (champ 11 de la sortie de la commande tr).
$ ps auwx | grep ^root | tr -s [:blank:] [%] | cut -d% -f11
25. Les pipes sont très pratiques lorsqu'on travaille avec des utilitaires à ligne de commande.
Toutefois, bien que les étapes précédentes permettent de réaliser des tâches voulues, la
commande ps peut produire une sortie sous différents formats, en particulier elle permet
d’afficher directement la liste des processus exécutés en tant que root sur le système.
$ ps -u root

Partie 3 : Utilisation de la commande sed


1.A l’aide de la commande nano, créer un fichier exemple ayant le contenu suivant (n’oublier pas
d’inclure les sauts de lignes):
nano exemple

Bienvenue,

C’est le fichier exemple.


Contenu de la ligne 4.

# ceci est un commentaire


Contenu de la ligne 7.

A la prochaine
Puis contrôle +x et taper y puis entrer

2. A l’aide de la commande sed (qui représente un utilitaire de traitement de données capable


d'utiliser les expressions régulières) effacer le contenu des lignes 4 et 7 du fichier exemple.

3. Supprimer le contenu des lignes commentaires commençant par un dièse (les deux caractères slash
permettent d’inclure une expression régulière).

4. Afficher uniquement les lignes contenant la chaine « Contenu ».

5. Remplacer la chaine de caractère # par * dans le contenu du


texte.

Partie 4 : Recherche de fichiers


A l’aide de la commande find, qui permet de chercher des fichiers, réaliser les tâches suivantes :
a. Afficher la liste des fichiers se trouvant dans le répertoire /etc et dont le nom se termine
par .conf, en invoquant la commande avec le paramètre -name.

b. Retrouver la liste des fichiers spéciaux de type bloc, et de type caractère, ainsi que la liste
des fichiers standards et des répertoires, se trouvant dans le répertoire /dev, en invoquant
la commande avec le paramètre -type.

c. Retrouver la liste de tous les fichiers dont la taille dépasse 10Mo, en invoquant la
commande avec le paramètre -size.
d. Retrouver la liste des fichiers vous appartenant, en invoquant la commande avec le
paramètre - user.

34. Une autre alternative à l’utilisation de find, est la commande locate. Cette dernière est plus
rapide car elle repose sur une recherche dans la base de données mlocate.
a. Commencer par mettre à jour cette base de données avec la commande $updatedb.

b. A l’aide de la commande locate, cherche la liste des fichiers dont le nom contient la
chaine de caractères passwd.

c. A l’aide de la commande locate, afficher le nombre de fichiers dont le nom contient la


chaine de caractère passwd.

Exercice non présentiel :

1) Effectuer cette suite de commandes en une seule fois:


– supprimer un fichier quelconque.
– créer un répertoire re
– afficher le mot “bonjour” a l'écran.
A/ Il faut que toutes le commandes soient exécutées même si elles n’ont pas réussi.
B/ Il faut que toutes le commandes soient exécutées sauf la création du répertoire re qui ne se fait que
si la suppression du fichier a réussi.

Aide : «  Utiliser les opérateurs logiques ou autres entre les commandes »

2) Créer un fichier f1 dont le contenu est:


2011
janvier
14
Créer un fichier f2 dont le contenu est :
historique
date
une
est

A partir de ces deux fichiers, créer un fichier f3 dont le contenu est:


« 14
Janvier
2011
est
une
date
historique »
Aide : «  chercher affichage inverse d'un fichier sous linux  »
3) Créer dans un fichier info le contenu suivant:
|tlili|rim|15
bensouayeh|ahmed|17
bensassi|rima|14
benjbra|wassim|18

a/ Afficher seulement les prénoms.


b/ Afficher juste les deux premiers caractères de chaque ligne
c/ Afficher seulement les deux premières lignes du fichier info
d/ Ajouter la ligne suivante a la fin du fichier info sans l'ouvrir:
bensouayeh|afifa|14
e/ Afficher les deux dernières lignes
f/ Afficher le nombre de lignes du fichiers de deux manières différentes.
g/ Transformer les lettres minuscules en majuscules sans ouvrir le fichier avec la commande tr.
h/ Remplacer les noms bensouayeh par benyoussef avec la commande sed
i/ Supprimer les lignes ou la note est 14 avec la commande sed
j/Ordonner par ordre décroissant le fichier info et mettre le résultat dans le fichier update.

4) Créer un répertoire rep1 et son sous répertoire rep2 en une seule fois.
5) Créer les fichiers f7.exe, f9.c, f4.doc, f3.exe dans le répertoire courant.
Copier les fichiers exécutables dans le répertoire rep2.
6) Afficher sur l'écran les fichiers exécutables du répertoire courant et mettre le résultat en
même temps dans un fichier res (utiliser la commande tee).
7) Afficher les lignes contenant le mot rim dans le fichier info.
8) Afficher les lignes terminant par 18
9) Dans le fichier f3 de la question 2, afficher les lignes qui ne commencent pas par la lettre «j».
10) Créer dans un répertoire trouv 3 fichiers f1, f2 et f3 respectivement avec les droits rw-r--
rwx ,r—r-x rw- et rwxrw----.
a-Afficher les fichiers qui ont les droits de lecture et d'écriture pour le propriétaire(en utilisant la
commande find).
b-Afficher les fichiers qui ont les droits d'écriture pour les utilisateurs du groupe du propriétaire.
Une fois trouvés, supprimer les en utilisant une seule commande find.