EXERCICE DE TRAVAUX PRATIQUES UNIX PROGRAMMATION SHELL ANNEE UNIVERSITAIRE 2012/13/14/15 Aprés avoir sauvegardé une copie de ce fichier, vous répondrez aux questions, directement dans le fichier afin de conserver une trace de votre travail. Par exemple, dans un terminal : mkdir -p $HOME/i54/tps/src cd $HOME/i54/tps wget -O $HOME/i54/tps/serie-2.txt langevin.univ-tln.fr/cours/UPS/tps/ups-tps-2.txt Vous répondrez aux questions, directement dans le fichier afin de conserver une trace de votre travail. Vous placerez vos sources dans le réperpoire src qui sera maintenu à jour par make et son makefile. Lancer l'edition a partir de la ligne de commande : {editeur} ups-tps-2.txt & ---------------------------------------------------------------- dernière modification : lun. sept. 22 17:09:34 CEST 2014 ---------------------------------------------------------------- 1) grep, find, xargs 2) env, getenv, main, $?, if then else. 3) gnu, lynx, wget, 4) debuguer, [ls]trace, ln 5) ascii, chmod, umask 6) Ecrire une page de manuel ================================================================ EXERCICE 1 ================================================================ objectif : grep, find, xargs durée : 30 minutes methodologie : La commande find [ 1 ] Touver tous les fichiers dont la taille est comprise entre 512 et 1024 octets dans l'arborescence /etc [ 2 ] Touver tous les fichiers de de l'arborescence /etc qui ont un nom commencant par la lettre "r" terminant et terminant par un "f" [ 3 ] Touver tous les fichiers de l'arborescence /etc qui contiennent le mot bash. [ 4 ] Touver tous les fichiers de de l'arborescence /etc qui contiennent bash ou csh [ 5 ] Afficher le nombre de lignes des fichiers de /etc qui contiennent le mot ftp et dont le nom contient la chaine "serv" commentaires: ---------------------------------------------------------------- exemples: ---------------------------------------------------------------- ================================================================ EXERCICE 2 ================================================================ objectif : env, getenv, main, $?, if then else. durée : 30 minutes methodologie : [ 1 ] Codez un programme en langage C qui retourne la valeur d'une variable d'environnement. [ 2 ] Codez un programme en langage C qui liste les arguments et l'environnement passé par le système. [ 3 ] Codez un programme en langage C qui lit un entier sur la ligne de commande et retourne cette valeur au système. [ 4 ] testez la commande avec variable speciale $? [ 5 ] testez la commande avec une instruction alternative passee sur la ligne de commande : if ./a.out 0 ; then echo vrai ; else echo false; fi commentaires: ---------------------------------------------------------------- exemples: ---------------------------------------------------------------- ================================================================ EXERCICE 3 ================================================================ objectif : gnu, lynx, wget, grep, sort, uniq. durée : 30 minutes methodologie : Allez sur le site du projet gnu, http://www.gnu.org/gnu/thegnuproject.en.html Utilisez entre autre wget ou lynx... télécharger cette page, puis déterminer les mots de plus de trois lettres les plus cités dans cette page. 157 software 118 pour 139 free 112 logiciel 134 that 104 libre 66 system 86 nous 62 http 80 http commentaires: ---------------------------------------------------------------- exemples: ---------------------------------------------------------------- ================================================================ EXERCICE 4 ================================================================ objectif : debuguer, [ls]trace, ln durée : 30 minutes methodologie : La source du programme bug.c a ete perdue. Par chance, un bug.s est encore disponible : http://langevin.univ-tln.fr/cours/UPS/tps/bug.s [ 1 ] gcc sait assembler du code : gcc -Wall bug.s -o bug.exe [ 2 ] Malheureusement, la compilation de bug.s donne un binaire bugue : ./bug.exe perdu! au lieu de bravo, gagne etc.. [ 3 ] strings bug.exe [ 4 ] Plusieurs remèdes possibles, à vous de jouer ! commentaires: ---------------------------------------------------------------- exemples: ---------------------------------------------------------------- ================================================================ EXERCICE 5 ================================================================ objectif : ascii, chmod, umask durée : 30 minutes methodologie : [ 0 ] Quels sont les droits de votre $HOME ? [ 1 ] Quelle est la nature de la commande umask ? [ 2 ] Utilisez gcc pour compiler un exécutable hello qui retourne 0. [ 3 ] Quels sont les droits du fichier ? [ 4 ] Expliquez ce qui suit : $ echo "int main(void){return 'd';}" > /tmp/x.c $ gcc -Wall /tmp/x.c $ ./a.out $ umask $? $ gcc -Wall /tmp/x.c $ ./a.out $ bash: ./a.out: Permission non accordée $ chmod u+x a.out $ ./a.out $ printf "%o %d %x" $? $? 100 64 40 $ printf "%o %d %x" $? $? 0 0 0 commentaires: ---------------------------------------------------------------- exemples: ---------------------------------------------------------------- ================================================================ EXERCICE 6 ================================================================ objectif : Ecrire une page de manuel durée : 30 minutes ______________ / cet exercice \ \ facultatif / -------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || methodologie : [ 0 ] Parcourir la page du manuel de man, repérerer les variables d'environnement pour la commande man, le format des fichiers, et les outils. [ 1 ] Télécharger $ wget http://langevin.univ-tln.fr/cours/UPS/tps/test.6 [ 2 ] Lancer et observer : $ man perso $ man perso.6 [ 3 ] Suivre les instructions $ man ./perso.6 [ 4 ] Verifier $ man perso commentaires: ---------------------------------------------------------------- exemples: ---------------------------------------------------------------- dm, pl, septembre 2014