Dans votre répertoire courant, créez en une commande les fichiers suivants:
annee1 Annee2 annee4 annee45 annee41 annee510 annee_saucisse banane
Solution:
touch annee1 Annee2 annee4 annee45 annee41 annee415 annee_saucisse annee_banane
Exercice 2:
Créer le répertoire Year dans votre répertoire courant, en une commande déplacez les fichiers précédemment créés dans le répertoire Year.
Solution:
mv [aA]nnee* ./Year
Exercice 3:
Lister tous les fichiers | se terminant par 5 | |
commençant par annee4 | ||
commençant par annee4 et de 7 lettres maximum | ||
commençant par annee avec aucun chiffre numérique | ||
contenant la chaîne ana | ||
commençant par a ou A |
ls *5 |
ls annee4* |
ls annee4? |
ls annee[!0-9]* |
ls *ana* |
ls [aA]* |
Copier les fichiers dont l'avant dernier caractère est un 4 ou 1 dans le répertoire /tmp en une seule commande.
Solution:
cp *[41]? /tmp
Dans votre répertoire courant, créez un répertoire courant essai_droit, par défaut ce répertoire est à 755 (rwxr-xr-x), quelles sont les commandes (en notation symbolique et en base 8) pour lui donner les droits suivant (on suppose qu'après chaque commande on remet le répertoire à 755:
propriétaire | groupe | les autres | |||||||
droit en lecture | droit en écriture | droit d'accès | droit en lecture | droit en écriture | droit d'accès | droit en lecture | droit en écriture | droit d'accès | |
commande 1 | oui | oui | oui | oui | non | oui | non | non | oui |
commande 2 | oui | non | oui | non | oui | non | non | non | oui |
commande 3 | non | oui | non | non | non | oui | oui | non | non |
commande 4 | non | non | oui | oui | non | oui | non | non | non |
commande 1 | chmod 751 essai_droit | |
chmod o-rw essai_droit | ||
commande 2 | chmod 521 essai_droit | |
chmod u-w,g-rx,g+w,o-r essai_droit | ||
commande 3 | chmod 214 essai_droit | |
chmod u-rx,g-r,o-x essai_droit | ||
commande 4 | chmod 150 essai_droit | |
chmod u-rw,o-rx essai_droit |
Créez un fichier droit dans le répertoire essai_droit, par défaut ce fichier est à 644 (rw-r--r--).En partant du répertoire courant, pour chaque commande de l'exercice précédent, essayez d'accèder au répertoire essai_droit (commande cd), de faire un ls dans essai_droit et de modifier le fichier avec un éditeur quelconque (vi par exemple).
Solution:
commande 1 | on peut accéder au répertoire (droit d'accès x) on peut faire ls (droit en lecture sur le répertoire r), et modifier le fichier (droit en écriture sur le répertoire w et le fichier w) | |
commande 2 | on peut accéder au répertoire (droit d'accès x), on peut faire ls (droit en lecture sur le répertoire r), et modifier le fichier (le droit en écriture sur le répertoire n'est pas pris en compte dès lors que vous avez le droit en écriture sur le fichier) | |
commande 3 | on ne peut pas accéder au répertoire (pas de droit d'accès x) | |
commande 4 | on peut accéder au répertoire (droit d'accès x), on ne peut pas faire ls (pas de droit de lecture), on peut éditer et modifier le fichier (droit en écriture sur le répertoire et sur le fichier). |
Tapez la commande umask, de manière à ce que les fichiers lors de leur création aient par défaut les droits 640 (rw-r-----), et les répertoires 750 (rwxr-x---).
Solution:
Pour un fichier
masque maximum pour un fichier | 666 | rw-rw-rw- | |
à retirer | 026 | ----w-rw- | |
droit par défaut | 640 | rw-r----- |
masque maximum pour un répertoire | 777 | rwxrwxrwx | |
à retirer | 027 | ----w-rwx | |
droit par défaut | 640 | rwxr-x--- |
umask 027
(Pour un fichier retirer 026 ou 027 est équivalent)
Créer un répertoire essai-grep dans votre home directory. Dans ce répertoire créer les fichiers suivants:
tomate poire pomme cerise Fraise fraise courgette POMME3 afraise
Editez les fichiers (sortie de la commande ls redirigée vers grep) avec les critères sur leur nom suivant:
Critère 1 | Le nom doit être Fraise ou fraise | |
Critère 2 | se est en fin de nom | |
Critère 3 | ai est présent dans le nom | |
Critère 4 | Nom contenant un chiffre numérique | |
Critère 5 | Nom contenant la chaîne mm ou MM |
mkdir ~/essai-grep | ||||
cd ~/essai-grep | ||||
touch tomate poire pomme cerise Fraise fraise courgette POMME3 afraise | ||||
Critère 1 | ls | grep "^[fF]raise$" | |||
Critère 2 | ls | grep "se$" | |||
Critère 3 | ls | grep "ai" | |||
Critère 4 | ls | grep "[0-9]" | |||
Critère 5 | ls | grep "[mM]\{2\}" |
Pour rediriger le résultat vers un fichier, vous pouvez faire, par exemple pour le critère 1:
grep "^[fF]raise$" mon-fichier
Exercice 2
Copiez le fichier /etc/passwd dans votre home directory. Editez la ligne commençant par votre nom de login.
Solution:
cd | ||
cp /etc/passwd ~ | ||
cat passwd | grep "^monnom" | avec login le nom de votre login ( 8 lettres) |
Dans le fichier passwd qui est dans votre home directory, éditez les lignes commençant par des noms de login ne contenant pas de chiffre.
Soluce:
cat passwd | grep "^[^0-9][^0-9]*:"
ou
cat passwd | grep "^[a-z][a-z]*:"
Exercice 4
Editez les lignes du fichier passwd commençant par des noms de login de 3 ou 4 caractères.
Solution:
cat passwd | grep "^.\{3,4\}:"
Copiez le fichier /etc/passwd dans votre home directory. Editez uniquement les champs contenant le login et la home directory.
Solution:
cd | |
cp /etc/passwd ~ | |
cut -d: -f1,6 passwd |
Triez passwd sur le nom
Solution:
sort -t: +0 -1 passwd
Exercice 3
Extraire les nom de login et UID puis triez suivant les UID, le tout en une seule commande, vous redirigerez le tout vers un fichier
Solution:
cut -d: -f1,3 passwd | sort -t: -n +1 -2 > lefichier
Exercice 4
Dans le fichier de résultat précédent remplacer les ":" par des " " (espace).
Solution:
cat lefichier | tr ":" " " > lefichier
Nota:
On aurait pu avoir le même résultat en une seule commande:
cut -d: -f1,3 | sort -t: -n +1 -2 | tr ":" " " > lefichier
Exercice 5
Editez les cinq dernières lignes du fichier.
Solution:
tail -5 lefichier
Exercice 6
Editez les cinq premiers caractères du fichier.
Solution:
head -5c lefichier
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.
Solution:
find / -name "*.c" -print 2>/dev/null | |
find / -name "[Xx]*" -print 2>/dev/null | |
find / -name "[!0-9]" -print 2>/dev/null |
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).
Solution:
find /usr (-size +2000 -a -perm 755) -print 2>/dev/null
Exercice 3
Combien il y a de fichiers dans toute l'arborescence vous appartenant et ayant les droits fixés à 666 (-rw-rw-rw-).
Solution:
find / (-user olivier -a -perm 666 -print) | wc -l
Exercice 4
Trouver tous les fichiers core dans l'arborescence et supprimez les après confirmation.
Solution:
find / -name "core" -print -ok rm {}\;
nom de la mesure | | | lieu de la mesure | | | date de la mesure | | | valeur brute | | | correction 1 | | | correction 2 | | | correction 3 | | | valeur corrigée | | |
marcel | | | brest | | | 18/12/1998 | | | 12.5 | | | 1.34 | | | 1.23 | | | -1.5 | | | 13.47 | | |
polo | | | loctudy | | | 21/05/1997 | | | 11.5 | | | 1.24 | | | 1.12 | | | -1.2 | | | 12.66 | | |
otto | | | camaret | | | 04/09/1995 | | | 9.3 | | | 0.98 | | | 1.17 | | | -1.12 | | | 10.33 | | |
Exercice 1
Vous vous êtes bourrés sur le signe de la correction 1, de même dans la correction 2, vous avez découvert que vous avez commis une petite erreur et qu'il fallait lui ajouter 0.1. Modifier le fichier en prenant en compte ces corrections, faites en sorte que la valeur corrigée soit modifiée en conséquence.
Dans le même exercice vous afficherez la somme totale des valeurs corrigées et la valeur corrigée moyenne. Ces valeurs doivent être sauvegardées dans un fichier résultat.
Solution:
#!/bin/bash | |
awk ' BEGIN { FS="|";OFS="|" } | |
NR = =1 { printf("%s\n",$0)} | |
NR>1 { $5*=-1 | |
$6+=0.1 | |
$8=$4+$5+$6+$7 | |
somme+=$8 | |
printf("%s\n",$0)} | |
END { printf("somme totale des valeurs corrigées %f \n",somme) > "resultat"; | |
printf("valeur corrigée moyenne %f \n" (somme/(NR-1)) >> "resultat"} | |
' $1 |
exo1.awk mesure > mesure.corrigee
Après exécution, vérifiez l'existence et le contenu du fichier resultat.
Exercice 2
Afficher les mesures ayant une année paire. Redirigez le résultat de la recherche vers un fichier paire.
Solution:
#!/bin/bash | |
awk ' BEGIN { printf("Mesures ayant une année paire \n") > "paire";FS="|"} | |
NR>1 { annee=substr($3,7,4) | |
if (annee%2= =0) | |
{ printf("mesure %s ",$1); printf(" année %s paire\n ",annee) >> "paire"} | |
' $1 |
exo2.awk mesure
Après exécution, vérifiez l'existence et le contenu du fichier paire.
Exercice 3
Vérifiez que le format de la date jj/mm/aaaa est correcte ainsi que le format du lieu (formé que de lettres de l'alphabet en minuscules ou majuscules).
Solution:
#!/bin/bash | |
awk ' BEGIN { printf("Vérification du format \n";FS="|" } | |
NR>1 && $2 !~ /^[0-3][0-9]\/[01][0-9]/\[0-9][0-9][0-9][0-9]$/ | |
{ printf(" Mauvais format de date pour mesure %s \n", $1 } | |
NR>1 && $2 !~ /^[a-zA-Z][a-zA-Z]*$/ | |
{ printf(" Mauvais format du lieu pour mesure %s \n",$1 } | |
' $1 |
exo3.awk mesure
Le fonctionnement du script sous LINUX est un peu foireux, ça marche bien par contre sur d'autres environnements (HP-UX ou Solaris), va savoir pour quoi...
On pourrait améliorer encore plus la vérification en vérifiant bien que la date va de 1 à 31 et le mois de 1 à 12, avec un script du style:
#!/bin/csh | |
awk ' BEGIN { printf("Vérification du mois et du jour\n");FS="|") | |
NR>1 && $3 !~ /^[0-3][0-9]\/[01][0-9]/\[0-9][0-9][0-9][0-9]$/ | |
{ jour=substr($3,1,2) | |
mois=substr($3,3,2) | |
if (jour > 31 || mois >12) { printf("mauvais format pour mesure %s\n",$1)} | |
} | |
' $1 |
Exercice 4
Afficher les noms de mesure et leur valeur corrigée associée en vous servant d'un tableau associatif.
Solution:
#!/bin/bash | |
awk ' BEGIN { printf("Affichage des mesures et de leur valeur corrigée \n");FS="|"} | |
NR>1 { mesure-corrigee[$1]=$8 | |
END | |
{ for (mesure in mesure-corrigee) | |
{printf("mesure %s ",mesure); printf(" égale à %s \n",mesure-corrigee[mesure]) }} | |
' $1 |
exo4.awk mesure