langevin@u1-111-17 : 12/06/17 " m m m m mm mmm m m mmm mm#mm mmmm m mm mmm # # #" # # #m# #" # # #" "# #" " #" "# # # # # # m#m #"""" # # # # # # "mm"# # # mm#mm m" "m "#mm" "mm ##m#" # "#m#" # " # ""# ""# mmmm mmm # mm mmm # # #" "# # " #" # #" # # # # # """m # # #"""" # # "#m"# # "mmm" # # "#mm" "mm "mm m # "" --- travail personnel: requis utilisation du compte: libre commandes réseaux: interdites permission HOMEDIR : drwx------ Repondre aux questions directement dans l'enonce en utilisant des lignes de moins de 72 caracteres. Pour les sources, utiliser les noms de fichiers precises dans l'enonce. Les sources ne doivent pas contenir de commentaires, ni de codes inutiles. Tous les programmes, fichiers etc... devront etre places dans le repertoire d'examen : /home/perso/langevin/exam-tp-I54-2017-langevin Vous validerez votre travail par la commande : /home/partage/pl/validexam -m I54 --- ====================================================================== 1. Divers ====================================================================== [a] Lister les pages du manuel dont le nom est : locale. /home/partage/pl/I54$ man -f locale locale (7) - description of multilanguage support locale (1) - get locale-specific information locale (5) - describes a locale definition file [b] Comment definir une variable NB exportee initialisee a 31415? export NB=31415; ( echo $NB ) 31415 [c] Lister tous les executables dont le nom est compose de deux lettres minuscule dans l'arborescence /usr /home/partage/pl/I54$ find /usr -type f -executable -name '[a-z][a-z]' 2>/dev/null /usr/bin/id /usr/bin/pr /usr/bin/gs /usr/bin/m4 /usr/bin/mf /usr/bin/wc /usr/bin/nl /usr/bin/tr [d] Lister 5 commandes vues en cours dont Paul Rubin est un co-auteur /home/partage/pl/I54$ yes 'q' | man -Pcat -K Rubin | grep -E -A1 '^NAME' | head -15 NAME wc - print newline, word, and byte counts for each file -- NAME factor - factor numbers -- NAME tail - output the last part of files -- NAME rm - remove files or directories -- NAME touch - change file timestamps -- [e] Quel est le plus gros fichier de l'arborescence /etc /home/partage/pl/I54$ find /etc -printf "%s %f\n" 2>/dev/null | sort -rg | head -3 716092 zh-tw.ctb 670091 usr.bin.evince 400497 zh-tw-ucb.ctb [f] Quel fichier de l'arborescence /etc possede le plus de lignes ? /home/partage/pl/I54$ find /etc -type f -exec wc -l {} \; 2>/dev/null | sort -rg | head -3 29336 /etc/brltty/Contraction/zh-tw.ctb 14343 /etc/brltty/Contraction/zh-tw-ucb.ctb 11605 /etc/brltty/Contraction/ko.ctb [g] Ecrire un programme en langage C qui affiche au format hexadécimal la liste des entiers passes sur la ligne de commande. $$ cat x.c; gcc -Wall x.c ; ./a.out {0..16} #include #include int main( int x , char** p) { while ( *++p ) printf(" %x", atoi(*p) ) ; return 0; } 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 [h] Quel est la valeur du i-noeud du fichier /etc/passwd $$ stat --format="%i" /etc/passwd 140205 $$ ls -i /etc/passwd 140205 /etc/passwd ====================================================================== 2. Filtre ====================================================================== [a] Extraire toutes les dates de foramt JJ/MM/AAAA du fichier bidon.txt grep -E '([0-9]{2}/){2}[0-9]{4}' bidon.txt [b] Lister les noms des des fichiers de l'arborescence /etc contenant le mot foobar sans denir compte de la casse. $$ grep -ir -l foobar /etc 2>/dev/null /etc/hosts.allow /etc/init.d/skeleton [c] Lister les shabangs des scripts executables du repertoire /usr/bin en precisant le nombre d'occurences. $$ find /bin -type f -executable -exec grep -m1 '#!/' {} \; | sort | uniq -c 22 #!/bin/sh [d] Lister les processus appartenant a root au format CMD PID PPID. $$ ps -uroot -ocmd,pid,ppid [e] Lister les processus dont le PID est < inferieur au double du PPID. $$ ps -e -opid,ppid,cmd | awk '{ if ($1<2*$2) print $1,$2,$3 }' [f] Comment mettre en majuscule les mots de trois lettres du fichier bidule.txt $$ echo 'aa abc aa abcd aaa' | sed -r 's/ [a-z]{3} /\U&/g' bidule.txt [g] Quels sont les executables de l'arboresence /usr dont le nom termine par bug. $$ find /usr -type f -executable -name '*bug' 2>/dev/null /usr/bin/perlbug /usr/bin/bashbug /usr/lib/debug/.build-id/27/f189ef8db8c3734c6a678e6ef3cb0b206d58b2.debug /usr/lib/x86_64-linux-gnu/libgnome-desktop-3-12/gnome-rr-debug /usr/local/apache-maven-3.5.0/bin/mvnDebug [h] Extraire le plus petit nombre entier du fichier bidon.txt $$ grep -Eo '[0-9]+' bidon.txt | sort -g | head -1 ====================================================================== 3. configuration hote ====================================================================== [a] Quelle est l'adresse materielle de l'infercace eth0 ? $$ ifconfig eth0 | grep -Eo 'HW.*' HWaddr bc:5f:f4:3d:8f:22 [b] Quelle est l'adresse ip de l'hote foo.bar.fr ? $$ host foo.bar.fr foo.bar.fr has address 149.202.133.35 [c] Quelle est la quantité de mémoire libre sur la partition /dev/sda1? $$ df /dev/sda1 Sys. de fichiers blocs de 1K Utilisé Disponible Uti% Monté sur /dev/sda1 57541628 22100732 32494900 41% / ->59% libre [d] Quelle est la passerelle reseau. $$ route -n Table de routage IP du noyau Destination Passerelle Genmask Indic Metric Ref Use Iface 0.0.0.0 10.9.184.1 0.0.0.0 UG 0 0 0 eth0 10.9.184.0 0.0.0.0 255.255.248.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 $$ host 10.9.184.1 Host 1.184.9.10.in-addr.arpa. not found: 3(NXDOMAIN) [e] Quelle est l'adresse IP du serveur de nom ? $$ for ip in $( sed -rn 's/nameserver(.*)/\1/p' /etc/resolv.conf ) do host $ip done 1.65.1.10.in-addr.arpa domain name pointer mail.univ-tln.fr. 5.185.9.10.in-addr.arpa domain name pointer sinfo5.univ-tln.fr. 67.65.1.10.in-addr.arpa domain name pointer bl-mail1.univ-tln.fr. [f] Combien de processeurs sur l'hote? $ lscpu | grep CPU CPU(s): 2 On-line CPU(s) list: 0,1 CPU max MHz: 3000,0000 CPU min MHz: 800,0000 NUMA node0 CPU(s): 0,1 -> deux [g] Quelle est la quantite de memoire vive sur l'hote ? $$ free -h total utilisé libre partagé tamp/cache disponible Mem: 3,9G 976M 1,1G 61M 1,8G 2,5G Partition d'échange: 1,9G 0B 1,9G -> 4G [h] Quel fichier de votre compte contient une cle publique RSA ? $$ ls ~/.ssh/*.pub /home/perso/langevin/.ssh/id_rsa.pub ====================================================================== 4. Environnement ====================================================================== [a] Quelle est la valeur du masque de creation de fichier ? $$ umask 0022 [b] Lister les variables d'environnement exportees dont l'identificateur commence par la lettre B. $$ echo ${!B*} BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_COMPLETION_COMPAT_DIR BASH_LINENO BASH_REMATCH BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION [c] Ecrire un programme en Langage C xyz.c qui affiche la valeur de 2*XYZ ou XYZ est une variable d'environnement contenant un entier. $$ man 3 getenv [d] Quelle est la taille par defaut des piles pour vos processus ? $ ulimit -s 8192 -> Kbytes [e] A quel moment a ete demarree la machine ? $$ last | grep -m1 reboot reboot system boot 4.4.0-101-generi Wed Dec 6 07:51 still running -> ce matin, 8:00 [f] Quels sont les utilisteurs qui ce sont connectes depuis ? -> langevin et $USER [g] Ouvrir un terminal. Quel est le pid de l'interprete associe. $$ ps PID TTY TIME CMD 4667 pts/2 00:00:01 bash 6616 pts/2 00:00:00 ps -> 4667 [h] Lister les processus ascendants de cet interprete. #!/bin/bash declare -i pid=$$ while [ $pid -gt 0 ] do ps --no-header -opid,cmd $pid ppid=$( ps --no-header -oppid $pid ) pid=$ppid done [ demo ] $$ ./parent.sh 7802 /bin/bash ./parent.sh 10058 bash 4029 /usr/lib/gnome-terminal/gnome-terminal-server 3340 /sbin/upstart --user 1673 lightdm --session-child 12 19 1572 /usr/sbin/lightdm 1 /sbin/init ====================================================================== 5. script ====================================================================== Consulter le manuel de la commande factor. [a] Quels sont les auteurs de cette commande ? $$ man factor | grep -A1 AUTHOR AUTHOR Written by Paul Rubin, Torbjorn Granlund, and Niels Moller. [b] Quelles fonctions de la glibc dont le nom commence par geto est utilisee par la commande factor ? $$ ltrace -cf factor 123 |& grep geto 3.55 0.000110 110 1 getopt_long -> getopt_long : utisee une fois [c] Comment tester la primalite de 2^NB-1 sachant que NB est une variable de l'environnement contenant un entier. $$ NB=17 ; bc <<< "2^$NB -1" | factor 131071: 131071 -> 2^17-1 est premier. [d] Ecrire un script prime.sh base sur factor qui prend un entier n en argument sur la ligne de commande puis affiche tous les nombres premiers de dans l'intervalle 1..n . #!/bin/bash max=$1 for(( n=1; n < max; n++ )) do x=$( factor $n ) y=${x#*: } if [ $n == "$y" ] then echo -n \ $n fi done [ demo ] ./prime.sh 100 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 --- langevin@u1-111-17