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 par kHz.

  • 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 et hf.txt en un fichier frq.txt

  • renommer le fichier bf.txt en bf.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 afficher Utilisateur 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 par QUAND.

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.