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