0% ont trouvé ce document utile (0 vote)
78 vues6 pages

Correction Examen Système d'Exploitation I

Ce document contient les questions et réponses d'un examen sur les systèmes d'exploitation. Il y a trois exercices portant sur les commandes Linux comme cd, pwd, chmod, grep, sort et cut, ainsi que sur la manipulation de fichiers et l'écriture de scripts shell.

Transféré par

TúrKîŚh ChaŇnėl
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
78 vues6 pages

Correction Examen Système d'Exploitation I

Ce document contient les questions et réponses d'un examen sur les systèmes d'exploitation. Il y a trois exercices portant sur les commandes Linux comme cd, pwd, chmod, grep, sort et cut, ainsi que sur la manipulation de fichiers et l'écriture de scripts shell.

Transféré par

TúrKîŚh ChaŇnėl
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Université Mohammed Premier Année universitaire 2019-2020

Faculté des Sciences Filière SMI - Semestre : S3


Département d’Informatique Module : Système d’Exploitation I
Responsable : E.M. DAOUDI

Examen : Session Ordinaire


Le Vendredi 10 Janvier 2020
Durée 1h30
Exercice 1 : (5 pts)
1. On suppose que le répertoire courant est « /home/smi » et que « rep » est un sous répertoire
du répertoire « smi ». Donner les résultats des commandes suivantes :
% (cd rep; pwd)
% pwd
% a=5
% { v=10 ; echo "a = $a v = $v" ; cd ~/rep; pwd ; }
%pwd
2. Soit « fiche » un fichier du répertoire courant.
a. Donner les droits d’accès du fichier « fiche » après avoir exécuté la commande suivante :
% chmod 651 fiche
b. Donner les droits d’accès du fichier « fiche » après avoir exécuté la commande suivante :
% chmod u=rx,o=rx fiche
Exercice 2 : (7 pts)
1. Lister tous les noms des fichiers du répertoire courant dont le premier caractère est la lettre «
a » ou « A » et l’avant dernier caractère est la lettre « t ».
2. Soit «fiche » un fichier du répertoire courant :
a. Que fait la commande suivante :
% grep "a*" < fiche
b. Que fait la commande suivante :
% grep ".$" < fiche
c. Afficher toutes les lignes du fichier « fiche » qui commencent avec un chiffre.
d. Afficher toutes les lignes du fichier « fiche » qui se terminent avec un chiffre suivi de « * ».
e. Afficher toutes les lignes du fichier « fiche » dont le deuxième caractère est un chiffre ou
la lettre « m ».
Exercice 3 : (8 pts)
Soit «etudiant» un fichier du répertoire courant. Chaque ligne de ce fichier contient le nom, le
prénom et la filière d’un étudiant séparés par « ; ». Elle a la forme suivante : prénon;nom;filière
1. Ecrire une commande qui affiche le contenu du fichier « etudiant ».
2. Trier le fichier « etudiant » par ordre alphabétique des filières.
3. Trier le fichier « etudiant » par ordre alphabétique des prénoms.
4. L’objectif dans cette question est d’écrire un script shell qui affiche le contenu du fichier
« etudiant » ligne par ligne sans afficher le champ filière et en affichant, en plus, le numéro de
chaque ligne. L’affichage a la forme suivante : prénon;nom;numéro de la ligne
a. Ecrire un script shell sans utiliser la commande « read » pour parcourir les lignes du fichier.
b. Ecrire un script shell en utilisant la commande « read » pour parcourir les lignes du fichier.
5. L’objectif dans cette question est de construire, à partir du fichier « etudiant » les noms des
logins (« logname ») des utilisateurs et les sauvegarder dans un nouveau fichier nommé
« login ». Chaque nom de login a la forme suivante : « première lettre du pré[Link] ».
Exemple : le nom de login de l’étudiant « mostafa;daoudi;smi » est « [Link] ».
Université Mohammed Premier Année universitaire 2019-2020
Faculté des Sciences Filière SMI - Semestre : S3
Département d’Informatique Module : Système d’Exploitation I
Responsable : E.M. DAOUDI

Correction de l’examen de la Session Ordinaire


Le Vendredi 10 Janvier 2020

Exercice 1 : (5 pts)
1. On suppose que le répertoire courant est « /home/smi » et que « rep » est un sous répertoire
du répertoire « smi ». Donner les résultats des commandes suivantes :
% (cd rep; pwd)
% pwd
% a=5
% { v=10 ; echo "a = $a v = $v" ; cd ~/rep; pwd ; }
%pwd
2. Soit « fiche » un fichier du répertoire courant.
a. Donner les droits d’accès du fichier « fiche » après avoir exécuté la commande suivante :
% chmod 651 fiche
b. Donner les droits d’accès du fichier « fiche » après avoir exécuté la commande suivante :
% chmod u=rx,o=rx fiche

Réponses
1.
% (cd rep; pwd)
Affiche: /home/smi/rep
% pwd
Affiche: /home/smi
% a=5
% { v=10 ; echo "a = $a v = $v" ; cd ~/rep; pwd ; }
Affiche:
a=5 v=10
/home/smi/rep
%pwd
Affiche: /home/smi/rep

2.
2.a.
% chmod 651 fiche
Réponse: Le fichier « fiche » aura les droits suivants : rw- r-x --x
En effet : 6 = 110 correspond aux droit rw-
5 = 101 correspond aux droits r-x
1= 001 correspond aux droits --x
2.b.
% chmod u=rx,o=rx fiche
Réponse: le fichier « fiche » aura les droits suivant : r-x r-x r-x
Exercice 2 :
1. Lister tous les noms des fichiers dont le premier caractère est la lettre « a » ou « A » et l’avant
dernier caractère est la lettre « t ».
Réponse:
- En utilisant la commande « grep »
% ls | grep "^[aA].*t.$" ou % ls | grep "^[aA]" | grep "t.$"
- Sans utiliser la commande « grep »
% ls -d [aA]*t?

2. Soit «fiche » un fichier du répertoire courant :


a. Que fait la commande suivante :
% grep "a*" < fiche
Réponse: elle affiche toutes les lignes du fichier « fiche ».
En effet : elle affiche toutes les lignes du fichier « fiche » qui contiennent l’expression
"a*" c’est-à-dire toutes les lignes où le caractère « a » peut apparaître 0 (n’apparait pas)
ou plusieurs fois.

b. Que fait la commande suivante :


% grep ".$" < fiche
Réponse : elle affiche toutes les lignes du fichier « fiche » sauf les lignes vides.
En effet : elle affiche toutes lignes du fichier « fiche » qui se termine avec un caractère,
donc toutes les lignes non vides.

c. Afficher toutes les lignes du fichier « fiche » qui commencent avec un chiffre.
Réponse :
% grep "^[0-9]" < fiche
d. Afficher toutes les lignes qui se terminent avec un chiffre suivi de *
Réponse:
% grep "[0-9]\*$" < fiche
e. Afficher toutes les lignes dont le deuxième caractère est un chiffre ou la lettre « m ».
Réponse :
% grep "^.[0-9m]" < fiche

Exercice 3 : (8 pts)
Soit «etudiant» un fichier du répertoire courant. Chaque ligne de ce fichier contient le nom, le
prénom et la filière d’un étudiant séparés par « ; ». Elle a la forme suivante : prénon;nom;filière
1. Ecrire une commande qui affiche le contenu du fichier « etudiant ».
Réponse:
% cat etudiant
ou
% head -n +1 etudiant # afficher à partir de la première ligne du fichier « etudiant »

2. Trier le fichier « etudiant » par ordre alphabétique des filières.


Réponse : Les lignes du fichier « etudiant » sont organisées par champs où le séparateur de
champs est « ; ». Donc on effectue un trie par ordre alphabétique suivant le 3ème champ.
% sort -k3 -t" ;" < etudiant

3. Trier le fichier « etudiant » par ordre alphabétique des prénoms.


Réponse :
% sort etudiant
4. L’objectif dans cette question est d’écrire un script shell qui affiche le contenu du fichier
« etudiant » ligne par ligne sans afficher le champ filière et en affichant, en plus, le numéro de
chaque ligne. L’affichage a la forme suivante : prénon;nom;numéro de la ligne
a. Ecrire un script shell sans utiliser la commande « read » pour parcourir les lignes du fichier.
Réponses: Les données du fichier «etudiant» sont organisées en 3 champs séparées par « ; ».

Solution 1 :
#!/bin/bash
let i=1 # on initialise les numéros des lignes du fichier « etudiant » à 1
let n=`wc -l < etudiant` # n désigne le nombre de lignes du fichier « etudiant »
while test $i -le $n ; do # tant que le numéro de la ligne courante est inférieur à n
# on extrait les champs 1 et 2 (prénom et nom) de la ligne courante, et on les
# sauvegarde dans la variable « ligne »
ligne=`tail -n +$i < etudiant | head -n 1 | cut -f1,2 -d";" `
echo "$ligne;$i" # afficher prénom;nom;i où i est le numéro de la ligne courante.
let i=$i+1
done

Solution 2 :.
#!/bin/bash
let i=1 # on initialise les numéros des lignes du fichier « etudiant » à 1
# on extrait les champs 1 et 2 et on les sauvegarde dans la variable var
var=` cut -f1,2 -d";" etudiant ` # ou var=$(cut -f1,2 -d";" etudiant)
for v in $var ; do
echo "$v;$i" # afficher prénom;nom;i où i est le numéro de la ligne courante.
let i=$i+1
done

b. Ecrire un script shell en utilisant la commande « read » pour parcourir les lignes du fichier.
Réponse 1:
#!/bin/bash
let i=1 # on initialise les numéros des lignes du fichier « etudiant » à 1
while read ligne ; do # on lit le fichier « etudiant » ligne par ligne
lg =`echo $ligne | cut -f1,2 -d";"` # on extrait le prénom et le nom (champs 1 et 2)
echo "$lg;$i" # afficher prénom;nom;i où i est le numéro de la ligne courante.
let i=$i+1
done < etudiant # la lecture ‘effectue à partir du fichier « etudiant »

Réponse 2 :
#!/bin/bash
let i=1 # on initialise les numéros des lignes du fichier « etudiant » à 1
# on extrait le prénom et le nom (champs 1 et 2) du fichier « etudiant » puis on
# parcourt ces champs en utilisant les pipes avec la boucle « while ».

cut -f1,2 -d";" etudiant | while read ligne ; do


echo "$ligne;$i" # afficher prénom;nom;i où i est le numéro de la ligne courante.
let i=$i+1
done
Réponse 3 :
#!/bin/bash
let i=1 # on initialise les numéros des lignes du fichier « etudiant » à 1
# on extrait le prénom et le nom (champs 1 et 2) du fichier « etudiant » puis on
# les sauvegarde dans le fichier « res » ensuite on parcourt le fichier « res ».

cut -f1,2 -d";" etudiant > res


while read ligne ; do
echo "$ligne;$i" # afficher prénom;nom;i où i est le numéro de la ligne courante.
let i=$i+1
done < res

5. L’objectif dans cette question est de construire, à partir du fichier « etudiant » les noms des
logins (« logname ») des utilisateurs et les sauvegarder dans un nouveau fichier nommé
« login ». Chaque nom de login a la forme suivante : « première lettre du pré[Link] ».
Exemple : le nom de login de l’étudiant « mostafa;daoudi;smi » est « [Link] ».

Réponses 1: on parcourt le fichier sans utiliser la commande « read »

1ère Solution :
#!/bin/bash
# si le fichier « login » existe on le supprime
if test -e login ; then
rm login
fi
let i=1
let n=`wc -l < etudiant` # n désigne le nombre de lignes du fichier « etudiant »
cut -c1 < etudiant > tmp # on sauvegarde les premières lettres des prénoms dans le
fichier « tmp »
cut -f2 -d";" < etudiant > log # on sauvegarde les noms dans le fichier « log »
while test $i -le $n ; do
c=`tail -n +$i < tmp | head -n 1` # on sauvegarde la première lettre de la ligne courante
# (ligne i) dans la variable c
lg=`tail -n +$i < log | head -n 1` # on sauvegarde le de la ligne courante (ligne i) dans la
# variable g
echo "$c.$lg" >> login # on forme le logname: [Link]
let i=$i+1
done

2ème Solution:
#!/bin/bash
# si le fichier « login » existe on le supprime
if test -e login ; then
rm login
fi
let i=1
let n=`wc -l < etudiant` # n désigne le nombre de lignes du fichier « etudiant »
cut -c1 < etudiant > tmp # on sauvegarde les premières lettres des prénoms dans le
# fichier « tmp »
cut -f2 -d";" < etudiant > log # on sauvegarde les noms dans le fichier « log »
past tmp log -d”.” > login

3ème Solution :
#!/bin/bash
if test -e compte ; then
rm login
fi
let n=`wc –l etudiant`
let i=1
while test $i –le $n ; do
# on récupère la première lettre du prénom de la ligne courante.
c=`tail -n +$i < etudiant | head -n 1 | cut -c1`
# on récupère le nom (le deuxième champs) de la ligne courante.
lg=`tail -n +$i < etudiant | head -n 1 | cut -f2 -d";"`
# on forme la ligne i du fichier « login ».
echo "$c.$lg" >> login
let i=$i+1 # on incrémente le numéro de la ligne
done

Réponse 2: on parcourt le fichier avec la commande « read »


#!/bin/bash
if test -e login ; then
rm login
fi
while read ligne ; do
c=`echo $ligne | cut -c1`
lg=`echo $ligne | cut -f2 -d";"`
echo "$c.$lg" >> login
done < fiche

Réponse 3: en utilisant la commande « past »


#!/bin/bash

cut -c1 etudiant > rep1


cut -f2 -d";" etudiant > rep2
past rep1 rep2 -d"." > login
rm rep1 rep2

Vous aimerez peut-être aussi