Corrigé 2003 - Paul Perros

Transcription

Corrigé 2003 - Paul Perros
UTBM / LO22 Examen de janvier 2004 / ELEMENTS DE CORRECTION
/
Eric bachard
N.B. : Cahier de TP seul document autorisé
1) Culture générale Linux/Unix
1.1) Citer plusieurs systèmes d'exploitation (au moins 4 ) de type '' Unix ''
Réponse :
Linux
Solaris
HP-UX
OpenBSD
Mac OSX
[ 2 pts ]
1.2) Citer les 2 principales architectures matérielles en leur associant un ou plusieurs systèmes
d'exploitations utilisable(s) sur ces architectures.
Réponse :
x86 : windows NT, XP, linux, BeOS,FreeBSD, OpenBSD
powerpc : MacOS, Linux, FreeBSD
[ 1 pt ]
1.3) Préciser ce qu'est un logiciel libre et rappeler les 4 libertés associées à ce type de logiciel
Réponse :
libertés d'utilisation, de recopie, d'étude/amélioration des sources et de diffusion. [ 2 pts]
1.4) Présenter, à l'aide d'un dessin , les différentes couches d'interaction caractéristiques de
beaucoup de systèmes Unix, dont Linux.
Mots clés proposés : utilisateur, système de fenêtre Xwindow, interpréteur de commandes, applications,
commandes, noyau, matériel
Réponse :
[ 2 pts ]
Page 1/7
UTBM / LO22 Examen de janvier 2004 / ELEMENTS DE CORRECTION
/
Eric bachard
1.5) Quelle commande faut-il utiliser pour changer un mot de passe sous Linux (et sous Unix en
général)
Réponse :
La commande passwd
[ 0,5 pt ]
1.6)Donner les règles élémentaires de sécurité à respecter régissant le choix d'un mot de passe
Réponse :
Il n'existe pas de mot de passe sûr, mais les mots de passe prévisibles sont à proscrire. Pour
cela, ne pas utiliser de noms communs, ni nom de famille, ni prénom, ni date de naissance. Choisir un
mot de passe d'au moins 6 caractères, qui comporte des minuscules, des majuscules et des chiffres
mélangés. Il faut aussi éviter les caractères spéciaux qui risquent de ne pas être utilisables lors d'une
connexion à distance. Attention aussi aux problèmes de claviers azerty/qwerty
[ 1 pt ]
1.7) A quel mot clé, dans la question 1.4 , peut-on associer le shell Bash ?
Réponse :
Le shell Bash sous Linux joue le rôle de l'interpréteur de commandes du dessin de la question 1.4
[ 0,5 pt ]
1.8) Définir appel système
Réponse :
Les demandes de service faîtes au système d'exploitation sont faîtes à l'aide des appels systèmes
(“OS calls” ou “System calls”). Les services demandés peuvent :
– contrôler l'execution d'un processus
– faires des accès et de la gestion sur le système de fichiers
– faire et contrôler des accès réseau, créer et gérer de l'espace mémoire
– envoyer et recevoir des messages entre processus
– gérer ou s'informer sur l'état du système
– contrôler des permissions d'accès...
[ 1 pt ]
1.9) Quelle est la différence essentielle entre une commande shell “builtin” et une commmande
externe au shell ?
Réponse :
Si le shell est linké statiquement à la libc, il n'a besoin de rien d'autre pour fonctionner. Si le shell est
linké dynamiquement à la libc, il faut la libc pour fonctionner. Toute autre application externe au shell
demandera d'installer autre chose (paquet “package en anglais”) pour fonctionner, à commencer par le
paquet contenant cette application.
[ 1 pt ]
2) Environnement utilisateur sous Linux
2.1) En tant que simple utilisateur, nommé henri, vous souhaitez lancer la commande '' ifconfig -a '' .
Le binaire (exécutable) ifconfig se trouve dans le répertoire /sbin. On précise que /sbin n'est pas
Page 2/7
UTBM / LO22 Examen de janvier 2004 / ELEMENTS DE CORRECTION
/
Eric bachard
dans le PATH d'un utilisateur normal ( avec la distribution Debian, par exemple ). Le shell par
défaut est le bash. On rappelle que la commande export est la commande qui permet de modifier
les variables d'environnement du shell pour le shell bash.
2.1.1) Comment savoir si un simple utilisateur a le droit d'utiliser cette commande ?
Réponse :
Il faut
– que le répertoire /sbin soit exécutable par l'utilisateur, pour que celui-ci puisse le “traverser”
==> ls -l /sbin permet de vérifier ce premier point
–
il faut aussi que l'utilisateur henri ait un droit de lecture et d'exécution sur /sbin/ifconfig.
==> ls -l /sbin/ifconfig
donne la réponse.
[ 1 pt ]
2.1.2) Donner la commande permettant de savoir dans quel répertoire on se trouve.
Réponse :
C'est la commande pwd “print working directory” qui permet de savoir dans quel répertoire on se
trouve.
[ 0,5 pt ]
2.1.3) On suppose que vous êtes dans le répertoire /home/henri. Donner, en utilisant obligatoirement
un chemin relatif, la commande permettant de lancer ifconfig avec l'option -a
Réponse :
La commande cherchée est :
../../sbin/ifconfig -a
../../ permet de remonter 2 répertoires (/home/henri), et ensuite on “redescend” dans /sbin . [ 0,5 pt ]
2.1.4) Donner la commande permettant d'ajouter temporairement le répertoire /sbin dans le PATH de
l'utilisateur henri que vous êtes. Pourquoi cette commande n'agit-elle que temporairement ?
Réponse :
export PATH=''$PATH:/sbin''
N.B. : si une commande ifconfig est déjà dans le PATH, elle sera trouvée avant celle se trouvant dans
le répertoire /sbin/
Cette commande n'agit que temporairement, car au prochain login, le PATH sera à nouveau celui
déclaré dans les fichers de configuration.
[ 1 pt ]
2.1.5) Proposer une solution permettant d'ajouter définitivement ce répertoire dans le PATH de
l'utilisateur henri, quel que soit le shell utilisé.
Réponse :
Il faut que ce répertoire ne dépende pas du shell, on peut donc modifier le PATH lors du login. Le
fichier ~/.profile convient. On rajoutera donc la ligne : export PATH=''$PATH:/sbin'' dans ce fichier.
[ 1 pt ]
Page 3/7
UTBM / LO22 Examen de janvier 2004 / ELEMENTS DE CORRECTION
/
Eric bachard
2.1.6) Pourquoi la commande '' ln -s /sbin/ifconfig /usr/local/bin/ifconfig '', exécutée par l'utilisateur
henri échoue-t-elle, alors que /usr/local/bin est bien dans son PATH ?
Réponse : un utilisateur normal n'a pas le droit d'écrire dans le répertoire /sbin ni dans le répetoire /
usr/local/bin
[ 1 pt ]
2.1.7) Donner la commande permettant de changer :
-rw-r--r-- 1 henri henri
en :
-rw-rw-r-x 1 henri eric
1261 2003-11-10 21:22 wlan.sh
1261 2003-11-10 21:22 wlan.sh
N.B. : c'est toujours henri qui tape cette commande.
Réponse :
La commande cherchée est :
chown henri:eric wlan.sh && chmod g+w,o+x wlan.sh
Remarque : chown henri.eric est obsolète, et il faut bien entendu que le groupe eric existe.
[ 1 pt ]
2.1.8) On tape la commande suivante :
eric@alube:~$ ls -l /dev/null /dev/cdrom /dev/hdb /dev/usb/lp0 /tmp/.X11-unix/X0
Et la réponse est :
lrwxr-xr-x 1 root
brw-rw---- 1 root
-rw-rw-rw- 1 root
crw-rw---- 1 root
srwxrwxrwx 1 root
disk
disk
3,
root
lp
180,
root
3 2003-11-29 16:01 /dev/cdrom -> hdc
64 2002-03-14 10:10 /dev/hdb
0 2004-01-18 12:05 /dev/null
0 2002-03-14 10:11 /dev/usb/lp0
0 2004-01-18 11:43 /tmp/.X11-unix/X0
Remplir le tableau suivant (r,w ou x quand le droit existe, case vide sinon) :
Nom
Type
Propriétaire
Groupe
Autres
de fichier
/dev/cdrom
lien symbolique
r
w
x
/dev/hdb
bloc (avec buffer)
r
w
r
w
/dev/null
fichier ordinaire
r
w
r
w
/dev/usb/lp0
type caractère
r
w
r
w
/tmp/.X11-unix/X0
type socket
r
w
r
w
x
[ 3 pts ]
Page 4/7
r
x
x
r
x
r
w
r
w
x
UTBM / LO22 Examen de janvier 2004 / ELEMENTS DE CORRECTION
/
Eric bachard
3) Commandes Unix (sous bash)
3.1) Quels sont par défaut : l'entrée standard, la sortie standard, la sortie d'erreur standard sous Unix ?
Réponse :
Entrée standard par défaut : le clavier ; sortie standard par défaut : l'écran ; sortie d'erreur standard par
défaut : l'écran aussi
[ 1 pt ]
3.2) Si on tape la commande suivante dans un shell :
cat << EOF > fichier.txt
Que se passe-t-il ? Comment vérifier que cela a fonctionné ?
N.B. : il faut décrire toute la séquence...
Réponse :
cat attend par défaut quelque chose sur l'entrée standard (le clavier) ; l'utilisateur donc donc taper un
texte. Quand le texte est complètement saisi, il faut faire CTRL-D pour terminer la commande cat.
EOF est ensuite ajouté en fin de fichier, et le tout est redirigé dans le fichier fichier.txt
[ 2 pts ]
3.3) La variable aa vaut 13. Donner la commande shell permettant de calculer 18aa + 25 (aa multiplié
par 18 + 25
Réponse :
eric@alube:~$ aa=13
eric@alube:~$ echo $((( $aa * 18 ) + 25))
259
eric@alube:~$
Remarque : on aurait pu écrire echo $(( $aa * 18 + 25)) , car la multiplication est prioritaire devant
l'addition, mais c'est moins lisible.
[ 2 pts ]
3.4) Que fait la commande suivante :
find . type d -print
Réponse :
find trouve tous les sous-répertoires présents dans le répertoire courant, et les affiche.
[ 0,5 pt ]
3.5) Soit :
find . -type d -exec ls -ld {} \;
Préciser ce que fait cette commande et expliquer les rôles de {} et \; en fin de cette ligne
Réponse :
find trouve, dans le répetoire courant, tous les répertoire et les affiche en exécutant ls avec les options
-l : affiche le type du fichier, les permission, d'accès, le nombre de liens physiques, le nom du
propriétaire et du groupe, la taille en octets, et l'horodatage
-d : affiche les répertoires avec la même présentation que les fichiers, sans lister leur contenu.
Page 5/7
UTBM / LO22 Examen de janvier 2004 / ELEMENTS DE CORRECTION
/
Eric bachard
la sequence {} permet d'appliquer ls -ld à la sortie de find, c'est à dire le fichier en cours de
traitement, ce qui augmente les possibilités de la commande find. Pour finir, le caractère “ \ ”
sert à échapper le ; qui termine la commande ls -ld (et pas la commande find)
[ 2 pts ]
3.6) Décrire ce que fait : cat /etc/passwd | tee fichier.txt | wc -l
Réponse :
cat /etc/passwd affiche le contenu du fichier /etc/passwd. Comme il y a une redirection de la sortie
standard, le contenu normalement affiché va être envoyé à la fois dans le fichier /fichier.txt et dans la
commande wc -l qui va, quand à elle, afficher le nombre de lignes contenues dans le fichier /
etc/passwd. La commande “tee” sert à dériver un flux de données
[ 1 pt ]
3.7) Donner une ligne de commande complètement équivalente à la précédente.
Réponse :
cat /etc/passwd | wc -l ; cat /etc/passwd > fichier.txt
[ 1 pt ]
3.8) Donner la commande utilisant egrep, permettant de rechercher les fichiers d'en-tête contenant la
fonction pread et en affichant leurs noms dans le répertoire /usr/include
Réponse :
egrep -H pread /usr/include/*
[ 1 pt ]
4) Structures de contrôle
N.B. : dans tout ce qui suit, le shell utilisé est le shell bash
4.1)Ecrire un shell script qui permet à l'utilisateur d'entrer un entier i < 10, et d'afficher, à l'aide d'une
boucle une valeur allant de 1 à 2i à la valeur entrée, par pas de 2, en utilisant une structure de
contrôle for...do...done (on supposera que l'utilisateur respecte ce qui est demandé).
Réponse :
1 #! /bin/bash
2
3 clear
4 echo "Entrer un entier inférieur à 10 : "
5 j=0 ; i=0
6 read i
7 clear ; echo 1
8 for j in $(seq 1 $i) ; do
9
echo $(( 2 * j ));
10 done
[ 3 pts ]
Page 6/7
UTBM / LO22 Examen de janvier 2004 / ELEMENTS DE CORRECTION
/
Eric bachard
4.2) Même chose en utilisant cette fois la structure while..do...done
1 #! /bin/bash
2 clear
3 echo "Entrer un entier inférieur à 10 : "
4 read i ; echo 1
5 j=0 ; k=$(( 2 * $i ))
6 while ((j<k)) ; do
7
echo "valeur : $(( j + 2 ))" ;
8
j=$(( j + 2 ))
9 done
[ 3 pts ]
5) Expliquer le fonctionnement du shell-script suivant (nommé ''touches'') :
N.B. : par soucis de clarté, les lignes sont numérotées.
Réponse :
1 #! /bin/bash # shebang : l'interpréteur est le shell bash
2
3 sleep 1
# attente d'un délai unitaire
4 sauvegarde_stty=$(stty -g)
# on sauvegarde l'état du terminal avant de la modifier
5 stty -icanon time 1 min 0 -echo
# on modifie le terminal : plus besoin d'appuyer sur entrée
6
# pour saisir un caractère, et il n'y a plus d'echo lors de la
# saisie de celui-ci.
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
car=""
chaine=""
for i in $(seq 1 5) ; do
while [ -z $car ] ; do
read car
done
echo " appui sur : " $car
chaine="$chaine$car"
car=""
# la variable car est initialisée
# la variable chaine aussi
# on va saisir 5 caractères en tout
# tant qu'on n'a pas appuyé sur une touche
# le clavier est scruté (boucle infinie si on n'appuie pas)
# sortie de la boucle quand un appui est détecté
# On affiche le caractère entré
# concaténation du caractère entré avec le suivant
# on vide car (la boucle n'est pas terminée)
done
stty $sauvegarde_stty
echo "mot entré : $chaine"
# fin quand 5 caractères sont saisis
# on remet le terminal dans l'état initial
# on affiche la chaine des 5 caractères saisis
exit 0
# fin du programme
[ 6 pts ]
Page 7/7