Vous êtes sur la page 1sur 3

Systèmes d’exploitation LINUX

Systèmes d’exploitation LINUX


03 février 2021 — Durée: 1h30

Exercice 1 :
Vous vous trouvez actuellement dans votre répertoire de connexion (HOME).
1. Créer un répertoire nommé "Exo1" dans votre répertoire de connexion.
2. En utilisant une seule commande, y copier les fichiers du répertoire /usr/include dont le
nom commence par std. (Le répertoire /usr/include contient les fichiers d’entête standards
en langage C (stdlib.h, ...)).
3. Afficher la liste des fichiers de /usr/include dont le nom commence par a, b ou c.
4. Modifier la commande de la question précédente pour qu’au lieu d’afficher le résultat, celui-ci
soit placé dans un fichier nommé List de votre répertoire de connexion.
5. Copier avec la commande "cat" le contenu de fichier List dans un nouveau fichier nommé
Copie.
6. Toujours avec cat, créer un nouveau fichier nommé Double formé par la mise bout à bout
(concaténation) des fichiers List et Copie.
7. Vérifier le nombre de lignes de fichier Double.
8. En une seule ligne, faire afficher le nombre de fichiers qui se teminent par ".h" de /usr/include.
9. Afficher la liste des répertoires plus vieux que 3 jours situés sous votre répertoire de
connexion.
Correction :
find $HOME -ctime +3 type d

Exercice 2 : Copier en toute sécurité


Correction : La correction est globale, à la fin de l’exercice.
1. Créez la commande copier qui permet de copier le contenu d’un fichier source dans un
fichier destination. La commande reçoit en arguments deux noms de fichiers : la source et
la destination.
Le script se termine avec un code de sortie d’erreur, et affiche un message d’erreur si l’une
des conditions suivantes est réalisée :
— le nombre d’arguments est incorrect ;
— le fichier source n’existe pas ou n’est pas copiable (pas d’accès en lecture) ;
— le fichier source n’est pas un fichier ordinaire ;
— le fichier destination existe.
2. Modifiez votre script de manière à ce que, si le fichier destination existe, au lieu de se
terminer, votre script demande la confirmation à l’utilisateur, à la manière de l’exemple
suivant :

$ copier bonjour . c salut . c


Le fichier salut . c existe , l ' é craser ( o / n ) ? o
$ copier liste . c salut . c
Le fichier salut . c existe , l ' é craser ( o / n ) ? n

STIC L2 — 2020/2021 1 Iset’Com


Systèmes d’exploitation LINUX

3. Si l’utilisateur entre une réponse qui n’est pas o ou n, la question lui soit reposée, jusqu’à
ce que sa réponse soit valide.
Correction :

# ! / bin / bash
if [ " $ # " - ne 2 ] ; then
echo " usage : $0 SOURCE DESTINATION " >&2
exit 1
fi

src = $1
dest = $2

if ! [ -e " $src " ] || ! [ -r " $src " ] ; then


echo " le fichier $src n ' existe pas ou n ' est pas copiable " >&2
exit 2
fi

if ! [ -f " $src " ] ; then


echo " le fichier $src n ' est pas un fichier ordinaire " >&2
exit 3
fi

if [ -e " $dest " ] ; then


reponse = " "
while [ " $reponse " != " o " ] && [ " $reponse " != " n " ] ; do
echo " Le fichier $dest existe , l ' é craser ( o / n ) ? "
read reponse
done
if [ $reponse == " o " ] ; then
cp " $src " " $dest "
fi
else
cp " $src " " $dest "
fi

Exercice 3 : Ranger
Le but de cet exercice est de construire pas à pas un script ranger qui range les fichiers
passés en arguments dans les sous-répertoires images, documents ou videos du répertoire
de travail selon le principe suivant :
— les fichiers dont l’extension est .pdf sont rangés (déplacés) dans documents ;
— les fichiers dont l’extension est .png ou .gif sont rangés dans images ;
— les fichiers dont l’extension est .avi ou .mov sont rangés dans videos.
Correction : Correction à la fin de l’exercice.
1. Écrire le script ranger qui accepte un nombre quelconque d’arguments.
2. Vérification des répertoires cible : Si l’un de répertoires documents, images ou videos
n’existe pas dans le répertoire personnel, il soit créé.

STIC L2 — 2020/2021 2 Iset’Com


Systèmes d’exploitation LINUX

3. Vérification des répertoires cible (bis) : si un fichier documents, images ou videos existe
déjà dans le répertoire personnel mais :
— n’est pas un répertoire, ou bien
— est un répertoire qui n’a pas les permissions suffisantes pour y déplacer des fichiers (à
vous de dire lesquelles)
alors le script affiche un message d’erreur, puis sort avec un code d’erreur approprié.
Correction :

# ! / bin / bash

rep_img = " $HOME / images "


rep_vid = " $HOME / videos "
rep_doc = " $HOME / documents "

for rep in " $rep_img " " $rep_vid " " $rep_doc " ; do
if ! [ -e " $rep " ] ; then
mkdir " $rep "
elif ! [ -d " $rep " ] ; then
echo " Le fichier $rep existe mais n ' est pas un r é pertoire ! " ←-
>&2
exit 2
elif ! [ -x " $rep " ] || ! [ -w " $rep " ] ; then
echo " Le r é pertoire $rep existe mais " \
" il n ' a pas les permissions suffisantes " >&2
exit 3
fi
done

for fichier in " $@ " ; do # ou juste " for fichier ; do "


case $fichier in
*. png |*. gif ) mv " $fichier " " $rep_img " ;;
*. avi |*. mov ) mv " $fichier " " $rep_vid " ;;
*. pdf ) mv " $fichier " " $rep_doc " ;;
*. jpeg ) mv " $fichier " " $rep_img " ;;
*. jpg ) nouveau_nom = " $ ( basename -s . jpg " $fichier " ) . jpeg "
mv " $fichier " " $rep_img / $nouveau_nom " ;;
*. JPG ) nouveau_nom = " $ ( basename -s . JPG " $fichier " ) . jpeg "
mv " $fichier " " $rep_img / $nouveau_nom " ;;
*. JPEG ) nouveau_nom = " $ ( basename -s . JPEG " $fichier " ) . jpeg "
mv " $fichier " " $rep_img / $nouveau_nom " ;;
esac
done

STIC L2 — 2020/2021 3 Iset’Com

Vous aimerez peut-être aussi