langevin@licinfo16 : 12/17/15 _ _ _ _ _ _ _ _ __ (_)_ __ ___| |_ _ __ _ __ ___ __ _ ___| |__ ___| | | | | | | '_ \| \ \/ / / _ \ __| | '_ \| '__/ _ \ / _` | / __| '_ \ / _ \ | | | |_| | | | | |> < | __/ |_ | |_) | | | (_) | (_| |_ \__ \ | | | __/ | | \__,_|_| |_|_/_/\_\ \___|\__| | .__/|_| \___/ \__, (_) |___/_| |_|\___|_|_| |_| |___/ --- travail personnel : requis utilisation du compte : libre commandes réseaux : interdites permission HOMEDIR : drwx------ Ne pas changer les noms de fichiers Utiliser des lignes de moins de 72 caracteres. Tous les programmes, fichiers etc... devront etre places dans le repertoire d'examen : /home/perso/langevin/exam-tp-I54-2015-langevin Vous validerez votre travail par la commande : /home/partage/pl/validexam -m I54 --- --- Repondez aux questions dans ce fichier en précisant les commandes utilisées pour obtenir la réponse. Par exemple, a la question : [a] Lister les répertoires de recherche décrits par PATH. On peut répondre : :: echo $PATH /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin: /bin:/usr/local/sbin:/usr/sbin:/sbin:/home/pl/bin:/home/pl/script ou le caractère ':' est un séparateur de champs. ----------------------------------------------------------- 1) UNIX ----------------------------------------------------------- Répondre avec la(les) commande(s) appropriée(s). [a] Quelle est la nature de which ? pl> type which which est /usr/bin/which Il s'agit donc d'une commande externe. [b] Quelle est le nombre de processeurs de l'hôte ? pl> lscpu Architecture: x86_64 Mode(s) opératoire(s) des processeurs :32-bit, 64-bit Byte Order: Little Endian CPU(s): 2 On-line CPU(s) list: 0,1 Thread(s) par cœur : 1 Deux processeurs. [c] Quelle est la taille en Mo de la mémoire vive ? pl> free -m total used free shared buffers cached Mem: 3952 1501 2450 0 224 589 -/+ buffers/cache: 687 3264 Swap: 1999 0 1999 Soit 3952 Mo [d] Lister les noms de 3 filtres unix popuplaires. pl> man -k filter On y retrouve les : col, dot, sed souvent utilisés dans les TPs. [e] Calculer 1*2*3*4*5*6*7*8*9 pl> echo $(( 1*2*3*4*5*6*7*8*9 )) 362880 [f] Lister les identificateurs de variables commencant par H pl> echo ${!H*} HISTCMD HISTFILE HISTFILESIZE HISTSIZE HOME HOSTNAME HOSTTYPE [g] Afficher le contenu de /tmp/foo/bar pl> cat /tmp/foo/bar cat: /tmp/foo/bar: Permission non accordée pl> ls -l /tmp/foo/bar --w-r--r-- 1 langevin STAFF 17 déc. 17 10:48 /tmp/foo/bar pl> chmod u+r /tmp/foo/bar pl> cat /tmp/foo/bar hello langevin ! [h] Supprimer le fichier /tmp/foo/bar pl> rm /tmp/foo/bar rm: impossible de supprimer «/tmp/foo/bar»: Permission non accordée pl> ls -l /tmp/foo total 4 -rw-r--r-- 1 langevin STAFF 17 déc. 17 10:48 bar pl> ls -ld /tmp/foo dr-xr-xr-x 2 langevin STAFF 4096 déc. 17 10:48 /tmp/foo pl> chmod u+w /tmp/foo pl> rm /tmp/foo/bar ----------------------------------------------------------- 2) FILTRE ----------------------------------------------------------- Dans cet exercice, un nombre est mot compose de chiffres. Préciser les commandes à appliquer à une source texte src.txt pour réaliser les actions : [a] afficher tous les nombres contenus dans src.txt. pl> grep -Eo '[0-9]+' src.txt [b] remplacer tous les nombres de src.txt par le mot NOMBRE. pl> sed -r 's/[0-9]+/NOMBRE/g' src.txt [c] afficher src.txt en numérotant les lignes pl> nl src.txt [d] afficher les lignes de numero pair contenant un nombre. pl> nl src.txt | sed -rn 's/.*[02468][[:space:]]//p' | grep '[0-9]' ----------------------------------------------------------- 3) COMMANDE ----------------------------------------------------------- [a] Ecrire un script trichaine.sh base sur les commandes tr et sort qui trie les caractères qui composent les arguments de la ligne de commande. prompt> ./trichaine.sh HELLO WORLD DEHLLLOORW pl> cat trichaine.sh echo $* | grep -o . | sort | tr -d '[\n]' [b] Placer cette commande dans le répértoire /tmp/bin pl> mv ./trichaine.sh /tmp/bin/. [c] Que faut-il faire pour que cette commande deviennent un executable par defaut accessible de n'impote quel repertoire ? Il faut changer la variable PATH .bash_profile:export PATH=$PATH:~/bin:/tmp/bin [d] Expliquer le resultat de : prompt> bizarre BIZARRE $ bizarre BIZARRE ABEIRRZ pl> type bizarre bizarre est un alias vers « /tmp/bin/trichaine.sh » indication : tr, sort, sed, ... ----------------------------------------------------------- 4 MANUEL ----------------------------------------------------------- Un programmeur en langage C sous unix a oublie le prototype de la fonction de la glibc qui calcule et retourne la longeur d'une chaine. [ a ] Quelle section du manuel decrit les fonctions C ? La section 3. [ b ] Quelle option du manuel permet de trouver la fonction pl> man -k -s 3 length | grep string [ c ] Ecrire un programme sl.c qui calcule et retourne la longueur des arguements de la ligne de commande. #include #include int main ( int n, char * argv[] ){ int i; for( i=1; i gcc -Wall str.c pl> ./a.out gcc -Wall str.c gcc (3)-Wall (5)str.c (5) indication : chaine ( string ), longueur ( length ). ----------------------------------------------------------- 5 DIAGNOSTIC ----------------------------------------------------------- La commande ./boom.exe semble avoir du mal a a fonctionner. Utilisez les outils comme strace pour faire un diagnostic. strace ./boom.exe |& grep Perm open("/etc/shadow", O_RDONLY) = -1 EACCES (Permission denied) Le programme tente d'ouvrir /etc/shadow ! -----------------------------------------------------------