Cours CMI / L2 - séance 1
Résumé de la séance 1
On y apprend ce qu'est le système d'exploitation Linux avec ses principales commandes, comment accéder à MySQL et comment transférer des fichiers dont des fichiers de commandes MySQL pour assurer l'import et l'export de bases et de tables de données. La production de fichiers Excel sera également abordée.
1. Le système d'exploitation Linux
Linux est un système d'exploitation comme Windows ou Mac OS. Son but est de gérer l'ensemble des ressources matérielles (écran, clavier, mémoire, disque dur...) et logicielles (traitements de textes, tableurs, navigateurs, explorateurs de fichiers, jeux...).
Ce qui caractérise Linux est sa gratuité, la disponibilité de ses sources et son très grand nombre de développeurs et d'utilisateurs. De plus c'est un système complet prévu pour plusieurs utilisateurs et capable d'être serveur de nombreuses applications à distance (serveur Web, connexion utilisateurs, messagerie, serveur de fichiers distants...).
Si historiquement Linux s'utilisait en ligne de commandes via une console, Linux dispose aujourd'hui d'interfaces logicielles et de menus tout à fait comparables à ceux disponibles sur les ordinateurs Windows et Mac Intosh. Les menus et interfaces sont incomparables lorsqu'il s'agit de découvrir les possibilités d'un logiciel mais ils ont deux gros défauts : ils s'utilisent via le clavier et la souris (ce qui les rend difficilement automatisables) et ils sont visuels (ce qui fait qu'en général ils ne produisent aucun fichier de résultat pour conserver une trace de ce qui a été fait). De plus ils ne permettent pas toujours simplement de résoudre des problèmes simples, comme par exemple trouver les cinq derniers fichiers .txt écrits dans un répertoire donné. C'est pourquoi il est d'usage d'apprendre à utiliser la ligne de commandes sous Linux, réalisant ainsi une espèce de tchat avec le système d'exploitation.
Pour mémoire, la connexion au serveur forge se fait en local à la faculté des sciences d'Angers par
ssh -YC VOTRE_LOGIN_ICI@forge.info-uaPar contre, à l'extérieur du département informatique, la connexion au serveur forge doit se faire avec la commande
ssh -YC VOTRE_LOGIN_ICI@forge.info.univ-angers.frSi vous utilisez Windows, vous pouvez vous connecter au serveur forge à l'aide du logiciel putty qui est gratuit et téléchargeable à l'adresse officielle latest putty ou sur le site français putty 01.net.
Héritier des systèmes Unix les commandes de Linux peuvent être simples, comme cp pour copier des fichiers, ou excessivement techniques lorsqu'on les enchaine, comme par exemple la commande
ls -al | sort -n -r -k 5 -k 9 | head -n 20Il est donc conseillé de commencer en douceur avec les principales commandes Unix dont les 20 commandes usuelles listées ici avant d'essayer de maitriser les commandes de base pour ensuite connaitre les 101 commandes indispensables sous Linux.
Il restera enfin à pratiquer, pratiquer et pratiquer encore afin de devenir à l'aise avec toutes les subtilités des commandes Unix, de leur automatisation en shell, sachant que maitriser les commandes et comprendre le système de fichiers et les manipulations fichiers demande du temps.
Enfin, pour les plus courageuses et les plus courageux, on pourra tenter de choisir et installer un Linux sur son ordinateur, après avoir vérifié qu'on en maitrise bien les commandes fondamentales.
En particulier ce qu'on nomme la redirection des sorties permet de sauvegarder dans un fichier le texte produit par une commande et la redirection des entrées permet de lire dans un fichier ce qu'on devrait en principe taper au clavier, ce qui permet d'automatiser et de reproduire des traitements. Pour découvrir ce sujet, on pourra lire dans cet ordre les pages redir 1 et redir 2. Pour le maitriser, on viendra lire la page flux puis la page redirections.
2. SQL et MySQL
Vu du coté utilisateur, SQL et MySQL sont "juste" des logiciels, un peu comme Excel et assimilés, pour stocker des données et les restituer, mais de façon sophistiquée et avec une gestion forte des droits d'accès aux données. Même s'il existe des logiciels, des interfaces graphiques et des pages Web pour gérer des données MySQL, le moyen le plus simple et le plus direct pour dialoguer avec MySQL reste la ligne de commandes.
Nous n'en dirons pas plus ici, car nous avons écrit un tuteur à ce sujet, adapté à la configuration locale du département informatique. On pourra bien sûr lire d'autres textes, dont cours MySQL, cours BDD ou mysql_tutorial.pdf avant de passer à la lecture d'ouvrages plus spécialisés, comme ceux que l'on peut trouver sur le Web avec une recherche sur Google telle que celle-ci :
Pour mémoire, la connexion MySQL se fait en local à la faculté des sciences d'Angers par
mysql --host=localhost --user=anonymous --password=anonymouset il faut ensuite choisir la base de données à utiliser avec USE laBase ; .
3. Import et export de données
3.1 Via des commandes SQL
Pour importer et exporter des données MySQL, on dispose en général de deux techniques : soit utiliser des instructions SQL ce qui permet de "rejouer" le code d'insertion ou d'exportation, soit passer par des fichiers-textes selon différents formats en profitant de ce que l'on nomme la redirection des entrées et des sorties en ligne de commandes. Ainsi la commande MySQL nommée mysqldump génère tout le code MySQL nécessaire à recréer toute une table. Voici sa syntaxe de base :
Usage: mysqldump [OPTIONS] database [tables] OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all-databases [OPTIONS] For more options, use mysqldump --helpOn trouvera ici les détails des options de cette commande, détails obtenus via mysqldump --help.
Ainsi, pour sauvegarder toute la base de données LEAPdb, on peut utiliser le code
mysqldump --host=localhost --user=***** --password=******* LEA > dumpLEA.txtà condition de disposer des droits suffisants, bien sûr.
On trouvera dans le fichier dumpLEA.txt le résultat de cette commande (taille du fichier : environ 5 Mo).
3.2 A l'aide de fichiers formatés
Comme le montrent les options de la commande mysql obtenues via mysql --help et mises dans le fichier mysql.txt via mysql --help > mysql.txt MySQL dispose de nombreuses options de sorties, dont les formats HTML et XML sachant que par défaut les valeurs des champs sont séparés par le caractère de tabulation \t, ce qu'Excel et assimilés savent gérer.
Ainsi pour obtenir le fichier export01.csv lisible par Excel pour les cinq premiers enregistrements (par ordre d'accession) de la table proteins si on limite aux champs accession, length et reign, soit l'instruction SQL (mise dans le fichier export.sql) :
SELECT accession, length, reign FROM proteins ORDER BY accession LIMIT 5 ;on pourra écrire
mysql LEA < export.sql > export01.csvDe même, pour obtenir le fichier export02.html de ces mêmes informations, on écrira
mysql LEA --html < export.sql > export02.htmlEnfin, pour produire le fichier export03.xml équivalent, on écrira
mysql LEA --xml < export.sql > export03.xml4. Les commandes Linux par la pratique
Pour vous entrainer à la pratique du terminal, voici quelques commandes à lire (ou à déchiffrer ?) et quelques commandes à écrire pour des scénarios courants :
Question 4.1
Expliquer ce que font les commandes suivantes :
ls *.sql ls -al *sql ls -alt *sql ls -al | sort -n -r -k 5,5 | head -n 20Question 4.2
A quoi sert la commande locate ? Expliquer ce que fait la commande suivante :
locate officeQuestion 4.3
A quoi sert la commande find ? Quels sont ses paramètres ? Expliquer ce que fait l'enchainement de commandes suivant :
find . | grep -i "xls$"Question 4.4
Je voudrais faire une copie de sauvegarde du fichier listeProteines.txt et nommer la copie listeProteines_sov.txt. Quelle commande dois-je écrire ?
Question 4.5
Quelle commande Linux ne faut-il jamais écrire sous peine de perdre tous les fichiers de tous les répertoires ?
Question 4.6
Je voudrais créer une archive au format ZIP nommée sauvegardeExcel.zip de tous les fichiers Excel (formats xls et xlsx) du répertoire courant. Quelle commande dois-je écrire ? Et si j'avais voulu aussi sauvegarder tous les fichiers Excels de tous les sous-répertoires du répertoire courant (avec le chemin d'accès relatif), que faut-il modifier dans cette commande ?
Question 4.7
J'aimerais connaitre le nom de toutes les tables de la base statdata et le nombre d'enregistrements des tables LEA.proteins et HSP.proteins. Quelles commandes MySQL faut-il écrire ? Je voudrais générer un fichier rapportTables.txt qui contient la date et l'heure puis les informations précédentes. Comment dois-je faire ?
Et si je voulais que le fichier soit automatiquement nommé d'après la date du jour, par exemple rapportTables.15_02_2014.txt, que faudrait-il écrire ?
Question 4.8
Je dois récupérer un fichier qui est sur le Web et dont je connais l'URL, comme par exemple cmds01.txt ou image linux/manchot. Comment dois-je faire ? On pourra penser à utiliser le menu copy link location / copier l'adresse du lien du navigateur pour obtenir l'URL.
Solutions : afficher les solutions
Réponse à la question 4.1
La commande ls liste les fichiers. Le paramètre *.sql indique que l'on ne veut voir que les fichiers dont le type est .sql (avec le point). Le paramètre *sql (donc sans le point) affiche les fichiers qui se terminent par sql. Par exemple le fichier test_mysql serait affiché avec cette deuxième commande, mais pas avec la première. Les options -al précise que l'on veut voir tous les fichiers, en mode long. Si on rajoute t, alors les fichiers sont triés par date.
La dernière commande affiche tous les fichiers puis les trie en mode numérique selon la cinquième information affichée et n'affiche que les 20 premiers fichiers correspondants.
Réponse à la question 4.2
La commande locate recherche dans l'ensemble de la configuration les fichiers enregistrés dans le système, donc principalement les fichiers d'installation. Le mot qui suit locate est ce que l'on cherche. Ici cela devrait afficher tous les fichiers de libreoffice, soit plusieurs milliers de fichiers, si l'on en croit les résultats de la commande locate office | wc -l.
Réponse à la question 4.3
Contrairement à locate, la commande find ne recherche que dans les répertoires qu'on lui spécifie. Ici c'est point donc le répertoire courant. find . recherche donc tous les fichiers du répertoire courant et de tous ses sous-répertoires. Ajouter grep -i "xls$" permet de restreindre l'affichage aux seuls fichiers qui se terminent par le mot xls, écrit en majuscules ou en minuscules. On aurait pu se contenter de l'option -name de find.
Réponse à la question 4.4
Il suffit d'utiliser la commande cp comme suit :
cp listeProteines.txt listeProteines_sov.txtRéponse à la question 4.5
La commande rm efface des fichiers, ce qui est toujours dangereux. Les options -rf forcent la destruction dans tous les répertoires, y compris en "forçant" la suppression des fichiers avec des droits de lecture seule. Et bien sûr, le paramètre * indique que l'on veut effacer tous les fichiers.
Donc la commande Linux à ne jamais écrire, sous peine de perdre tous les fichiers de tous les répertoires est :
rm -rf *Réponse à la question 4.6
La commande zip permet de créer des archives. On peut se contenter de
zip sauvegardeExcel.zip *.xls*pour archiver au format ZIP dans le fichier sauvegardeExcel.zip tous les fichiers Excel (formats xls et xlsx) du répertoire courant. Pour sauvegarder aussi les fichiers des sous-répertoires, il faut utiliser l'option -r.
Réponse à la question 4.7
Les commandes MySQL à utiliser sont
use statdata ; show tables ; select count(*) from LEA.proteins ; select count(*) from HSP.proteins ;Pour les exécuter et produire le fichier résultat nommé rapportTables.txt, il suffit de mettre ces commandes dans un fichier, disons rapportTables.mysql et d'utiliser la redirection des entrées et des sorties, soit la commande :
mysql ... < rapportTables.mysql > rapportTables.txtPour que le nom du fichier contienne la date du jour, il faut passer par un script, par exemple un script shell comme le fichier rapportTables.sh suivant :
# (gH) -_- rapportTables.sh ; TimeStamp (unix) : 05 Mars 2016 vers 14:07 aujourdhui=`date '+%Y_%m_%d'` ; nomRapport="rapportTables.$aujourdhui.txt" ; sql -v -v -v < rapportTables.mysql > $nomRapport ; echo Vous pouvez consulter le rapport $nomRapport ;Pour exécuter ce script shell il suffit d'écrire :
sh rapportTables.shRéponse à la question 4.8
Deux commandes permettent de rapatrier un fichier dont on connait l'URL. Ce sont wget et curl. Le plus simple ici est d'utiliser la commande wget comme suit :
wget http://forge.info.univ-angers.fr/~gh/Cmi/manchot.jpgOn récupère alors le fichier dans le répertoire courant avec une barre de progression qui permet de suivre le téléchargement :
$gh> wget http://forge.info.univ-angers.fr/~gh/Cmi/manchot.jpg Resolving forge.info.univ-angers.fr... 194.57.175.124 Connecting to forge.info.univ-angers.fr |194.57.175.124|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 5761 (5,6K) [image/jpeg] Saving to: 'manchot.jpg.1' 100%[=======================================>] 5 761 --.-K/s in 0,001s 2016-03-05 14:16:44 (4,55 MB/s) - 'manchot.jpg.1' saved [5761/5761]
Cliquer ici pour revenir à la page de départ des cours CMI / L2.
Retour à la page principale de (gH)