TP3 Système







Exercice 1 : Installation de nouveaux paquets

Fedora utilise les fichiers dits « RPM » (RPM Package Manager) qui sont des archives contenant des programmes pré-compilés prêts à l'emploi. On les appelle couramment des paquets.

Pour gérer les paquets du système, Fedora utilise YUM, un outil permettant de gérer les installations, les désinstallations et les mises à jour de paquets au format RPM. Il gére les dépendances en téléchargeant ce qui est nécessaire. Il trouve les paquets sur différentes sources (sites internet) que l'on appelle des dépôts. YUM est fourni en standard dans toutes les versions de Fedora jusqu'à la version 22.

Voici les commandes permettant d'utiliser le gestionnaire yum :

Commande Description
yum update Mettre à jour le système
yum update yum Mettre à jour yum
yum update <nom du paquet> Mettre à jour le paquet paquet
yum list <nom du paquet> Chercher le paquet paquet dans la liste des paquets
yum search <mot-clé> Chercher les paquets dont le nom ou la description contient mot-clé
yum install <nom du paquet> Installer un paquet
yum remove <nom du paquet> Supprimer un paquet
  1. Cherchez dans la liste des paquets le paquet cowsay. Ce paquet est-il installé ?
  2. Si nécessaire, installez-le.
  3. La nouvelle commande cowsay est maintenant disponible sur votre système. Que fait cette commande ? Comment s'en sert-on ?
  4. Faîtes dire "bonjour" à une vache
  5. Minute culture générale : ces dessins réalisés uniquement à l'aide de lettres et caractères spéciaux sont appelés ASCII art. Allez donc voir dans Google Images quelques exemples.




									
										yum list cowsay 	[On cherche le paquet cowsay dans la liste des paquets]
										yum install cowsay 	[On installe le paquet cowsay]
										cowsay test 	[La commande affiche un vache avec une bulle contenant le texte en argument de la commande]
										cowsay bonjour
									
								


Exercice 2 : Les redirections, le retour

  1. Quel signe permet de rediriger le résultat d'une commande vers une autre ?
  2. Quel signe permet de rediriger l'entrée standard (pour utiliser le contenu d'un fichier par exemple) ?
  3. Quel signe permet de rediriger la sortie standard d'une commande vers un fichier ? Et lequel permet de faire la même chose sans écraser le fichier ?
  4. Faîtes un tableau de synthèse en deux colonnes avec dans la première colonne le signe de la redirection et dans la seconde sa description.
  5. Placez vous dans votre répertoire personnel.
  6. À l'aide des commandes ls et head, affichez seulement le premier fichier de votre répertoire personnel.
  7. Réutilisez cette commande mais maintenant, utilisez la commande cowsay pour afficher son résultat.
  8. Utilisez la commande cowsay pour afficher le contenu du fichier de votre choix.
  9. Enregistrez le résultat de la commande précédente dans le fichier vache.txt.
  10. Affichez le contenu de vache.txt.
  11. La commande date permet d'afficher la date et l'heure. Testez-la.
  12. Utilisez cowsay pour afficher la date et l'heure.
  13. Ajoutez une vache qui dit l'heure au fichier vache.txt
  14. Affichez le contenu de vache.txt.
  15. La commande cowsay ne fait pas que les vaches. L'option -f permet de choisir une autre image. Testez donc la commande cowsay -f tux "Hello world".
  16. Ajoutez un TuX qui dit l'heure au fichier vache.txt
  17. Affichez le contenu de vache.txt




Pour les 4 premières questions, revoir cette partie du cours.

									
cd ~ 	[On se place dans notre répertoire personnel]
ls | head -n 1 	[On affiche la première ligne du résultat de la commande ls]
(out)bidon2.txt
ls | head -n 1 | cowsay 	[Même chose, mais en plus on passe le résultat à la commande cowsay]
(out)____________ 
(out)< bidon2.txt >
(out) ------------ 
(out)        \   ^__^
(out)         \  (oo)\_______
(out)            (__)\       )\/\
(out)                ||----w |
(out)                ||     ||
(out)										
cowsay < bidon2.txt 	[On envoie le contenu de bidon2.txt à la commande cowsay avec une redirection]
(out) ____________________________ 
(out)< bonjour test bidon2 coucou >
(out) ---------------------------- 
(out)        \   ^__^
(out)         \  (oo)\_______
(out)            (__)\       )\/\
(out)                ||----w |
(out)                ||     ||
cowsay < bidon2.txt > vache.txt 	[On redirige le résultat de la commande précédente dans le fichier vache.txt]
cat vache.txt 	[On affiche le contenu de vache.txt, soit une vache qui donne le contenu de bidon2.txt]
(out) ____________________________ 
(out)< bonjour test bidon2 coucou >
(out) ---------------------------- 
(out)        \   ^__^
(out)         \  (oo)\_______
(out)            (__)\       )\/\
(out)                ||----w |
(out)                ||     ||
date 	[Affiche la date et l'heure]
(out)Mer 28 nov 2018 13:22:31 CET
date | cowsay
(out) ______________________________ 
(out)< Mer 28 nov 2018 13:29:02 CET >
(out) ------------------------------ 
(out)        \   ^__^
(out)         \  (oo)\_______
(out)            (__)\       )\/\
(out)                ||----w |
(out)                ||     ||
date | cowsay >> vache.txt
cat vache.txt 
(out) ____________________________ 
(out)< bonjour test bidon2 coucou >
(out) ---------------------------- 
(out)        \   ^__^
(out)         \  (oo)\_______
(out)            (__)\       )\/\
(out)                ||----w |
(out)                ||     ||
(out) ______________________________ 
(out)< Mer 28 nov 2018 13:30:04 CET >
(out) ------------------------------ 
(out)        \   ^__^
(out)         \  (oo)\_______
(out)            (__)\       )\/\
(out)                ||----w |
(out)                ||     ||
cowsay -f tux "Hello world"
(out) _____________ 
(out)< Hello world >
(out) ------------- 
(out)   \
(out)    \
(out)        .--.
(out)       |o_o |
(out)       |:_/ |
(out)      //   \ \
(out)     (|     | )
(out)    /'\_   _/`\
(out)    \___)=(___/
date | cowsay -f tux >> vache.txt
cat vache.txt
(out) ____________________________ 
(out)< bonjour test bidon2 coucou >
(out) ---------------------------- 
(out)        \   ^__^
(out)         \  (oo)\_______
(out)            (__)\       )\/\
(out)                ||----w |
(out)                ||     ||
(out) ______________________________ 
(out)< Mer 28 nov 2018 13:30:04 CET >
(out) ------------------------------ 
(out)        \   ^__^
(out)         \  (oo)\_______
(out)            (__)\       )\/\
(out)                ||----w |
(out)                ||     ||
(out) ______________________________ 
(out)< Mer 28 nov 2018 13:31:24 CET >
(out) ------------------------------ 
(out)   \
(out)    \
(out)        .--.
(out)       |o_o |
(out)       |:_/ |
(out)      //   \ \
(out)     (|     | )
(out)    /'\_   _/`\
(out)    \___)=(___/


									
								


Exercice 3 : Visualisation et gestion de processus

  1. Depuis l'interface graphique, lancez Firefox.
  2. À l'aide de la commande top, essayez de repérer le processus correspondant à Firefox et son nom. Vous pouvez quitter en appuyant sur "q".
  3. À l'aide des commandes ps et grep, affichez le processus correspondant à Firefox. Notez son PID.
  4. Pour retrouver un processus par son nom, quelle commande vous semble la plus pratique ?
  5. Interrompez Firefox depuis le terminal.
  6. À l'aide des commandes ps et grep, cherchez si un serveur web Apache est en cours de fonctionnement. Comment se nomme le processus correspondant ?




									
top
(out)Processes: 446 total, 2 running, 444 sleeping, 1884 threads                                                                           14:49:06
(out)Load Avg: 3.55, 2.32, 1.72  CPU usage: 5.50% user, 4.6% sys, 90.43% idle     SharedLibs: 199M resident, 54M data, 20M linkedit.
(out)MemRegions: 82778 total, 3281M resident, 108M private, 755M shared. PhysMem: 8113M used (3361M wired), 79M unused.
(out)VM: 3165G vsize, 1296M framework vsize, 1023269(0) swapins, 1116595(0) swapouts. Networks: packets: 25772381/12G in, 81305423/96G out.
(out)Disks: 4899369/125G read, 1053158/17G written.
(out)
(out)PID    COMMAND      %CPU TIME     #TH   #WQ  #PORT MEM    PURG   CMPRS  PGRP  PPID  STATE    BOOSTS           %CPU_ME %CPU_OTHRS UID  FAULTS
(out)35305  top          4.3  00:00.85 1/1   0    31    4168K  0B     0B     35305 27346 running  *0[1]            0.00000 0.00000    0    5911+
(out)35304  mdworker_sha 0.0  00:00.04 4     2    56    2960K  0B     0B     35304 1     sleeping *0[1]            0.00000 0.00000    501  3530
(out)35303  ManagedClien 0.0  00:00.10 2     1    43    2220K  0B     0B     35303 1     sleeping *0[1]            0.00000 0.00000    0    3894
(out)35302  plugin-conta 0.0  00:01.24 22    2    130   21M    0B     0B     35298 35298 sleeping *0[3]            0.00000 0.00000    501  15289
(out)35301  plugin-conta 1.4  00:01.30 26    1    144-  33M-   0B     0B     35298 35298 sleeping *0[3]            0.00000 0.00000    501  21944+
(out)35300  mdworker_sha 0.0  00:00.17 4     2    68    4112K  0B     0B     35300 1     sleeping *0[1]            0.00000 0.00000    501  5825
(out)35299  plugin-conta 0.0  00:03.05 31    1    177   129M   4336K  0B     35298 35298 sleeping *0[3]            0.00000 0.00000    501  68196
(out)35298  firefox      1.9  00:08.69 57    2    426   282M+  20M    0B     35298 1     sleeping *0[7]            0.00000 0.00000    501  11068
ps aux | grep firefox
(out)chloe            35298   0,0  2,5  6703428 211720   ??  S     2:48     0:09.84 /Applications/Firefox.app/Contents/MacOS/firefox -foreground
(out)chloe            35353   0,0  0,0  4286452    824 s000  S+    2:51     0:00.01 grep firefox
kill 35298
ps aux | grep apache
(out)chloe            35391   0,0  0,0  4277236    812 s000  S+    2:52     0:00.01 grep apache
(out)apache                77   0,0  0,0  4313876     84   ??  Ss   Dim06     0:03.25 /usr/sbin/httpd -D FOREGROUND	
									
								

Quand on connaît le nom du processus, il est plus pratique d'utiliser ps aux | grep XXX.



Exercice 4 : Analyser des fichiers


Partie A : Récupération des fichiers de logs

  1. Placez vous dans votre répertoire personnel.
  2. Créez un répertoire tp2_vos_initiales et placez vous à l'intérieur.
  3. Téléchargez les fichiers suivants avec la commande wget :
    • http://www.chloecabot.com/logs/browser_platform_combos.csv
    • http://www.chloecabot.com/logs/top_content.csv
    • http://www.chloecabot.com/logs/visits.csv
  4. À l'aide d'une seule commande, affichez le nombre de lignes de chaque fichier.
  5. Quelle commande vous paraît la plus adaptée pour afficher leur contenu ?
  6. Visualisez chacun des 3 fichiers. Que contiennent-ils ? Comment sont-ils formatés (construits) ?




									
cd ~ 	[On va dans notre répertoire personnel]
mkdir tp2_cc 	[On crée le répertoire tp2_cc]
cd tp2_cc 	[On va dans le répertoire tp2_cc]
wget http://www.chloecabot.com/logs/browser_platform_combos.csv
wget http://www.chloecabot.com/logs/top_content.csv
wget http://www.chloecabot.com/logs/visits.csv
wc -l *.csv 	[On compte les lignes avec wc en utilisant un joker]
(out)     286 Notes_DS_I2.csv
(out)     287 Notes_DS_I2_NOID.csv
(out)     210 browser_platform_combos.csv
(out)     129 top_content.csv
(out)      95 visits.csv
(out)    1007 total
more visits.csv 	[more plutôt que cat car les fichiers sont longs]
(out)
(out)#--------------------------------------------------------
(out)# Profile Name: chloecabot.com
(out)# Report Name: Visits & Pageview Tracking
(out)# Date Range: 09/01/2018 - 11/25/2018
(out)#--------------------------------------------------------
(out)
(out)#--------------------------------------------------------
(out)# Pageviews
(out)#--------------------------------------------------------
(out)Date Range,Pageviews
(out)Sat 9/1,26
(out)Sun 9/2,19
(out)Mon 9/3,27
(out)Tue 9/4,50
(out)Wed 9/5,42
(out)Thu 9/6,24
(out)Fri 9/7,21
(out)Sat 9/8,20
(out)Sun 9/9,8
more top_content.csv
(out)
(out)#--------------------------------------------------------
(out)# Profile Name: chloecabot.com
(out)# Date Range: 09/01/2018 - 11/25/2018
(out)#--------------------------------------------------------
(out)
(out)#--------------------------------------------------------
(out)# Top Content
(out)#--------------------------------------------------------
(out)Content,Visits,Pageviews,Avg Time,% Exit,$ Index
(out)/index.html,1487,1710,26.57,76.37,0.00
(out)/mmi/M3203/index.html,808,1683,61.82,28.40,0.00
(out)/robots.txt,445,480,69.26,71.67,0.00
(out)/mmi/M1203/synthese_reseaux.html,406,669,326.67,54.56,0.00
(out)/lpmn/git/index.html,269,386,183.88,62.44,0.00
(out)/mmi/M3203/TP1.html,200,417,74.33,8.15,0.00
(out)/mmi/M3203/Seance2/tama.html,189,431,70.44,6.50,0.00
(out)/mmi/M3203/Seance2/alertes.html,186,431,23.87,0.70,0.00
(out)/mmi/M3203/Seance2/progressbar.html,186,433,37.02,0.69,0.00
(out)/mmi/M3203/Seance2/diaporama.html,184,427,23.25,0.00,0.00
more browser_platform_combos.csv
(out)
(out)#--------------------------------------------------------
(out)# Profile Name: chloecabot.com
(out)# Date Range: 09/01/2018 - 11/25/2018
(out)#--------------------------------------------------------
(out)
(out)#--------------------------------------------------------
(out)# Browser & Platform Combos
(out)#--------------------------------------------------------
(out)Browsers - Platform,Visits
(out)Mozilla Compatible Agent 5.0 - (unknown) (unknown version),622
(out)Safari 604.1 - Macintosh PPC,576
(out)Mozilla Compatible Agent 5.0 - Macintosh Int,369
(out)Chrome 69.0.3497.100 - Windows NT,228
(out)Safari 605.1.15 - Macintosh Int,188
(out)Chrome 66.0.3359.181 - Windows NT,149
(out)Googlebot 2.1 - (unknown) (unknown version),146
(out)Chrome 61.0.3163.100 - Macintosh Int,126
(out)Chrome 41.0.2272.96 - Linux (unknown version),94
(out)Chrome 23.0.1271.64 - Linux (unknown version),82
									
								
  • browser_platform_combos contient les logs d'accès par combo système d'exploitation-navigateur.
  • top_content.csv contient les logs de visites, pageviews, temps passé, pour chaque page du domaine
  • visits.csv contient le nombre de visites par jour entre le 1er septembre 2018 et le 24 novembre 2018

Tous les fichiers sont des fichiers csv (Comma Separated Value), c'est-à-dire qu'ils sont en formatés en colonnes séparées par une virgule.

Les fichiers sont plutôt longs donc pour les afficher, il est plus pratique d'utiliser la commande more qui permet d'afficher le fichier au fur et à mesure. La commande cat affiche le fichier en entier, et on ne voit donc pas l'entête si on n'utilise pas l'ascenseur pour remonter.


Partie B : Analyse du fichier browser_platform_combos.csv

  1. Affichez les 20 premières lignes du fichier browser_platform_combos.csv. Qu'obtenez-vous ? Quel est le combo le plus populaire ?
  2. Affichez les lignes du fichier browser_platform_combos.csv qui contiennent "Mozilla".
  3. Reprenez votre commande et complétez là pour afficher le nombre de lignes contenant "Mozilla" dans le fichier browser_platform_combos.csv
  4. Affichez les lignes du fichier browser_platform_combos.csv qui contiennent "Windows". Combien de lignes obtient-on ?
  5. Parmi les lignes du fichier browser_platform_combos.csv qui contiennent "Windows", affichez seulement les lignes qui contiennent Chrome. Combien de versions différentes Windows/Chrome se sont connectées au site ? Quel est le combo le plus populaire ?
  6. Est ce que des versions obsolètes de navigateurs comme Firefox 3 ou Internet Explorer 6, 7, etc se sont connectées au site ?
  7. Est ce que des bots se sont connectés au site ? Si oui, lesquels ? À votre avis à quoi servent-ils ?




									
head -n 20 browser_platform_combos.csv 	[On affiche les 20 premières lignes du fichier]
(out)
(out)#--------------------------------------------------------
(out)# Profile Name: chloecabot.com
(out)# Date Range: 09/01/2018 - 11/25/2018
(out)#--------------------------------------------------------
(out)
(out)#--------------------------------------------------------
(out)# Browser & Platform Combos
(out)#--------------------------------------------------------
(out)Browsers - Platform,Visits
(out)Mozilla Compatible Agent 5.0 - (unknown) (unknown version),622
(out)Safari 604.1 - Macintosh PPC,576
(out)Mozilla Compatible Agent 5.0 - Macintosh Int,369
(out)Chrome 69.0.3497.100 - Windows NT,228
(out)Safari 605.1.15 - Macintosh Int,188
(out)Chrome 66.0.3359.181 - Windows NT,149
(out)Googlebot 2.1 - (unknown) (unknown version),146
(out)Chrome 61.0.3163.100 - Macintosh Int,126
(out)Chrome 41.0.2272.96 - Linux (unknown version),94
(out)Chrome 23.0.1271.64 - Linux (unknown version),82
grep "Mozilla" browser_platform_combos.csv [On cherche Mozilla dans le fichier]
(out)Mozilla Compatible Agent 5.0 - (unknown) (unknown version),622
(out)Mozilla Compatible Agent 5.0 - Macintosh Int,369
(out)Mozilla Compatible Agent 5.0 - Linux (unknown version),21
(out)Mozilla 11.0 - Windows NT,13
(out)Mozilla Compatible Agent 5.0 - Windows NT,6
(out)Mozilla 1.9.2.1 - Linux (unknown version),6
(out)Mozilla Compatible Agent 5.0 - Macintosh PPC,2
(out)Mozilla 1.9.0.1 - Windows XP,2
(out)Mozilla (unknown version) - (unknown) (unknown version),1
grep -c "Mozilla" browser_platform_combos.csv 	[L option c pour compter les lignes trouvées]
(out)9
grep "Windows" browser_platform_combos.csv [On cherche Windows dans le fichier]
(out)Chrome 69.0.3497.100 - Windows NT,228
(out)Chrome 66.0.3359.181 - Windows NT,149
(out)Firefox 62.0 - Windows NT,64
(out)Chrome 70.0.3538.102 - Windows NT,48
(out)Firefox 63.0 - Windows NT,47
(out)Firefox 6.0.2 - Windows XP,43
(out)Chrome 70.0.3538.77 - Windows NT,40
(out)Firefox 60.0 - Windows NT,26
(out)Chrome 68.0.3440.106 - Windows NT,25
(out)Firefox 57.0 - Windows NT,22
(out)Chrome 64.0.3282.140 - Windows NT,22
(out)...
grep -c "Windows" browser_platform_combos.csv [Le nombre de lignes contenant Windows]
(out)82
grep "Windows" browser_platform_combos.csv | grep Chrome [On affiche les lignes Windows, puis celles qui contiennent Chrome]
(out)Chrome 69.0.3497.100 - Windows NT,228 [Combo le plus populaire]
(out)Chrome 66.0.3359.181 - Windows NT,149
(out)Chrome 70.0.3538.102 - Windows NT,48
(out)Chrome 70.0.3538.77 - Windows NT,40
(out)Chrome 68.0.3440.106 - Windows NT,25
(out)Chrome 64.0.3282.140 - Windows NT,22
(out)...
grep "Windows" browser_platform_combos.csv | grep -c Chrome [Le nombre de lignes contenant Chrome parmi celles qui contiennent Windows]
(out)39
grep "Internet Explorer" browser_platform_combos.csv 	[Les versions d'IE, toutes obsolètes]
(out)Internet Explorer 6.0 - Windows XP,6
(out)Internet Explorer 7.0 - Windows NT,6
(out)Internet Explorer 7.0 - Windows Server 2003,3
(out)Internet Explorer 5.0 - Windows NT,2
(out)Internet Explorer 6.0 - Windows Server 2003,1
(out)Internet Explorer 8.0 - Windows XP,1
(out)Internet Explorer 9.0 - Windows NT,1
grep "Firefox 3" browser_platform_combos.csv 	[Des versions 3 de Firefox ?]
Firefox 32.0 - Windows XP,3
(out)Firefox 3.0.1 - Windows XP,2 	[Obsolète !]
(out)Firefox 34.0 - Windows Vista,1
(out)Firefox 32.0 - Macintosh Int,1
(out)Firefox 37.1 - Windows NT,1
(out)Firefox 31.0 - Linux (unknown version),1
(out)Firefox 33.0 - Macintosh Int,1
(out)Firefox 3.0 - Windows XP,1 	[Obsolète !]
(out)Firefox 3.5.6 - Windows XP,1 	[Obsolète !]
(out)Firefox 3.5.9 - Linux (unknown version),1 	[Obsolète !]
(out)Firefox 36.0 - Linux (unknown version),1
grep "bot" browser_platform_combos.csv 
(out)Googlebot 2.1 - (unknown) (unknown version),146 	[Robot de Google indexant les pages web]
(out)Twitterbot 1.0 - (unknown) (unknown version),1
									
								

Partie C : Analyse du fichier visits.csv

  1. Affichez les 20 premières lignes du fichier visits.csv. Qu'obtenez-vous ? Comment sont triées les lignes ?
  2. Triez le fichier avec la commande sort. Qu'obtenez-vous ?
  3. On va plutôt trier le fichier en fonction du nombre de visites, qui est la deuxième colonne du fichier. Pour ça, on va utiliser la commande sort et plusieurs options :
    • -t permet d'indiquer quel est le séparateur utilisé entre chaque colonne
    • -k permet d'indiquer quelle colonne utiliser pour trier le fichier
    • -n permet d'indiquer d'utiliser un tri numérique
    En utilisant ces options, triez le fichier en fonction du nombre de visites.
  4. Lisez les résultats triés et dites :
    1. Quel jour les étudiants ont le plus consulté le site ?
    2. Quel jour les étudiants n'ont pas travaillé du tout ?
    3. Sans calculer exactement, à priori, quel mois les étudiants ont le moins consulté le site ? le plus consulté le site ?
  5. Réutilisez la commande précédente et complétez-la pour n'afficher que les lignes qui contiennent "Sat" (les visites du samedi). Faîtes de même pour afficher seulement les lundis. Que constatez-vous ?




									
head -n 20 visits.csv 	[On affiche les 20 premieres lignes du fichier]
(out)
(out)#--------------------------------------------------------
(out)# Profile Name: chloecabot.com
(out)# Report Name: Visits & Pageview Tracking
(out)# Date Range: 09/01/2018 - 11/25/2018
(out)#--------------------------------------------------------
(out)
(out)#--------------------------------------------------------
(out)# Pageviews
(out)#--------------------------------------------------------
(out)Date Range,Pageviews
(out)Sat 9/1,26
(out)Sun 9/2,19
(out)Mon 9/3,27
(out)Tue 9/4,50
(out)Wed 9/5,42
(out)Thu 9/6,24
(out)Fri 9/7,21
(out)Sat 9/8,20
(out)Sun 9/9,8
sort visits.csv 	[On trie le fichier : il est trié selon le jour (Fri)]
(out)
(out)# Date Range: 09/01/2018 - 11/25/2018
(out)# Pageviews
(out)# Profile Name: chloecabot.com
(out)# Report Name: Visits & Pageview Tracking
(out)#--------------------------------------------------------
(out)#--------------------------------------------------------
(out)#--------------------------------------------------------
(out)#--------------------------------------------------------
(out)Date Range,Pageviews
(out)Fri 10/12,1485
(out)Fri 10/19,65
(out)Fri 10/26,103
(out)Fri 10/5,1090
(out)Fri 11/16,373
(out)Fri 11/2,65
(out)Fri 11/23,419
(out)Fri 11/9,78
(out)Fri 9/14,46
(out)Fri 9/21,23
(out)Fri 9/28,86
(out)Fri 9/7,21
(out)Mon 10/1,1551
(out)Mon 10/15,825	
(out)...
sort -t, -k2 -n visits.csv 	[On trie le fichier selon la deuxième colonne (-k2) en indiquand que le séparateur de colonne est la virgule (-t,) et avec un tri numérique (-n). On sépare les différentes options par des espaces.]
(out)
(out)# Date Range: 09/01/2018 - 11/25/2018
(out)# Pageviews
(out)# Profile Name: chloecabot.com
(out)# Report Name: Visits & Pageview Tracking
(out)#--------------------------------------------------------
(out)#--------------------------------------------------------
(out)#--------------------------------------------------------
(out)#--------------------------------------------------------
(out)Date Range,Pageviews
(out)Wed 10/31,0 	[31 octobre : aucune visite]
(out)Sun 9/9,8 		[moins de visites en septembre]
(out)Sun 9/23,10
(out)Thu 9/20,12
(out)Sat 9/22,13
(out)Wed 9/12,13
(out)Mon 9/10,16
(out)Sun 9/16,18
(out)Sat 9/15,19
(out)...
(out)Tue 10/23,499
(out)Thu 10/18,522
(out)Mon 10/15,825
(out)Wed 10/24,976
(out)Wed 10/17,1038
(out)Fri 10/5,1090
(out)Fri 10/12,1485
(out)Mon 10/1,1551
(out)Thu 10/25,1752 	[plus de visites en octobre]
(out)Mon 10/8,2478		[8 octobre : le plus de visites]
sort -t, -k2 -n visits.csv | grep Sat
(out)Sat 9/22,13
(out)Sat 9/15,19
(out)Sat 9/8,20
(out)Sat 9/1,26
(out)Sat 11/24,30
(out)Sat 9/29,35
(out)Sat 10/27,44
(out)Sat 10/6,56
(out)Sat 11/3,65
(out)Sat 10/20,82
(out)Sat 11/10,88
(out)Sat 11/17,90
(out)Sat 10/13,103
sort -t, -k2 -n visits.csv | grep Mon
(out)Mon 9/10,16
(out)Mon 9/3,27
(out)Mon 11/5,55
(out)Mon 10/29,78
(out)Mon 11/19,100
(out)Mon 11/12,165
(out)Mon 9/24,242
(out)Mon 10/22,273
(out)Mon 9/17,377
(out)Mon 10/15,825
(out)Mon 10/1,1551
(out)Mon 10/8,2478 	[Beaucoup plus de visites le lundi que le samedi !]

								

Partie D : Analyse du fichier top_content.csv avec des expressions régulières

Vous avez vu l'utilisation des jokers ? et * pour sélectionner des fichiers avec la commande ls par exemple. Les expressions régulières sont également des suites de caractères qui permettent de faire des sélections, dans du texte. Elles fonctionnent avec certaines commandes comme la commande grep. Les expressions régulières existent dans tous les langages de programmation et sont aussi utilisables dans certains éditeurs comme Sublime Text. En Web, ce sont elles qui permettent de vérifier le format d'une date ou d'un numéro de téléphone par exemple.

Caractère Description
^Début de la ligne
$Fin de la ligne
.Remplace un caractère quelconque
[abc]Les caractères a, b, c sont permis
[^abc]Les caractères a, b, c sont interdits
.*Zéro ou plus occurences de n'importe quel caractère
.?N'importe quel caractère 0 ou 1 fois
.+Une ou plus occurences de n'importe quel caractère

Voyons quelques exemples avec ce fichier de notes :

							
NOM;PRENOM;Groupe;Total;Q1;Q2
ABADOU;SOFIANE;J;8,13;4,63;3,50
ABECASSIS;ZOE;K;5,32;0,32;5,00
ALLAIN;JOSSELIN;G;8,92;8,42;0,50
ANGOULVENT;CYRIL;A;5,59;0,59;5,00
ARNAUDY;MAXIME;J;19,13;13,38;5,75
ARNOLD;ELISE;B;7,27;3,27;4,00
ARNOLD;THOMAS;H;10,69;5,44;5,25
BACHELOT;YANN;E;16,53;13,28;3,25
BAI;JINGWEN;K;7,85;6,60;1,25
BARBARA;JUSTINE;A;7,91;3,41;4,50
BARDI;ADRIEN;E;4,00;0,50;3,50
BARRADOUANE;YAZID;E;15,13;10,13;5,00
BAUSMAYER;REMI;A;1,66;1,66;0,00
BAYARD;SHANNON;D;11,95;11,95;0,00

  • grep "^A" fichier renverra toutes les lignes qui commencent par A
  • grep "^[AC]" fichier renverra toutes les lignes qui commencent par A ou C
  • grep "^[A-C]" fichier renverra toutes les lignes qui commencent par A, B, ou C
  • grep "^[^A]" fichier renverra toutes les lignes qui commencent par n'importe quel caractère sauf le A
  • grep "[0-9]" fichier renverra toutes les lignes qui contiennent un chiffre
  • grep "[0-9][0-9]" fichier renverra toutes les lignes qui contiennent deux chiffres à la suite
  • grep "6,00$" fichier renverra toutes les lignes qui finissent par "6,00" donc tous les étudiants qui ont eu tout juste à la question 2
  • grep 15,.. fichier renverra toutes les lignes qui contiennent "15," suivi de 2 caractères quelconques : donc tous les étudiants qui ont eu 15,XX
  • grep 1[5-9],.. fichier renverra toutes les lignes qui contiennent un 1, suivi d'un 5, d'un 6, d'un 7, d'un 8 ou d'un 9, puis une virgule puis deux caractères quelconques. Donc tous les étudiants ayant de 15,XX à 19,XX.
  • grep "^[^;]*;A" fichier renverra toutes les lignes qui commencent par une suite quelconque de caractères sauf le ";" suivie d'un ";" puis d'un A : donc toutes les lignes dont la seconde colonne (le prénom) commence par un A.

Revenons à l'exercice, on va écrire quelques expressions régulières pour analyser notre fichier top_content.csv

  1. Affichez les 20 premières lignes du fichier top_content.csv. Qu'obtenez-vous ? À quoi correspond chaque colonne ? Comment le fichier est-il trié ?
  2. Affichez toutes les lignes qui commencent par "/mmi". Combien en obtenez-vous ?
  3. Affichez toutes les lignes qui commencent par "/mmi/M1203", puis toutes celles qui commencent par "/mmi/M3203". Quel cours comporte le plus de pages ?
  4. Affichez toutes les lignes dont la deuxième colonne commence par un 4
  5. Affichez toutes les lignes dont la troisième colonne commence par un 4
  6. Affichez toutes les lignes dont la troisième colonne commence par un 4, suivi de deux chiffres. Vous obtenez le nombre de pages ayant eu 4XX pageviews.
  7. Affichez les pages ayant eu entre 400 et 999 pageviews.
  8. Affichez les pages ayant eu plus de 1000 pageviews.




									
head -n 20 top_content.csv 	[On affiche les 20 premières lignes du fichier]
(out)
(out)#--------------------------------------------------------
(out)# Profile Name: chloecabot.com
(out)# Date Range: 09/01/2018 - 11/25/2018
(out)#--------------------------------------------------------
(out)
(out)#--------------------------------------------------------
(out)# Top Content
(out)#--------------------------------------------------------
(out)Content,Visits,Pageviews,Avg Time,% Exit,$ Index
(out)/index.html,1487,1710,26.57,76.37,0.00
(out)/mmi/M3203/index.html,808,1683,61.82,28.40,0.00
(out)/robots.txt,445,480,69.26,71.67,0.00
(out)/mmi/M1203/synthese_reseaux.html,406,669,326.67,54.56,0.00
(out)/lpmn/git/index.html,269,386,183.88,62.44,0.00
(out)/mmi/M3203/TP1.html,200,417,74.33,8.15,0.00
(out)/mmi/M3203/Seance2/tama.html,189,431,70.44,6.50,0.00
(out)/mmi/M3203/Seance2/alertes.html,186,431,23.87,0.70,0.00
(out)/mmi/M3203/Seance2/progressbar.html,186,433,37.02,0.69,0.00
(out)/mmi/M3203/Seance2/diaporama.html,184,427,23.25,0.00,0.00
grep -c "^/mmi" top_content.csv 	[On cherche les lignes qui commencent par /mmi]
(out)/mmi/M3203/index.html,808,1683,61.82,28.40,0.00
(out)/mmi/M1203/synthese_reseaux.html,406,669,326.67,54.56,0.00
(out)/mmi/M3203/TP1.html,200,417,74.33,8.15,0.00
(out)...
grep -c "^/mmi" top_content.csv 	[On compte les lignes qui commencent par /mmi]
(out)99
grep "^/mmi/M1203" top_content.csv 	[On affiche les lignes qui commencent par /mmi/M1203]
(out)/mmi/M1203/synthese_reseaux.html,406,669,326.67,54.56,0.00
(out)/mmi/M1203/index.html,148,456,29.23,4.82,0.00
(out)/mmi/M1203/synthese_unix.html,77,160,161.15,30.00,0.00
(out)/mmi/M1203/TP1_Reseaux.html,60,217,181.71,9.22,0.00
(out)/mmi/M1203/TP2_Systeme.html,36,129,154.81,12.40,0.00
(out)/mmi/M1203/cheatsheet.html,31,66,107.98,9.09,0.00
(out)/mmi/M1203/resources/unix-linux.json,30,57,157.16,10.53,0.00
(out)/mmi/M1203/TP3_Systeme.html,3,3,3.00,33.33,0.00
grep -c "^/mmi/M1203" top_content.csv 	[On compte les lignes qui commencent par /mmi/M1203]
(out)8
grep -c "^/mmi/M3203" top_content.csv 	[On compte les lignes qui commencent par /mmi/M3203]
(out)91 	[Plus de pages pour le cours M3203]
grep "^[^,]*,4" top_content.csv  	[La ligne commence par un caractère qui nest pas une virgule répété plusieurs fois, puis une virgule, puis un 4]
(out)/robots.txt,445,480,69.26,71.67,0.00
(out)/mmi/M1203/synthese_reseaux.html,406,669,326.67,54.56,0.00
(out)/mmi/M3203/ballTrap.html,46,149,1.38,0.00,0.00
(out)/mmi/M3203/Seance2/exemples_cours/balle.html,45,291,36.36,2.75,0.00
(out)/mmi/M3203/eval/finale/Rattrapage/annuaire.html,4,8,383.29,12.50,0.00
(out)/mmi/M3203/eval/finale/TP5/multiplication.html,4,17,71.18,0.00,0.00
(out)/mmi/M3203/eval/finale/Rattrapage/converter.html,4,5,217.00,0.00,0.00
(out)/mmi/M3203/eval/finale/TP2/animaux.html,4,15,83.33,0.00,0.00
grep "^[^,]*,[^,]*,4" top_content.csv  	[La ligne commence par un caractère qui n est pas une virgule répété plusieurs fois, puis une virgule, ensuite on a de nouveau un caractère qui n est pas une virgule répété plusieurs fois, suivi d une virgule puis un 4]
(out)/robots.txt,445,480,69.26,71.67,0.00
(out)/mmi/M3203/TP1.html,200,417,74.33,8.15,0.00
(out)/mmi/M3203/Seance2/tama.html,189,431,70.44,6.50,0.00
(out)/mmi/M3203/Seance2/alertes.html,186,431,23.87,0.70,0.00
(out)/mmi/M3203/Seance2/progressbar.html,186,433,37.02,0.69,0.00
(out)/mmi/M3203/Seance2/diaporama.html,184,427,23.25,0.00,0.00
(out)/mmi/M3203/DOM.html,158,427,216.25,11.94,0.00
(out)/mmi/M3203/Seance3/carrousel.html,154,483,79.07,6.21,0.00
(out)/mmi/M3203/Seance3/vu.html,152,480,14.83,0.83,0.00
(out)/mmi/M3203/Seance3/countdown.html,151,480,29.22,2.08,0.00
(out)/mmi/M3203/TP3.html,150,446,0.63,0.22,0.00
(out)/mmi/M1203/index.html,148,456,29.23,4.82,0.00
(out)/assets/plugins/font-awesome/fonts/fontawesome-webfont.woff,33,44,348.60,54.55,0.00
(out)/mmi/M3203/eval/intermediaire/TP4_toc_correction.html,17,41,47.79,4.88,0.00
(out)/lpmn/git/bareme,1,4,3.33,25.00,0.00	
grep "^[^,]*,[^,]*,4[0-9][0-9]" top_content.csv 	[La troisième colonne comporte un nombre compris entre 400 et 499]
(out)/robots.txt,445,480,69.26,71.67,0.00
(out)/mmi/M3203/TP1.html,200,417,74.33,8.15,0.00
(out)/mmi/M3203/Seance2/tama.html,189,431,70.44,6.50,0.00
(out)/mmi/M3203/Seance2/alertes.html,186,431,23.87,0.70,0.00
(out)/mmi/M3203/Seance2/progressbar.html,186,433,37.02,0.69,0.00
(out)/mmi/M3203/Seance2/diaporama.html,184,427,23.25,0.00,0.00
(out)/mmi/M3203/DOM.html,158,427,216.25,11.94,0.00
(out)/mmi/M3203/Seance3/carrousel.html,154,483,79.07,6.21,0.00
(out)/mmi/M3203/Seance3/vu.html,152,480,14.83,0.83,0.00
(out)/mmi/M3203/Seance3/countdown.html,151,480,29.22,2.08,0.00
(out)/mmi/M3203/TP3.html,150,446,0.63,0.22,0.00
(out)/mmi/M1203/index.html,148,456,29.23,4.82,0.00	
grep "^[^,]*,[^,]*,[4-9][0-9][0-9]" top_content.csv 	[La troisième colonne comporte un nombre compris entre 400 et 999]
(out)/robots.txt,445,480,69.26,71.67,0.00
(out)/mmi/M1203/synthese_reseaux.html,406,669,326.67,54.56,0.00
(out)/mmi/M3203/TP1.html,200,417,74.33,8.15,0.00
(out)/mmi/M3203/Seance2/tama.html,189,431,70.44,6.50,0.00
(out)/mmi/M3203/Seance2/alertes.html,186,431,23.87,0.70,0.00
(out)/mmi/M3203/Seance2/progressbar.html,186,433,37.02,0.69,0.00
(out)/mmi/M3203/Seance2/diaporama.html,184,427,23.25,0.00,0.00
(out)/mmi/M3203/DOM.html,158,427,216.25,11.94,0.00
(out)/mmi/M3203/Seance3/carrousel.html,154,483,79.07,6.21,0.00
(out)/mmi/M3203/Seance3/vu.html,152,480,14.83,0.83,0.00
(out)/mmi/M3203/Seance3/countdown.html,151,480,29.22,2.08,0.00
(out)/mmi/M3203/TP3.html,150,446,0.63,0.22,0.00
(out)/mmi/M1203/index.html,148,456,29.23,4.82,0.00
(out)/mmi/M3203/Seance3/bouncingball.html,79,635,67.19,4.57,0.00
(out)/mmi/M3203/bouncingballs.html,75,553,0.18,0.18,0.00
grep "^[^,]*,[^,]*,[1-9][0-9][0-9][0-9]" top_content.csv 	[La troisième colonne comporte un nombre compris entre 1000 et 9999]
(out)/index.html,1487,1710,26.57,76.37,0.00
(out)/mmi/M3203/index.html,808,1683,61.82,28.40,0.00		
									
								


Exercice bonus : Les expressions régulières classiques

Certaines expressions régulières reviennent souvent, en particulier dans le web, pour vérifier le texte saisi par un utilisateur dans un formulaire par exemple. On va en chercher quelques unes.

  1. Quelle expression régulière permet de reconnaitre une date du format français JJ/MM/AAAA ? Du format anglosaxon AAAA/MM/JJ ?
  2. Quelle expression régulière permet de reconnaitre une adresse mail ?
  3. Quelle expression régulière permet de reconnaître un numéro de téléphone de la forme 01.02.03.04.05 ? Et si on veut aussi accepter 01 02 03 04 05 ?




  1. Date au format DD/MM/YYYY :
    Version simple : [0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]
    Pour éviter les répétitions, on peut écrire : [0-9]{2}/[0-9]{2}/[0-9]{4}
    La version compliquée pour éviter les 31/02/2567 : ^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$ (et oui !)
    Date au format YYYY/MM/DD :
    Version simple : [0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]
    Pour éviter les répétitions, on peut écrire : [0-9]{4}/[0-9]{2}/[0-9]{2}
  2. La version simple : [a-zA-Z0-9-_.]+@[a-zA-Z0-9]+.[a-zA-Z0-9]+
    La version officielle du W3C : ^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$
  3. Pour accepter 01.02.03.04.05 et 01 02 03 04 05 : [0-9]{2}[. ][0-9]{2}[. ][0-9]{2}[. ][0-9]{2}[. ][0-9]{2}