Exercices sur les différentes commandes UNIX

1- Exercice UNIX sur l'exécution différée - commande at

Exercice 1

Exécuter le script traitement se trouvant sous bin de votre répertoire de connexion :

  • Le Vendredi à 17h00
  • La semaine prochaine au même moment
  • Deux jours plus tard


Exercice 2

Demander, de différentes manières, d'exécuter le script traitement à 16h15 le 24 janvier 2002, sachant que nous somme en octobre 2001.

 A. ED-DBALI


Correction : Exercice UNIX sur l'exécution différée - commande at

Exercice 1 :

at 17:00 Fri $HOME/bin/traitement
at now next week $HOME/bin/traitement
at now +2 days $HOME/bin/traitement

Exercice 2 :

at  3:00  pm  January  24 traitement
at  3pm  Jan  24 traitement
at  1500  jan  24 traitement

2- Exercice UNIX sur l'exécution périodique

Exercice 1

Alimenter, toutes les heures, les fichiers charge.jour.log, charge.soir.log et charge.week-end.log du répertoire charge de votre répertoire de connexion par les informations qui donnent respectivement la charge du système du jour, du soir des jours de la semaine et tout le week-end.

Exercice 2

Envoyer tous les premiers janvier de chaque année, le courrier bonne_annee à vos correspondants user1, user2, ...

A. ED-DBALI


Correction : Exercice UNIX sur l'exécution périodique

Exercice 1 :

0 6-20      * * 1-5 w -u >> ......./charge/charge.jour.log
0 0-5,21-23 * * 1-5 w -u >> ......./charge/charge.soir.log
0 *         * * 0,6 w -u >> ......./charge/charge.week-end.log


Exercice 2 :

0 8 1 1 * mail user1 user2 ........ < bonne_annee

Courrier envoyé le premier janvier à 8h00

3- Exercice transformer les minuscules en majuscules sous UNIX


Soit min le fichier suivant :

       aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm
nnnn oooo pppp qqqq rrrr ssss tttt uuuu vvvv wwww xxxx yyyy zzzz

Quelle série de commandes permet d'obtenir le résultat suivant :

       aaaa bbbb cccc dddd eeee ffff gg | AAAA BBBB CCCC DDDD EEEE FFFF GG
gg hhhh iiii jjjj kkkk llll mmmm | GG HHHH IIII JJJJ KKKK LLLL MMMM
nnnn oooo pppp qqqq rrrr ssss tt | NNNN OOOO PPPP QQQQ RRRR SSSS TT
tt uuuu vvvv wwww xxxx yyyy zzzz | TT UUUU VVVV WWWW XXXX YYYY ZZZZ

A. ED-DBALI

Correction : Exercice transformer les minuscules en majuscules sous UNIX


fold -w32 min | tee /tmp/min | tr [:lower:] [:upper:] | 
paste -d '|' /tmp/min -; rm /tmp/min

fold -w32 min : coupe les lignes à la 32 ème colonne
tee /tmp/min : conserve la sortie dans le fichier /tmp/min tout en laissant passer le résultat sur la sortie standard
tr [:lower:] [:upper:] : transforme les minuscules en majuscules paste -d '|' /tmp/min - : join les deux fichiers en séparant leurs lignes par |

4- Exercices sur la commande find

Exercice 1

Cherchez dans toute l'arborescence les fichiers dont le nom se termine par .c, redirigez les erreurs vers le fichier poubelle /dev/null

Commençant par X ou x.

Dont les noms ne contiennent pas de chiffre.

Exercice 2

Chercher dans /usr les fichiers dont la taille dépasse 1Mo (2000 blocs de 500Ko) et dont les droits sont fixés à 755 (-rwxr-xr-x).

Exercice 3

Combien il y a de fichiers dans toute l'arborescence vous appartenant et ayant les droits fixés à 666 (-rw-rw-rw-).

Exercice 4

Trouver tous les fichiers core dans l'arborescence et supprimez les après confirmation.


Correction : Exercices sur la commande find

Exercice 1

find / -name "*.c" -print 2>/dev/null
find / -name "[Xx]*" -print 2>/dev/null
find / -name "[!0-9]" -print 2>/dev/null

Exercice 2

find /usr (-size +2000 -a -perm 755) -print 2>/dev/null

Exercice 3

find / (-user olivier -a -perm 666 -print) | wc -l

Exercice 4

find / -name "core" -print -ok rm {}\;

5- Exercice linux commandes Informations système

Décrire l'environnement dans lequel vous évoluez:

  • nom de la machine
  • détail des disques
  • programmes en fonctionnement
    • les votres
    • ceux des autres utilisateurs
  • configuration réseau
  • place utilisée dans mon répertoire
  • processus les plus gourmands en fonctionnement

Correction : Exercice linux commandes Informations système

Décrire l'environnement dans lequel vous évoluez:
  • nom de la machine
        hostname
  • détail des disques
        df
  • programmes en fonctionnement
    • les votres
      ps
    • ceux des autres utilisateurs
      ps -A
  • configuration réseau
        ifconfig (ipconfig)
  • place utilisée dans mon répertoire
         du -b -c $HOME
  • processus les plus gourmands en fonctionnement
         top

6- Exercice unix commandes - find - head - tail - tubes - more

Exercice 1 : Commande find

  1. Afficher la liste des fichiers .h situés sous le répertoire /usr/include.
  2. Afficher la liste des fichiers plus vieux que 3 jours situés sous votre répertoire de connexion.

Exercice 2 : Commande head - tail - tubes

  • Afficher les 5 premières, puis les 5 dernières lignes du fichier /etc/passwd.
  • Afficher la 7ième ligne de ce fichier (et elle seule), en une seule ligne de commande.

Exercice 3 :  Commande tr - more

  • Afficher le fichier /etc/passwd en remplaçant les caractères / par des X.
  • Obtenir le résultat précédent page par page.

Correction : Exercice unix commandes - find - head - tail - tubes - more

Commande find :

  1. find /etc -name "*.conf"
  2. find $HOME -ctime +3

Commande head - tail - tubes :

      1.   head -5 /etc/passwd
            tail -5 /etc/passwd

      2.  head -n7 passwd | tail -n1

Commande tr - more - tubes :

      3.  cat /etc/passwd | tr / X

      4.  cat /etc/passwd | tr / X | more

7- Exercice sur la commande ln ( les liens unix )

  1.  Vous avez chez vous un répertoire tmp/ qui contient un fichier bidon. Créez un lien physique sur tmp/bidon appelé blo, dans votre répertoire d'accueil (HOME). Comparez les contenus de tmp/bidon et de blo. Que contient blo ?
  2.  Même question avec un lien symbolique.
  3.  Quelles sont les différences entre les liens durs et les liens symboliques ?
  4.  Dans quel cas ne peut-on pas faire de lien physique ? Que faut-il faire ?
  5.  Quel est l'effet de chmod sur un lien ?

 Correction : Exercice sur la commande ln ( les liens unix )

  1. ln tmp/bidon blo
    
    Les contenus sont identiques. Les noms de fichiers tmp/bidon et blo renvoient au même endroit sur le disque dur.
  2. ln -s tmp/bidon blo
    
    Le contenu semble être identique, cependant, à propos du blo, le disque dur ne contient comme information que le nom du fichier vers lequel le lien pointe (tmp/bidon).
  3. On vient d'en voir une. On en déduit que le temps d'accès au contenu d'un lien dur est plus rapide que pour un lien symbolique. Une autre différence notable est que, contrairement aux liens symboliques, un lien dur ne peut pas pointer vers un répertoire.

  4. On ne peut pas faire de lien dur vers un répertoire. Dans ce cas, il faut donc utiliser un lien symbolique.

  5. S'il s'agit d'un lien dur, les droits des deux fichiers liés sont modifiés. En revanche, s'il s'agit d'un lien symbolique, les deux fichiers peuvent avoir des droits différents.

Auteur : Joël Riou.

8- Exercice unix - commande find - entrées sorties -

Exercice 1: commande find

  1. trouver tous les fichiers commençant par les deux lettres rc situés dans le dossier /etc ou ses sous-dossiers
  2. trouver le nombres de fichiers situés dans /etc et dans ses sous-dossiers dont le nom fait exactement 8 caractères
  3. même question avec les fichiers dont le nom fait plus de 20 caractères
  4. Donnez une commande permettant de connaitre tous les fichiers, d'extension .c ou .h qui contiennent la chaine include. Meme chose pour ceux ne contenant pas main. Comment faire pour que les majuscules n'importent pas pour "main" ?
  5. donnez une commande qui trouve et supprime les fichiers situés dans votre dossier personnel et dont le nom fini par un  ~.
  6. donner une commande permettant de compresser avec l'utilitaire bzip2 les fichiers de votre dossier personnel dont le contenu n'a pas été modifié depuis plus de 30 jours et ceux, non modifiés depuis plus de 7 jours dont la taille dépasse 20Mo

Correction : Exercice unix - commande find - entrées sorties -

Exercice 2: entrées / sorties

  1. Soit deux fichier f1 et f2 contenant chacun un nombre entier par ligne. Pour chaque ligne, on souhaite afficher la somme du nombre de f1 et du nombre de f2. Ecrire le script correspondant.
  2. Faites en sorte que votre script accepte un troisième paramètre qui sera un nom de fichier dans lequel sera sauvé le résultat
  3. idem mais avec des noms d'option: -1 -2 et -o pour le fichier de sortie.                                                                 

9- Exercices sur les commandes head tail et sort pour trier

Exercice 1

Etant donné un fichier dont le contenu est :

 Nom             Résultat
 ------------------------
 Yann 104
 Tudor 8
 Patrick 15
 Carole 104
 Gérard 32
 René 5
 Lucienne 15

Trier le fichier par ordre croissant du champs Résultat. Les deux lignes titres doivent figurer dans la sortie triée.

Exercice 2

On suppose que le fichier précédent est maintenant de la forme :

 Nom             Résultats
 -------------------------
 Yann 104:33:48
 Tudor 8:19:0
 Patrick 15:98:48
 Carole 104:33:20
 Gérard 32:0:10
 René 5:13:10
 Lucienne 15:98:48

Donner le classement par ordre croissant du premier résultat, puis du deuxième résultat, puis du troisième résultat. L'ordre alphabétique est pris en compte si les personnes ont les mêmes résultats (comme c'est le cas de Patrick et Lucienne). Comment sortir les rangs également ?

Exercice 3

Trier un fichier sur le premier caractère de son deuxième champs.

Exercice 4

Trier un fichier sur la portion entre le 3ème et 8ème caractère.

A. ED-DBALI


Correction : Exercices sur les commandes head tail et sort pour trier

Exercice 1 :

head -2 fichier; tail +3 fichier | sort -t '\t' -k2n


Exercice 2 :

tail +3 fichier | tr : ' ' | sort -t '\t' -k2n -k3n -k4n -k1 | tr ' ' :

Pour avoir le classement, il suffit d'utiliser l'option -n de cat :

tail +3 fichier | tr : ' ' | sort -t '\t' -k2n -k3n -k4n -k1 | tr ' ' : | cat
-n

Exercice 3 :

sort -b -k 2.1,2.1 fichier


Exercice 4 :

sort -b -k 1.3,1.8 fichier

10- TP unix commande grep - cut - uniq - sort - tubes

 Étudier la documentation des commandes cut et uniq.

  1. Afficher la liste des répertoires de connexion des utilisateurs déclarés dans le fichier /etc/passwd.
  2. On rappelle qu’à chaque utilisateur est associé un interpréteur de commandes (shell) lancé lors de son login. La commande correspondante est indiquée dans le 7ième champ du fichier /etc/passwd.
    Afficher en une ligne de commande le nombre d’interpréteurs de commandes différents mentionnés dans /etc/passwd.
  3. On dispose d'un fichier texte telephone.txtcontenant un petit carnet d’adresses.Chaque ligne est de la forme "nom prenom numerotelephone". Les champs sont séparés par des tabulations. Répondre aux questions suivantes en utilisant à chaque fois une ligne de commande shell:
  • Afficher le carnet d’adresse trié par ordre alphabétique de noms.
  • Afficher le nombre de personnes dans le répertoire.
  • Afficher toutes les lignes concernant les “Dupond”.
  • Afficher toutes les lignes ne concernant pas les “Dupond”.
  • Afficher le numéro de téléphone (sans le nom) du premier “Dupond” apparaissant dans le répertoire.
  • Afficher le numéro de téléphone (sans le nom) du premier “Dupond” dans l’ordre alphabétique (ordre basé sur les prénoms).

Correction : Exercices sur les commandes head tail et sort pour trier

     Q1)

cut -d: -f 6 passwd
cut -d: -f 7 passwd|sort|uniq|wc -l
 
     Q2)
sort telephone.txt
 
     Q3)
  • wc -l telephone.txt
  • grep Dupond telephone.txt
  • cat telephone.txt | grep -v "Dupond"
  • grep Dupond telephone.txt|uniq -f 1|cut -d\; -f 3
  • sort telephone.txt|grep Dupond |uniq -f 1|cut -d\; -f 3

11- Exercices sur les commandes head grep et find

Exercice 1

Afficher le nombre de sessions ouvertes (c-à-d connexions) sur la machine tout en générant le détail de ses connexions dans le fichier connectes.

Exercice 2

Afficher les L lignes qui entourent la ligne numéro N d'un fichier F. Utiliser cette méthode pour afficher une partie du texte qui entoure la ligne où se trouve une chaîne S qu'on cherche dans un fichier F (utiliser la commande grep).

Exercice 3

Copier sur une clé USB tous les fichiers .sql modifiés ce jour.

Exercice 4

Envoyer par mail à un utilisateur les noms des fichiers .sql et les fichiers .c modifiés ce jour et dont la taille est supérieur à un kilo-octets.
A. ED-DBALI

Correction : Exercices sur les commandes head grep et find

Exercice 1 :

who | tee connectes | wc -l

Exercice 2 :

head $(expr N + L / 2) fichier | tail +$(expr N - L / 2)

Remplacer N et L par des constantes.

expr évalue l'expression donnée. $(commande) = la chaîne résultat de commande.

grep -n mot fichier

Donne les lignes de 'fichier' où figure le 'mot'. L'option -n donne les numéros de lignes. Soit N un numéro de ligne fourni par la commande précédente.

head $(expr N + L / 2) | tail +$(expr N - L / 2)

Renvoie les L lignes qui entourent une ligne contenant 'mot' dans 'fichier'.

Exercice 3 :

find . -name \*.sql -mtime 0 | cpio -o /dev/fd0

Exercice 4 :

find . \( -name \*.sql -o -name \*.c \) -mtime 0 -size +1k -ok mail nom_utilisateur \< {} \

12- TP unix commande gestion de fichiers - cd - mkdir - ls

  1. comment créer en une commande les dossiers td1, td2, td3, td4, cours1, cours2, cours3  et cours4.
  2. mettez en une commande les résultats des commandes w et df dans le fichier ex1-2.txt
  3. Que fait la commande suivante : { cd /etc; du -sk * } > ex1-3.txt.
  4. modifiez cette commande de façon à ce qu'elle ne modifie pas le dossier  courrant (le contenu du fichier obtenu doit être le même).
  5. Qu'affiche la commande suivante: echo 'ceci est mon shell: $SHELL, ceci est un dollar $, ceci est un # ceci est une étoile : * et voici la liste des fichiers du dossier courant: *'
  6. corrigez la commande précédente pour qu'elle affiche correctement le shell de l'utilisateur et la liste des fichiers
  7. même question que précédemment mais sans utiliser ni ' ni "

13- TP Script unix - commande grep - expression rationnelles - expansion de noms de fichiers

  1. écrire un script qui indique si une personne (dont le nom sera fourni en argument à votre script) est connectée sur votre poste
  2. Les login des étudiants ont la forme suivante: filiereNiveau-numero avec niveau valant l1, l2, l3, m1 et m2. combien y a-t-il de comptes d'étudiants de l3 ? (ypcat passwd permet d'obtenir la liste totale des comptes utilisateurs du domaine)
  3. Comment obtenir la liste des étudiants de l3 appartenant au groupe 1008 ? (on pourra faire un "man 5 passwd" pour obtenir de l'aide sur la structure de fichier contenant la liste des utilisateurs)
  4. écrire un script qui affiche le login d'un utilisateur dont on fournit l'uid
  5. comment obtenir la liste des fichiers dont le nom fini par le caractère 4, ceux dont dont le nom ne contient aucun chiffre, ceux dont le nom commence par result et contient moins de 8 caractères ?

14- TP unix - Hiérarchie de processus - recouvrement - commandes internes/externes

  1. tapez "sleep 120". Quel est le PID de la commande sleep. Quel est celui de son processus père ? Quand reprenez-vous la main ?
  2. tapez "exec sleep 120".Quel est le PID de la commande sleep. Quel est celui de son processus père ? Expliquez les différences avec la situation ci-dessus et ce qui se passe une fois que la commande "sleep 120" est finie.
  3. affichez l'arborescence de vos processus
  4. notre shell est bash. Précisez pour chacune des commandes suivantes si elles sont internes, externes et, dans ce cas, le chemin absolu du fichier correspondant: : ls, exec, cd, w,time.
  5. tapez "sleep 600". Comment faites-vous depuis le shell de lancement:
    • reprendre la main en suspensant la commande
    • relancer la commande suspendue
    • la susprendre et la relancer en tâche de fond
  6. Indiquez comment réaliser ces opérations depuis un autre shell que le shell de lancement
  7. Comment aurait-on du procéder pour lancer cette commande directement en tâche de fond ?