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
KHZ
parkHz
.
- fabriquer un fichier
paragraphe_1.txt
ne 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.txt
ethf.txt
en un fichierfrq.txt
- renommer le fichier
bf.txt
enbf.txt.old
- déplacer le fichier
hf.txt
vers 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
nobody
est 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 FM
au 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
Quand
parQUAND
.
Donnez à chaque fois une commande pour effectuer les traitements suivants :
- copier le fichier
fm.txt
dans/tmp/
.
- renommer le fichier
/tmp/fm.txt
en/tmp/newfm.txt
.
- lister tous les fichiers se terminant par
.conf
dans/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.