TP #6 : Sujets d'entrainement
Responsables : Jean-Patrick Gelas, Nicolas Louvet
Version : 0.1a (11/2021)
Cet énoncé de TP comporte deux sujets (il s'agit d'une ancienne épreuve de TP). Vous pouvez traiter le SUJET 1 ou le SUJET 2, ou les deux ! Pour réaliser ces TP vous devrez télécharger l'archive fichiers.tgz.
SUJET 1
Exercice 1 : filtres et modification de fichiers
Soit les fichiers bf.txt et hf.txt disponible dans l'archive. Au
sujet du fichier bf.txt, donnez à chaque fois une commande pour
effectuer le traitement/filtrage indiqué :
- afficher toutes les lignes contenant la chaîne
radio.
- compter le nombre de lignes contenant la chaîne
radio.
- afficher toutes les lignes se terminant par le caractère
e.
- afficher toutes les lignes commançant par le caractère
*.
- afficher le fichier en remplaçant toutes les occurences de
KHZparkHz.
- fabriquer un fichier
paragraphe_1.txtne contenant que le 1er paragraphe du fichier.
- ajouter la ligne
Maintenant la HFà la fin du fichier
Donnez à chaque fois une commande pour effectuer les traitements suivants :
- concaténer les fichiers
bf.txtethf.txten un fichierfrq.txt
- renommer le fichier
bf.txtenbf.txt.old
- déplacer le fichier
hf.txtvers le répertoire/tmp/
Exercice 2 : que font ces commandes ?
On utilise pour certaines questions le fichier bf.txt précédent.
Donnez une EXPLICATION (au plus trois phrases) de la commande
indiquée : NE PAS RECOPIER ce qu’elle affiche !
find ~/ -name "*.[hc]"
sed -E 's/[0-9][0-9]*/xxx/g' bf.txt
cat bf.txt | sed -E 's/([0-9]) ([0-9]+)/\1\2/g' > newbf.txt
ls -l /etc/passwd | cut -d" " -f 3,4
wc -c < bf.txt > num
Exercice 3 : un petit script
Le fichier /etc/passwd contient les informations sur les utilisateurs
qui ont un accès direct au système. Jetez un oeil à ce fichier (cat
/etc/passwd) : chaque ligne commence par le login d’un utilisateur.
Ecrivez un script shell finduser.sh qui prendra comme paramètre le nom
de login d’un utilisateur, et cherchera dans le fichier /etc/passwd s’il
trouve le login correspondant. Si on appelle le script par ./finduser nobody :
-
si
nobodyest un nom de login présent sur le système, alors le script doit afficherUtilisateur nobody présent; -
sinon, le script affiche
Pas d'utilisateur nobody sur le système.
Testez votre script avec un nom d’utilisateur qui existe bien sur les
machines des salles de TP, comme sys, mais aussi avec un utilisateur
qui n’existe pas comme toto.
Complétez votre script finduser.sh de façon à ce que, si l’utilisateur
existe, il affiche (en plus du message précédent) son identifiant (UID,
3ème champ sur chaque ligne de /etc/passwd).
Faites en sorte que le script vérifie qu’il est bien appelé avec un paramètre, et affichez un message d’aide à l’utilisateur le cas échéant.
SUJET 2
Exercice 1 : filtres et modification de fichiers
Soit le fichier fm.txt disponible dans l'archive
fichiers.tgz. Donnez à chaque fois une commande pour
effectuer le traitement/filtrage indiqué sur ce fichier :
- compter le nombre de lignes contenant la chaîne
fréquence.
- afficher les lignes ne contenant pas la chaîne
radio.
- ajouter la ligne
La bande FMau début du fichier.
- afficher toutes les lignes se commençant par un chiffre.
- afficher toutes les lignes terminant par le caractère
..
- fabriquer un fichier par1.txt ne contenant que le dernier paragraphe du fichier.
- afficher le fichier en remplaçant toutes les occurences de
QuandparQUAND.
Donnez à chaque fois une commande pour effectuer les traitements suivants :
- copier le fichier
fm.txtdans/tmp/.
- renommer le fichier
/tmp/fm.txten/tmp/newfm.txt.
- lister tous les fichiers se terminant par
.confdans/etc.
Exercice 2 : que font ces commandes ?
On utilise pour certaines questions le fichier fm.txt précédent.
Donnez une EXPLICATION (au plus trois phrases) de la commande
indiquée. NE PAS RECOPIER ce qu’elle affiche !
-
grep -v "^#" /etc/services -
sed -E 's/([0-9]+),([0-9])/\1\.\2/g' fm.txt -
cat fm.txt | sed -E 's/(O[A-Z]+|CC[A-Z]+)/???\1???/g' -
n=$(wc -l < fm.txt) -
find ~/ -name "*.c"
Exercice 3 : un petit script
Le fichier /etc/services contient les informations sur les différents
services réseau définis de façon standard. Jetez un oeil à ce fichier
(less /etc/services) : chaque ligne commence par un nom de service
réseau (http, https, ssh, ...).
Ecrivez un script shell findserv.sh qui prend comme paramètre le nom
d’un service réseau, et cherche dans le fichier /etc/services s’il
trouve un service dont le nom commence comme celui donné en paramètre.
Si on appelle le script par ./findserv bidon :
-
si bidon est le début d’un nom de service pésent dans
/etc/services, alors le script doit afficher la ou les lignes correspondantes dans le fichier. -
sinon, le script affiche
Pas de service commençant par bidon.
Testez votre script avec un nom de service existant (comme http ou
ssh), mais aussi avec un nom de service qui n’existe pas comme bidon.
Par exemple, la commande ./findserv.sh http doit donner que chose
comme :
http 80/tcp www # WorldWideWeb HTTP
https 443/tcp # http protocol over TLS/SSL
http-alt 8080/tcp webcache # WWW caching service
http-alt 8080/udp
Faites en sorte que votre script vérifie qu’il est bien appelé avec un paramètre, et affichez un message d’aide à l’utilisateur le cas échéant.
Félicitation ! Vous avez terminé le TP #6.