Vous êtes sur la page 1sur 5

Pratiques Linux

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


INDP1 - A, B, C, D, E, F
Année scolaire 2017/2018

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".
Ce TP se réfère au contenu des du chpitre1 du livre support de cours « LPIC-1: Linux Professional Institute
Certification - Study Guide, Fourth Edition ». Les sections de ce chapitre doivent être lues avant de répondre
aux questions.

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


1. Copier le fichier /etc/passwd dans votre répertoire personnel, sous le nom mypasswd.
2. Visualiser le contenu du nouveau fichier créé mypasswd à l'aide des commandes cat, less, et
more, et vérifier que chaque ligne de ce fichier décrit la configuration d’un compte utilisateur sur le
système.
3. Visualiser le contenu du fichier mypasswd dans l’ordre inverse des lignes, à l'aide de la commande
tac.
4. À l’aide des commandes head et tail, afficher respectivement les 5 premières lignes et les 5
dernières lignes du fichier mypasswd.
5. En utilisant la commande wc, compter le nombre de comptes utilisateurs existants sur la machine.
6. À l’aide de la commande nl afficher le contenu du fichier mypasswd en numérotant chaque ligne.
7. 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
8. Que permettent ces deux commandes de réaliser ?
$ cut -c 1-10 mypasswd > mypasswd1
$ cut -c 11- mypasswd > mypasswd2
9. Fusionner le contenu des deux fichiers myspasswd1 et mypasswd2 à l’aide de la commande
paste.
10. 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
11. 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
12. 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 majuscules (s'il y en a) en minuscules.
$ tr "A-Z" "a-z" < modified.passwd > modified2.passwd
20. Utiliser cat pour visualiser le fichier mypasswd et le nouveau fichier modified2.passwd.
21. Si nous n’examinons pas attentivement ces deux fichiers, il est assez difficile de voir la différence entre
les deux (même s'il s'agit de petits fichiers). A l’aide de la commande diff, générer une liste de
dissemblances entre les deux fichiers, en format unifié:
$ diff -U 0 modified2.passwd mypasswd

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. Vous avez maintenant la liste des processus appartenant à root, mais comme vous avez demandé à cut
de n'afficher que le champ 11, vous avez perdu les arguments de la ligne de commande. Si vous changez
-f11 par -f11-, cut affichera alors le champ 11 jusqu'à la fin de la ligne.
$ ps auwx | grep ^root | tr -s [:blank:] [%] | cut -d% -f11-
26. Dans la question précédente la commande tr a été utilisée pour transformer les espaces blancs en %
pour que la sortie de la commande puisse être utilisée par la commande cut. Utiliser la commande tr
de nouveau pour remettre les % en espaces blancs.
$ ps auwx | grep ^root | tr -s [:blank:] [%] | cut -d% -f11- | tr [%]
"[ ]"
27. 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 -O args

Partie 4 : Utilisation de la commande sed


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

Bienvenue,

C’est le fichier exemple.


Contenu de la ligne 4.

# Ceci est un commentaire


Contenu de la ligne 7.

A la prochaine

29. 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.
$ sed -e ‘4d; 7d’ exemple
30. 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).
$ sed ‘/^#/ d’ exemple
31. Afficher uniquement les lignes contenant la chaine « Contenu ».
$ sed -n '/Contenu/p' exemple
32. Remplacer la chaine de caractère # par * dans le contenu du texte.
$ sed -r 's/#/*/g' exemple

Partie 5 : Recherche de fichiers


33. 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 modifiés durant les dernières 24 heures, en invoquant la
commande avec le paramètre -mtime.
e. 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 $updaedb.
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ères passwd.

Partie 3 : Travail non présentiel


En documentant davantage depuis le support de cours susmentionné, répondre aux questions suivantes :
1. Rappeler la différence entre une commande externe et une commande interne et citer des exemples de
chacune. Exécuter la commande type pour confirmer leurs types.
2. Quel est l’objectif des commandes suivantes : ctrl+a, ctrl+e, et ctrl+r
3. Afficher l’historique des commandes que vous avez précédemment exécuté sur l’interpréteur de
commandes. Dans quel fichier est stocké l’historique des commandes.
4. Que permettent ces commandes de faire :
$!!
$5
5. Enumérer la liste des commandes utiles pour afficher de l’aide sur une commande.
6. Vous cherchez la(les) commandes utile(s) pour redémarrer une machine, mains vous ne vous souvenez
pas d’elle(s). Utiliser la commande man pour la(les) retrouver.
7. Quel est le rôle des opérateurs suivants ? : Proposer un exemple pour tester chacun d’eux.
&>
2>>
2>
8. Que permettent ces commandes de faire
# find / -user Christine | xargs -d "\n" rm
# rm `find ./ -user Christine`
# rm $(find ./ -user Christine)
9. Quel est le rôle de cette commande ?
$ grep '/bin/bash' /etc/passwd | sort -t : -k 1,1d
10. Affichez les 10 premières lignes du fichier /etc/passwd, les 15 dernières lignes, toutes les lignes à
partir de la 5, et à la fin les lignes de 3 à 7.
11. Créer trois copies du fichier /usr/shard/dict/words sous les noms suivants : file1, file2, et
file3. Utiliser la commande paste pour produire un résultat similaire à celui-ci :

A|A|A
A's|A's|A's
AA's|AA's|AA's
AB's|AB's|AB's
ABM's|ABM's|ABM's
AC's|AC's|AC's
ACTH's|ACTH's|ACTH's
AI's|AI's|AI's
...

12. Créer les deux fichiers : file1 (contenant les noms de quelques pays) et file2 contenant (les noms de leurs
capitales respectives). La création de ces fichiers doit se faire avec la commande echo uniquement.

Contenu de file1 : Contenu de file2 :


1 Tunisia 1 Tunis
2 US 2 Washington
3 France 3 Paris
4 Sweden 4 London
5 Canada 5 Stockholm

Utiliser la commande join de sorte à obtenir un fichier content ceci:


1 Tunisia Tunis
2 US Washington
...

13. En utilisant la commande sed, produire un fichier file4 à partir du fichier file1 où le mot « France » sera
remplacé par « Italy ».
14. En utilisant la commande split, subdiviser le fichier file1 en plusieurs parties nommées file1a,
file1b, … où chaque fragment de fichier contient 2 lignes.
15. Répondre aux questions de la page 12 du livre.

Vous aimerez peut-être aussi