Partie 1 Connaissances générales sur Unix et Linux ( sur 4 points) 1.1) En quelle année est apparu le 1er Unix ? En 1969 (laboratoires AT & T) [0,5 pt] 1.2) Qu'est ce qu'Unix ? Source Wikipédia : ( http://fr.wikipedia.org/wiki/Unix ) UNIX™ est le nom d'un système d'exploitation multitâche et multiutilisateur créé en 1969, à usage principalement professionnel, conceptuellement ouvert et fondé sur une approche par laquelle il offre de nombreux petits outils chacun dotés d'une mission spécifique. I En réalité, il s'agit plutôt d'un système d'exploitation qui n'existe pas en réalité: on est plus où moins conforme à une version d'Unix [0,5pt] 1.3) Que signifie conformité POSIX ( donner une exemple ) 0,5 Source : Wikipédia ( http://fr.wikipedia.org/wiki/POSIX ) POSIX est le nom d'une famille de standards définie depuis 1988 par l'IEEE et formellement désignée IEEE 1003. Ces standards ont émergé d'un projet de standardisation des APIs des logiciels destinés à fonctionner sur des variantes du système d'exploitation UNIX. Le terme POSIX a été suggéré par Richard Stallman en réponse à la demande de l'IEEE d'un nom facilement mémorisable. C'est un acronyme de Portable Operating System Interface, dont le X exprime l'héritage UNIX de l'API. [0,5pt] 1.4) Sous quelle licence est écrit le noyau Linux ? La Licence GPL ( GNU Public License ) [0,5pt] 1.5) Citer plusieurs distributions Linux par exemple: Debian, Mandriva Linux, Gentoo, Novell Suse, Ubuntu [0,5pt] 1.6) Qu'est ce qui les différencie ? Plein de choses: le système de paquetage des archives ( .deb, .rpm ..etc), les outils d'administration, de configuration, de mise à jour ... etc [0,5pt] 1.7) Que désigne /dev/hda2 Un périphérique de type bloc, ici une partition de disque dur IDE [0,5pt] 1.8) Quel est l'id de root ? L'utilisateur qui a tous les droits sous Linux s'appelle root. Il a l'id 0 Partie 2 [0,5pt] Environnement utilisateur et shell Bash ( sur 8 points) 2.1) Rappeler la syntaxe générale d'une commande sous Linux, en précisant chaque partie nom de la commande [options] [arguments] , qui signifie respectivement quoi, comment, à quoi on applique la commande. [0,5pt] 2.2) Que peut-on trouver dans les répertoires suivants ? /var Les rapports ( logs ) de tout ce qui se passe d'important concernant le système [0,25pt] /dev La liste des fichiers spéciaux de type périphériques (bloc, caractères, ..etc) [0,25pt] 2.3) Quel est le rôle de '' -- '' dans la commande : egrep -Hr -2 -- -jSRC Freenode-#ooo_macport L'option courte d'une commande est donnée par un tiret ( signe - ) . Pour indiquer que la liste des options est terminée, on convient de passer l'option – Ainsi, tout ce qui suit et commence par un tiret n'est pas pris comme une option. CE qui permet de passer en argument le motif -jSRC... etc Il est important de remarquer que sans le passage explicite de cette fin de liste d'options, la commande aurait retourné une erreur, du style jSRC : unknown option ou quelque chose dans le genre. [1pt] 2.4) Quelle est la différence entre un terminal et une console ? Dans une console, il n'y a pas de frames, et seules les applications non graphiques peuvent être utilisées. Pour une application graphique, il faut un serveur graphique (capable de dessiner des fenêtres/frames) [0,25pt] 2.5) Comment bascule-t-on, en salle de TP (avec les machines disponibles) de l'interface graphique à la console numéro 2? Avec la commande CTRL+ALT+FN2 (FN désigne la touche "Fonction 2" [0,25pt] 2.6) Que fait la commande suivante : alias ls="ls -la" Cette commande remplace la commande ls (suivie de l'appui sur la touche « entrée ») par la commande ls -la dans le shell courant [0,5pt] 2.7) Comment faire pour toujours avoir cette commande disponible, sans avoir à la taper dans chaque console/terminal ouvert ? On peut par exemple la placer dans le fichier ~/.bash_profile , sinon dans /etc/profile (pour tous les utilsateurs) [0,25pt] 2.8) Comment supprime-t-on un alias sans fermer le terminal ? En utilisant la commande (built-in) unalias 2.9) Qu'est-ce qu'une commande built-in ? C'est une commande « embarquée » (incluse) dans le shell bash [0,25pt] [0,25pt] 2.10) Comment trouver de l'aide pour une commande built-in ? Les commandes built-in étant incluses dans le binaire exécutable bash, la page de man de bash nous dira tout sur elles ! [0,25] 2.11) Que fait la boucle suivante : for ((i=10 ; i>0 ; i--)) ; do echo "il reste $i seconde(s) ... " ; sleep 1 ; clear ; done Cette boucle effectue un compte à rebours par pas de -1, et affiche le nombre de secondes restantes. [0,5pt] 2.12) Remplacer la boucle ci-dessous par une boucle portable (qui fonctionne partout). for i in $(seq 1 2 19) ; do echo $i done for ((i=1 ; i <21; i+=2 )) ; do echo $i ; done [0,5pt] 2.13) Dans un répertoire, on trouve les fichiers suivants : MACOSXGCCUBinc.tar.gz MACOSXGCCUBlib.tar.gz MACOSXGCCUBruntime.tar.gz Que fait la commande : for i in MACOSXGCCUB* ; do mv $i ${i/GCCUB/GCCI} ; done Cette commande remplace la chaine GCCUB par GCCI dans las noms des fichiers. Ainsi, après l'exécution de la commande, le répertoire courant contiendra les fichiers : MACOSXGCCIinc.tar.gz MACOSXGCCIlib.tar.gz MACOSXGCCIruntime.tar.gz [0,5pt] 2.14) En fait, l'opérateur s'est trompé. Donner la commande qui permet de renommer les fichier comme précédemment (avec leur nom initial) for i in MACOSXGCCI* ; do mv $i ${i/GCCI/GCCUB} ; done [0,5pt] 2.15) Qu'est ce que le PATH ? La liste des répertoires dans lesquels le shell trouve des binaires exécutables. C'est une variable d'environnement. Si celle-ci est vide, les seules commandes accessibles sont les commandes builtin du shell [0,5pt] 2.16) Que contient $HOME ? $HOME est une variable d'environnement qui contient la réportoire personnel de l'utilisateur courant [0,5pt] 2.17) Que font les commandes suivantes: a) cd && cat n fichier.txt Sous Linux, cd positionne par défaut dans le répertoire $HOME de l'utilisateur Si cette étape est réussie, la seconde est exécutée, et le contenu du fichier fichier.txt est affiché sur la sortie standard. [0,25 pt] b) cat /etc/passwd | tr -s ":" " " | grep `whoami` Dans l'ordre : – – – le contenu du fichier /etc/passwd est bufferisé la commande tr remplace ( s pour substitute ) tous les caractères : ( qui est un séparateur dans /etc/passwd ) par un espace la ou les lignes qui contiennent le résultat de la commande `whoami` sont affichées. Exemple : eric@beone:~$ cat /etc/passwd | tr -s ":" " " | grep `whoami` eric x 1000 1000 eric,,, /home/eric /bin/bash [0,25 pt] c) cat << EOF >> fichier.txt cat est une commande qui attend par défaut sur l'entrée standard (le clavier) . Le terminal étant en mode standard, tout ce qui est tapé par l'utilisateur s'affiche en echo à l'écran (permet de contrôler le contenu). Le << signifie que cat attend la chaine EOF pour que la commande se termine. La commande étant terminée, cat affiche redirige tout ce qui a été entré dans le fichier fichier.txt Tout ce qui a été entré par l'utilisateur est normalement écrit dans le fichier texte. En résumé, cette commande se comporte comme un éditeur de texte [0,25 pt] Partie 3 Analyse de shells scripts ( sur 9 points) Soit le shell script suivant, appelé test_function.sh : 1 #!/bin/bash 2 function calcule() 5 { 6 echo "resultat du calcul $(( $1 + $2 ))" 8 } 9 val1=$1 11 val2=$2 13 if ! test -z $1 && ! test -z $2 15 then 16 calcule ${val1} ${val2} 17 else 18 echo -e "pas de calcul possible\n" 19 fi 3.1) Expliquer le test de la ligne 13 Le test de la ligne 13 vérifie que l'argument 1 et l'argument 2 sont non nuls. Seul cas pour lequel le calcul de la somme des termes passés en arguments de la ligne de commande n'a pas de sens. [0,5pt] 3.2) Écrire l'algorithme correspondant au fonctionnement du programme /* Sous programme calcule */ Écrire : ( resultat du calcul = somme du paramètre positionel 1 et du paramètre positionnel 2 ) Fin fonction calcule /* Programme principal */ /* Initialisation */ val1 <- valeur paramètre positionnel 1 val2 <- valeur paramètre positionnel 2 SI (valeur paramètre positionnel 1 non nulle ) et (valeur paramètre positionnel 2 non nulle ) Faire : calcule somme val1 + val2 Sinon faire Écrire : ( pas de calcul possible ) Fin Programme Principal [2pts] 3.3) Que se passe-t-il si l'utilisateur tape : a) ./test_function.sh eric@beone:~$ ./test_function.sh pas de calcul possible [0,5pt] b) ./test_function.sh 19 1 eric@beone:~$ ./test_function.sh 19 1 resultat du calcul 20 [0,5pt] c) ./test_function.sh 19 mot eric@beone:~$ ./test_function.sh 19 mot resultat du calcul 19 Pourquoi ? La taille de l'argument $2 n'est pas nulle, et la valeur entière associée à une chaine de caractères est 0, donc la somme calculée est 19 + 0, ce qui est surpenant, mais correct; [0,5pt] Soit le shell script suivant appelé indirection : 1 #!/bin/bash 2 i=0 4 while (( $i < $(($# +1)) )) 5 do 7 echo "contenu du parametre positionnel $i : ${!i}" 8 i=$(( $i + 1)) 11 done 3.4) Que fait ce shell script ? (on demande des explications claires) Ce script affiche , en partant de la valeur 0, le numéro du paramètre positionnel, ainsi que sa valeur (ce qu'il contient) La structure de contrôle est de type while do done La contition testée est : tant que la valeur de i est inférieure au nombre de paramètres positionnels + 1, la condition est fausse, et on réitère le calcul. Dans cette boucle, on affiche "contenu du parametre positionnel " suivi du numéro du paramètre positionnel, et de sa valeur. Ensuite, on incrémente i, qui est comparé au nombre de paramètres positionnels + 1 [3pts] 3.5) Que donne le résultat de la commande : ./indirection a b c eric@beone:~$ ./indirection a b c contenu du parametre positionnel 0 : ./indirection contenu du parametre positionnel 1 : a contenu du parametre positionnel 2 : b ? contenu du parametre positionnel 3 : c [2pts]