Exercices sur les différentes commandes UNIX
Rédigé par GC Team, Publié le 29 Août 2010, Mise à jour le Mardi, 10 Août 2021 15:571- 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
-
nom de la machine
-
détail des disques
-
programmes en fonctionnement
-
les votresps
-
ceux des autres utilisateursps -A
-
-
configuration réseau
-
place utilisée dans mon répertoire
-
processus les plus gourmands en fonctionnement
6- Exercice unix commandes - find - head - tail - tubes - more
Exercice 1 : Commande find
- Afficher la liste des fichiers .h situés sous le répertoire /usr/include.
- 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 :
- find /etc -name "*.conf"
- find $HOME -ctime +3
Commande head - tail - tubes :
1. head -5 /etc/passwd
tail -5 /etc/passwd
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 )
- 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 ?
- Même question avec un lien symbolique.
- Quelles sont les différences entre les liens durs et les liens symboliques ?
- Dans quel cas ne peut-on pas faire de lien physique ? Que faut-il faire ?
- Quel est l'effet de chmod sur un lien ?
Correction : Exercice sur la commande ln ( les liens unix )
-
ln tmp/bidon blo
Les contenus sont identiques. Les noms de fichierstmp/bidon
etblo
renvoient au même endroit sur le disque dur. -
ln -s tmp/bidon blo
Le contenu semble être identique, cependant, à propos dublo
, le disque dur ne contient comme information que le nom du fichier vers lequel le lien pointe (tmp/bidon
). -
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.
-
On ne peut pas faire de lien dur vers un répertoire. Dans ce cas, il faut donc utiliser un lien symbolique.
-
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
- trouver tous les fichiers commençant par les deux lettres rc situés dans le dossier /etc ou ses sous-dossiers
- trouver le nombres de fichiers situés dans /etc et dans ses sous-dossiers dont le nom fait exactement 8 caractères
- même question avec les fichiers dont le nom fait plus de 20 caractères
- 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" ?
- donnez une commande qui trouve et supprime les fichiers situés dans votre dossier personnel et dont le nom fini par un ~.
- 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
- 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.
- 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
- 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.
- Afficher la liste des répertoires de connexion des utilisateurs déclarés dans le fichier /etc/passwd.
- 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. - 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)
-
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
Exercice 2
Exercice 3
Exercice 4
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
- comment créer en une commande les dossiers td1, td2, td3, td4, cours1, cours2, cours3 et cours4.
- mettez en une commande les résultats des commandes w et df dans le fichier ex1-2.txt
- Que fait la commande suivante : { cd /etc; du -sk * } > ex1-3.txt.
- 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).
- 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: *'
- corrigez la commande précédente pour qu'elle affiche correctement le shell de l'utilisateur et la liste des fichiers
- 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
- écrire un script qui indique si une personne (dont le nom sera fourni en argument à votre script) est connectée sur votre poste
- 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)
- 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)
- écrire un script qui affiche le login d'un utilisateur dont on fournit l'uid
- 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
- tapez "sleep 120". Quel est le PID de la commande sleep. Quel est celui de son processus père ? Quand reprenez-vous la main ?
- 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.
- affichez l'arborescence de vos processus
- 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.
- 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
- Indiquez comment réaliser ces opérations depuis un autre shell que le shell de lancement
- Comment aurait-on du procéder pour lancer cette commande directement en tâche de fond ?