Vous êtes sur la page 1sur 132
POSTGRESQL ole ee ok as Le eT Tl MAGAZINE / FRANCE Cea tetera) LA BOITE A OUTILS INDISPENSABLE ! > VERSIONNING ee octane Peet tcc LIBREOFFICE / BASH 1 15066. 15H-F: 14,90 € 2 " 4 pats Y i i PN eel ee Pee eae Sieg Sala -Yoliifolg] o res Dijon 2019 Terre dinnovation et de partage DU.3/AU 6 DECEMBRE LP} ALO} Somers ULES www.jres.org cide ha JOURNESS RESESU» DE L’ENSEIGNEMENT ET DE LA RECHERCHE a . day . Coir == pa: ea Kote OMEAS oa 43d S01 =N 1, =o etd ea Oe \Veritable forum d'échange et de transfert de compdtences par la conttontation des expériences etl présentation de technologies et services innovants, les LIRES sont un événement unique en France, vecteur de connaissances et de transmissions d' expertise au sein de la communauté Enseignement et Recherche STC te monn FO ee ee ce ee Le Pendant jours les JRES proposeront un état e art dela transformation numérique au sein des éablissements dela communauté académigue aussi bien So Re ee ee crn te Sa grou tutes ns pubatons Dit ity) sur wow d-iamond.com ‘oNUILinux Magazine Hor Série ‘step Len Eon Dlamond 10, los 6 Cattrl-£2000Comar-Fanoa ‘Tel 10367 100020/ Fax: 0367 100021 smal; cies samen com ‘eceusaignummag com ‘Servis commercial: sdosgnuinuenas.com Stes : wi gnulrusmag com Director de publication :Anaus etaler ‘Chet de édactons Denis Bodor Rdactour en cha: Tistan Colombo Responsable Service Infographie: ath Sea Responsable pubic : Ta 0367100027 Impression: pra, rack und Medi Dinstistingen Gmbh nea, Atorapre| Distrution France: (iquement pour es doses de peso) LP Résssort:PlteSrne de Saint Barley. Ao, Tak c0261 27 9 12 Plate foae de San Quer Fala, Teh :08 74 826308 IMPRINE on Alonagne - PRINTED in Germany Dépstigal: Aparuton risen ore2ce64 ‘Commission Para :K78 976 | Periods : Bereta Ceri rede vent: 14.90 Eos Le i man th Ate the |geteror commana parmus nos aregaan tat sos ne ass dane CRU Hgrs Pre ese (Sniper ws mots cst dan ests 8M {oceans Fancast aon nan rot ee, ‘eye ts nkrn poet os ren ‘sn tn tari ssw ros Sb at ‘cpt Sp eenoan sane mage nacre coir et at mea “es res non sgt cents dan namo digs pares membres segue addon des Eaton Damen Retrouvez-nous sur egnulinuxmag © Sretmatonans GQ eentrarsnie @ erstoresetanmontcon vn gnulinuemag com vo ections shaman ft www.ed-diamond.com “Tout est toujours une histoire de compromis en Informatique 1 Vais je prvégir la vitesse cexécution ou minimisor utitsaton fa RAM 7 1 Usiser une architecture complexe et forteent main tenable ou développer rapidement un pet script «a jelable» ? Ete Récemment jai di configuer mon nouvel ordinateur portable avec toutes los galéres inhérentes 8 installation d'un Linux (et plus encore une Debian) avec des avers proprétates pour le moindre composant. Ja pris Phabitude de chi frer mon dsque dur, ce qui paraltautant plus logique sur un matériel nomade «ve fon peut ps faclement perdre ou se fate voer. Et est qu'apparat une nouvel fos la question du compromis 1 Este quo vais chiror la partion /ome et utliser LUKS ot LYM? 1 Ou estice que je vais me contener de citier mon épertoewtlsatew ? Le premier cas sera pus adcurie, male na sera pas nécassarementle plus pratique je vais dovor taper deux clés de lng earactéres minum chacune 8 chaque cémarrage (i faut nécessalramentchiter également la partion de swap, dod les deux pation). Si je ne veux pases taper, Je poural les lenregiser sur une c¥é USB que jinsérerai au démarrage. Question : je suis en déplacement, fe sul fatigue, at oublé mes ces klomeénques (I ut une ferour run caracre, ce qui est vite atve je pare cFexpéience...). eat perdu ma dé USB ; comment est-ce que ais pour ravaller? Le dousiéme cas sera moins sécursé, mais simplement avec mon login et mon ‘mot de passe je pourra séclencher le décifrement du répertare. Vopération sera donc tout a fait ransparente pour moi ete r’aurai pas la hantse de me retrower conc loin de mes pénates avec un ordinstourparfatement Irutisabe. La sécurité des données est quelque chose dimportant, mais ne doit pas ven. slourd note vie de tus les jours. a done choi la deuxéme configuration, Cotte expéronce mia appelé une dscussion que favs eue avec une biblthé- care qui, dans le car de son tava, devi se connecter au ste poars-addict. com mais qui ad émete une demande spéciale de connexion au ste, clic ‘ant bloga (eh oui, yale mot «acct» - soi « aro» ou «toxleomane » = dans FURL!) Deux mois plus tard ele a pu accéder au site et poursure son traval ta magle des whitest West val que pour le responsable deta sécurts ‘est beaucoup plus simple &gérer..par conte pour ls wiisatours du réseau, stout de site beaucoup plus compliqué de travail Je me répéte souvent, mais rioubliez pas que les applications que nous développens ou les auts que nous mettns en place sot plupart du temps ddies & des ubestours et qu'il faut es adapter a leurs besoin et leurs com ptonces ! Nous forgeons leurs outset, cates, is auront moins de reques de 0 blossor avec une pote cule quavec un corséque, mais contr un dragon sera nettamant moins eficace! faut choise juste miiou Tristan Colombo SOMMATIRE ET ts GNU/LINUX MAGAZINE HORS-SERIE N° FRANCAIS 24th 1 228h — 06 ACTUS 06 Mozilla Common Voice : rendre la reconnaissance vocale ouverte et collaborative 08 Coté livres.. DOSSIER : SPECIAL DEVOPS 10. Enfouissement de données LA BOITE A OUTILS DEVELOPPEMENT dans un document LibreOffice INDISPENSABLE ! SYSTEME 22. Patroni, un cluster PostgreSQL simple et rapide 40 Du sysadmin au dev : Des commandes Shell pour les développeurs 62 Du dev au sysadmin : Apprenez a concevoir et distribuer vos applications sur plusieurs plateformes avec CMake Du sysadmin au dev : Git, le gestionnaire Se ere ae de versions pour tous les développeurs répétlves d'accds A un Du dev au sysadmin : Automatisez les site Web tests et évitez les régressions 116 Web crawler / pilote web Selenium : comment AIcHTUIS MOZILLA COMMON VOICE: RENDRE LA RECONNAISSANCE VOCALE OUVERTE ET COLLABORATIVE FIGURE 2 Mozilla 2 récemment lanes un projet pour collecter et vai- Francals der des échantilons de vox © 248h . permettant d'améliorer les systémes de reconnaissance et de synthase vocale (STT - ‘Speech To Text - et TTS - Text To Speech). En effet, pour que la reconnaissance soit la plus flable et la synthese la plus raliste possible, il faut néces- sairement disposer d'un grand Nomtre dheures denrepisvement pour angais nombre 6'échantilons vocaux. Or, la bale plupart des données employées par ucts les grandes entreprises ne sont pas libres. Mozilla propose donc via son projet Commen Voiee de partciper 8 Télaboration dune base de données lore, créée de maniére communautaire. 12k . Comme Iilustrent les figures 1, 2 et 3 ily a nécessairement des langues pour lesquelles la collecte et la valida- tion de données sont plus simples que dautres, Nombre dheures enreisrement pour le ren. /olce.mozilla.orgffr vous propose enregistrer (https:livoice.mozilla.orgifrispeak) ou de valider (https:/iveice.mozilla.orgifrlisten) des échantillons vocaux. Pour renregistrement d'échantillons vocaux, la page va vous demander de lire § phrases (figure 4). Pour la validation d'échantilons vocaux, la page va vous proposer d'écouter 5 phrases lues par Bos FIGURE 4 La possibilité, pour une fois, de vraiment y arriver. Interface onregiromeont des intermautes et de les valider (04 dindiquer quelles ont mal 6t6 prononcées (figure 5) ‘Si vous souhaitez contribuer & autres langues que le fan- cals, vous pouvez vous rendre sur la page https:!Ivoice. mezilla.orgifllanguages, afin de sélectionner une des lan- ues proposées, untar topane nee core Chettikudiyiruppu est construit avec un toit recouvert de feuilles et des murs en briques. om > nom FIGURE 5 Interface de vaksation Enfin, comme la base de données résuitante sera bro, vous avez la possibile Ge tléchargerles jeux de données sur httpsivotce. ‘mozila.orgt/datasets ‘i vous travailez avec du STT ou du TTS, vous devriez vis terce site qui ne manguera pas de vous intresser! __, BLOCK CHAINS EN SO QUESTIONS, LES BLOCKCHAINS EN 50 QUESTIONS ‘COMPRENDRE LE FONCTIONNEMENT ET LES ENJEUX DE CETTE TECHNOLOGIE INNOVANTE Si vous vous intéessez au domaine de fauthen- tiation de transactions en ligne at que vous r'9tes pas encore familarisés avec lo concent do bockchain, vous pourez aborder avec ce live leur fonctionnement ainsi que les conséquences de leur usage pour leur utlisatur fe tout au travers de 50 questions qui permettont, comme rindique te sous-titre do Fouvrage, de « comprendra lo fonctionnement et les enjeux de cette technologie inovente ». | + Auteurs : Jean-Gulllaume Dumas, Pascal Lafourcade, Ariane Tichit et Sébastion Varretto + Editeur : Dunod septembre 2018 + Nombre de pages : 296 pages + Parution + Prix: 22,00€ Voici une sélection d ouvrages pour la plupart récemment sortis ou sur le point de sortr et qui ont. attré notre attention, MEMOIRES VIVES Eaton frangaise de « Permanent record », du lanceur dalerte Edward Snowden, qui a été publiée simuitané- ‘ment par 20 éditeurs diférents, de parle ‘monde. Cet ouvrage autobiographique permet de plonger dans les coulisses de la NSAet de la ClAet de comprende les rouages du renseignement américain. I permet, une éniéme fos, dalerter sur les enjeux que constituent les données ‘numériques personnelies et les usages ui peuvent en étre fits, par les entre prises ou les états. + Auteur : Edward Snowden ro) + Parution : septembre 2019 ur: Seuil + Nombre de pages : 464 pages + Prix: 19,00 € wovw.ed-dlamond.com = PYTHON® POUR LA CARTE | micro:bit PYTHON POUR LA CARTE MICRO:BIT La carte BBC micro:bit a 616 lancée en Angleterre en 2016 et permet dntior les collégiens & la program ‘mation, & moindres frais (environ 20 €), Cette carte peut étre programmeée depuis un PC en Python, mais aussi en JavaScript ou encore en MakeCode, un langage « Puzzle » de Microsoft (https:/imakecode. microbit.orgi#). Ce livre se focalise sur le langage Python (la premiere partie présente le langage de ‘maniére sommaire pour les non-développeurs) et sur Ln apprentissage progressif, permettant d'aboutir& des projets complets. Il sagit d'un livre de découverte de la programmation destiné aux lycéens... qui n'ont jamais programmé (un enfant plus joune, sintéres- santa informatique, y trouvera de lintéré) En complément, si le sujet vous intéresse, le livre «40 activités avec la carte miero:bit » de Dominique NNibart, chez le meme éciteur, vous fournira des idées de développements.. traduire en Python, puisque ce demier est orienté MakeCode. + Auteur: Julen Launay + Editeur : Eyrolies + Parution : septembre 2019 + Nombre de pa 1s: 168 pages *Prix : 19,90 € Python _ et les ontologies gr Hl PYTHON ET LES ONTOLOGIES \Vous souhaitez manipuler et construire des ontologies (modéle de données per- mettant d'effectuer des raisonnements ‘automatiques) ? Alors, ce live vous ‘apprendra a utlser le module Owlready2 (https:s/owiready2.readthedocs io!) en Python. Progressivement, en débutant par des rappels sur OWL (Web Ontology Language) et Python, vous accéderez & {es ontologies, avant de pouvoir les créer ‘et les motifer, en bénéficiant de nom- breux exemples pratiques. + Auteur : Jean-Baptiste Lamy + Editeur : ENI + Parution : aout 2019 + Nombre de pages : 310 pages + Prix :54,00€ TE[VIEILIOIPIPIEIMIEIN ENFOUISSEMENT DE DONNEES DANS UN DOCUMENT LIBREOFFICE Tristan COLOMBO Cacher des données dans un document, c’est de la stéganographie [1]. Ici ce qui va nous intéresser, ce n'est pas vraiment de dissimuler les données, mais de les lier a un document LibreOffice pour ajouter des métadonnées. Ces données n’étant utiles qu’a notre usage personnel, nous allons les enfouir pour qu’elles ne perturbent pas nos collaborateurs. ravaillr quotidionnement avec LibreOffice s'apparente un véritable calvaire, tant les styles de paragraphes et de caractéres disparaissent rmystérieusement, aprés chaque sauvegarde. Nous allons essayer dans Cot article d'ajouter des données, sans que celles-ci ne soient vsibles pour les autres utlisateurs de nos documents, mais sans pour autant ajouter un facteur dinstabilté. LLidée ici est d'ajouter un fichier INI contenant des métadonnées et dassocier ce fichier .un document ODT. Ilest bien évident que la structure suivante est a proscrre GNUILINUX MAGAZINE HORS-SERIE N‘105, wovw.ed-dlamond.com cee En effet, cela reviendrait 4 manipuler un répertoire contenant deux fichiers au lieu dun seul fichier: les risques de perte du fichier .meta. ini sont impor- ‘tants et nos collaborateurs ne comprendraient pas ‘nécessairement pourquoi manipuler subitement des répertoires, au lieu de simples fichiers. Nous allons donc nous servir de la structure des fichiers ODT pour y enfouir nos données. La pre- rmiére étape est donc de comprendre le format de es fichiers. 1, STRUCTURE DES FICHIERS ODT Les fichiers ODT, ce n'est un secret pour personne, sont des archives ZIP. Prenons un fichier vide que conque doc. odt et décompressons-le dans un répertoite (les fichiers ne sont pas organisés dans un répertoire et ils pollueraient done notre réper- toire courant): erry corer eee tne coer eer) peer steers! Corererstrd eee preerares eee Fane ae estes pers aay cst \ toolpanel Peeraeast poner erat) Parrwescd fetes or rea pest rrecoe erect! Eesrte ey ercerre ey La structure du répertoire nous montre une grande {quantité de fichiers. Une premiére approche naive pourrait étre de se dire quil suit ajouter notre fichier, de recompresser et que le tour serait ous... 2. ESSAI MANQUE ‘Ajoutons un fichier .meta. ini (sans section, pour rester simple) dans unzip : titre=0h le bel article! tags=Super, Top pages=10 idee=une image en lien avec l'article : https: //www.doc_images. com/logo.png Créons notre archive, sans oublier de préciser & Zip que nous souhaitons que les fichiers cachés Solent incorporés (parametre .) : rrr any adding: .meta.ini (deflated 16%) "Nous vous recommandons de ne pas faire Confiance au conten ou document ftir newboe ot JEIVIEILIOIPIPTE (ME INIT Im: line raste plus qu’a auvrirle dacument avec LibraOfice ? Pas vraiment... Vouverture, vous obtiendrez un beau message derreur, tel que celui présenté en figure 1, page précédente. Done, LibreOtfice verifierit intégrté de ses données ? Pas de trace de checksum, donc peutétre que le ‘nombre de fichiers présents dans l'archive est restrint ? Mais cette hypothese ne tient pas la route, puisque lorsque on ajoute une image, celle-ci est intégrée a larchive dans le répertoire Pictures. Ajoutez donc une image a doc.odt et décompressez-te. Vous verrez apparaitre un fichier du style = oo en pester ree ares extracting: unzip/mimetype Sepaert yp ster eee Ysera Te ey Etsinous recherchons une référence ce fichier (puisquil ny a pas de checksum, il doit bien y avoir une liste de fichiers valides) : ieee ue Noor ner eee ert St cts entry manifest: full-path="Pictures/ meters tee eee elas Bed [Nous nous apercevons que le fichier NETA-INF/mani fest .xm1 liste les fichiers présents dans larchive, en leur associant un type MIME (ici image/jpeg"). Si nous suivons le méme principe, tout devrait se dérouler correctement pour notre fichier .meta. ini. 3. ESSAI TRANSFORME Repartons de notre fichier inal, sans image. Décompressons-e, ajoutons-y le fichier .meta. ini et cette fois, 6ditons le fichier META-INF/mani fest .xnl pour y ajouter une référence & notre fichier = ‘ | Se Cette fois-c, le fichier peut étre ouvert sans probleme, il n'est pas dégradé et sion le décampresse, on retrowve bien notre fichier ! Voyons maintenant comment exploter cela depuis un script (on ne va pas éditer & la main le fichier manifest. xml a chaque fois que Ton souhaiteinsérer des données !). 4, EXPLOITATION DE L’AJOUT DE FICHIERS La premigre chose & faire va étre de choisir un langage. Nous avons vu quil y avait pas mal de manipula- tions de fichiers, donc un script Shell semble tout indiqué. Nous partons done sur du Bash pour notre script ‘add_metadata, prenant en parametre le nom d'un fichier ODT. 4.1 Ajout du fichier .meta.ini Dans un premier temps, nous allons nous contenter d'ajouter un fichier .meta.ini vide set -eo pipefail usage () { Sec "(4)" = "help" |; then ‘echo 'Usage: add_metadata [fields] echo | Ajouite un fichier de métadonnées au fichier Libreoffice Writer’ 10: echo | (extension .odt) a echo | [fields] est un fichier optionnel indiquant 1a structuration du fichier’ a2: ‘echo " cmeta.ini a ajouter. Par défaut c'est le fichier data/add metadata/iniFile. ini" echo! qui sera utilisé.' exit 0 fi La fonction usage() permet simplement dafficher un message daide. Lafonction addMetabata( ) suivante effectue tout le traval. Je vais la commenter au fur et a mesure. addiietadata() ( local dest="${PHD) métadonnées, af [2 "9(2)" J; then struct¥ile="$ HOME} /bin/data/add_metadata/iniFile. ini" else af [ -£ "§(2)" 1 the echo ‘Struct file §(2) activated’ structFile="5(2)" eu echo "Error : struct file $(2) not found or not a regular file" 1>62 exit 2 Sill ny a pas de second paramétre (ligne 25), alors on utlse le fichier de structuration par défaut, en indiquant ‘son chemin absolu dans structFie (ligne 27). Sinon, si le fichier référencé par ${2} existe (ligne 28), alors (on place son nom dans structFie (ligne 30). ¥ création du répertoire temporaire Local tmp _dir=$(mktemp -d -t add-metadata-XXXXXXXX) On crée ensuite un répertoire temporaite dans /‘tmp dont le nom sera de la forme add-metadata-XXXXXXXX (00 00XKKK correspond & des valeurs aléatoires. On s'assure ensuite que le répertore temporaire sera bien det la fin de exécution du programme. Pour cola, on emploie la commande trap qui exécutera rm -rf ${tmp_dir} lors de événement EXIT. ¥ Decompression du unzip "§{1)" -d "$(tmp_dir)" ._file="$(tmp_diz}"/.meta.ini touch "${mata_file}” # Modification du fichier M WF/mani fest xml local line=' " ‘echo "${tmp_dir)"/MBTA-INF/mani fest xml sed ~i "\$i §(1ine)" "§(tmp_dir)"/MBTA-INF/mani fest xml # Recompression du fic! ment du fichier ODT od "${tmp dir)" sip “= "§[dest)" * fichier ODT. (#)" -1e 2]; then if [-£°"$(1)" J; then df [ "$(H#*.)" == todt! J; then addMetadata "$(1)" "$(2)" els ‘echo 'Error : You MUST use a Libre0ffice Writer file with .odt extension’ 1>42 6a. exit 1 I: a else ‘echo "Error : File ${1) not found or not a regular file” exit 1 usage ‘help’ © [6:4 Enfin, le programme principal gére l'appel ala fonction addMetadata( ) en fonction des paramétres qui lui sont transmis, ‘A Fexécution, nous obtenons bien le résultatattendu ; en décompressant le fichier ODT fourit en entrée de ta ‘commande, nous remarquons bien la présence du fichier .meta. ini etle fichier META-INF/mani fest xml. a bien été modifié Mais du coup, que se passe-ta si nous appelons une nouvelle fois la commande sur le fichier doc .odt ? A.chaque appel a add_netadata, nous ajoutons une ligne de référence au fichier .meta. ini dans le fichier manifest. xml ot nous écrasons le fichier .meta. ini ! ly a quelques lignes de correction ajouter & note script Plutot que de vériier la présence « physique » du fichier dans archive, nous allons vérifier si colui-ci est men- tionné dans le fichier META-INF /manifest. xml 19. . 20: lj répertoiz i pacts 21: existsMeta() ( 22. grep ‘manifest: full-path=".meta.ini"’ "§(1)"/META~INF/mani fest. xml > /dev/null 2>61 23: return $(?) 24: } ‘Siune occurrence de ‘manifest: full-path=".meta. ini” est découverte dans META-INF /manifest. xm alors grep renverra 0 et sinon 1, Cette valeur se retrouve dans la valeur de retour de la derniére commande '$7} que nous utiisons en ligne 23, en tant que valeur de retour dela fonction. hier de métadonnées du 43 }" -d "$(tmp_dir)" > /dev/null 2>61 local overwrit if existemeta "$(tmp dir)"; ‘echo 'File .meta-ini exists more "S(tmp dir) "/-meta.ini read -r -p TOverwrite data ? [y/N] " response response=$ (response, , } Iy)$ 11; then La variable overwrite va nous permettre de savoir dans quel état nous nous trouvons, premier ajout de métadonnées ; ‘= 1: écrasement des anciennes métadonnées ; ‘= 2 conservation des anciennes métadonnées. La valeur de cette variable est conditionnée parle test sur existsMeta() de la ligne 56, puis sur la réponse donnée par Iutlisateur la question de la ligne 59 (en ligne 60, ${response, , } permet de convertr tous les ccaractéres en minuscules), : ‘${overwrite)" -eq 0 "${overwrite}" -eq 1]; then local meta_file="§(tmp_dir}"/.meta.ini touch "${meta_file}" ‘media-type="plain/text"/> \$i $(Line}" "${tmp_dir}" /META-INF/manifest..xm1 # Recompression du fichier ODT et rene fichi "ed "$(tmp_dir)" zip “x "S{dest)" * . > /dev/null 2>61 On retrouve ensuite le traitement permettantlajout du fichier . meta. ini ainsi que la modification de META-INF /manifest .xml dans le cas ou ${overwrite} vaut 0. GNUILINUX MAGAZINE HORS-SERIE N‘105, wow: 4.3 Saisi du contenu du fichier .meta.ini Maintenant que nous avons vu que notre systéme état fonctionnel, il faut pouvoir saisir des données & sauvegarder dans le fichier .meta. ini, si nous voulons que notre petit script serve réellement & quelque chose. Rappelez-vous que nous avons décidé de rendre les données récoltées paramétrables depuis un fichier de configuration (par défaut data/add_metadata/iniFile. ini). Ce fichier sera un fichier INI, donc com- pposé sur chaque ligne d'un nom de variable, dun signe égal, puis dune valeur (ci, une chaine de carac- tres indiquant la question & affcher). Voici un exemple de fichier iniFite. ini, Pour interroger Iutlisateur, il va donc falloir parcourir ce fichier ligne a ligne, récupérerles noms de variables (a gauche du signe =) et les questions (8 droite du signe =), puis afficher les questions et récupé- ror las saisios de lutllsatour. Tout ceci sera réalisé dans une fonction createIni() exec 5< "$(2)" while read <é5 line; do local name=$(echo "${1ine}" | cut -d= -£1) local text=$(echo "${1ine}" | cut -d= -£2) local userinput="' read -p "§(text) : " userInput echo "$(name)=${userInput}" >> "${1)" done exec S<é~ ‘ci la dificult vient du fat que Von souhaite lire le fichier $2} tout en lisant les saisies de utiisateur (done avec deux appels & read imbriqués lignes 6 et 10). Pour pouvoir effectuer cette opération, il faut ulliser un descripteur de fichier spécifique pour un et garder le descripteur standard pour autre. Il la ligne § indique ue le descripteur de fichier 5 sera utilisé pour le fichier $2}, la ligne 6 demande a lire sur le descripteur de fichier 5 (<65), et la ligne 13 ferme ce descripteur de fichier. Pour le reste, les données sont découpées suivant le symbole = (option -d= de cut des lignes 7 ot 8) et on récupére la premiére parte (-f1) dans name et la seconde parte (-f2) dans text. Enfin, les données sont ajoutées dans ${1}. Lappe! de cette fonction se fat a la place de la ligne touch "'${meta_file}" de ancienne ligne 71 if [ "${overwrite) overwrite)” socal mete,etleot$ cap dis}*/ meta tat sceatetnd stewen fareye seisineoetiay DEIVIEILIOIPIPIEIMIEIN Aexécuton lest désormais possible 'jouter des métadonnées $ add_metadata doc.odt pee CST EU, TC nse Pree ronnie ent eeg ata cota et rcrzzty eo et ie 4.4 Et si l'on veut extraire des données ? PPouvoir enregistrer des données, c'est bien... nous pouvions fs lire, ce serait mieux { Nous allons done err un sort get_netadata qui prendra en paramétre un nom de fichier et afchera le contenu du fichier <0 métadonnées, si celu-c est présant. Un second script get_articLes prendra en paramétre un nombre 6 pages et cherchera récursivement depuis un répertoire cible les articles contenant au maximum le nombre de pages, passé en parame. {get_metadata va nous permetire de réexploiter les notions mises en pratique dans add_netadata, le code tant assez similaire 4£ ( "${1)" == "help" J; then echo ‘Usage: get_metadata * echo * Agéiche les métadonnées d'un fichier (extension .odt) . # aftichage des nétadonnées # 5(1) + nom du fichier INT 1 displayMetadata() ( printf "$-20s $-50s\n" "Nom" “Valeur” exec 5< "§(1)" while read <é5 line; do Local nane=§ (echo "§{1ine}" | cut -d= -£1) (echo "$(1ine)" | cut -d= ~£2) Printf "§-20s %-50s\n" "$(name}" "$(value)" : # Récupération des métadonnées 31: # $(1) : nom du fichier opr + getMetadata() { eee eee ceeees emer, trap "xm rf $(tmp_dir)" EXIT unzip "$(1)" -d "${tmp_dir}" > /dev/null 2>61 Af ( -£ "$(tmp_dir)"/.meta.ini ]; then displayMetadata "$(tmp_dir)"/.meta.ini else ‘echo "Error : No metadata file in $(1)" 1>62 exit 1 i a6 ("SCH ie T oe § todt' J; then getMetadata "$(1)" ei : echo ‘Error : You MUST use a Libre0ffice Writer file with odt extension’ 1>42 exit 1 fi else echo "Error : File $(1) not found or not a regular file" 1>42 exit 1 fi else usage ‘help’ et La lecture de ce code devrait vous permettre de verifier que vous avez bien compris les explications données. pour add_metadata. Siun point ne parait pas clair, reportez-vous au code précédent, nous sommes dans les memes cas d'utlisation. Passons maintenant & 'écriture du script get_articles. La encore, une bonne partie du code ne nécessite pas d'explications, puisque se rapprochant des codes précédents. set -eo pipefail readonly ODT_PATH="$ {HOME} /Documents” readonly TAG_NAME='pages' Nous définissons deux constantes : 0DT_PATH contiont le chemin absolu vers le répertoire qui sera scanné Ala recherche de documents ODT et TAG_NAME contient le nom de la variable qui sera recherchée dans le fichior .meta. ini. waw-gnatinuxmag.com GNUILINUX MAGAZINE HORS-SERIE N*105 06 Mf ( "$(1)" == "help" J; the: echo ‘Usage: get_articles ' echo * Affiche la liste des fichiers LibreOffice Writer’ comportant des métadonnées indiquant un nombre’ de pages estimées au maximum a .' chage des données fichier ODT de pages while read <65 line; do local name=$(echo "$(Line)" | cut -d= £1) Local value=§ (echo "${1ine)" | cut ~d= -£2) Af [ "$(name}" == "$(TAG NAME)" ]; then Af [ S{value} -le $(3) 1; then PFint£ "$-10s $-50s\n" "§{value)” "$(2)" fi EN done exec S /dev/nul1 2>61 {cj il faut penser & supprimer le fichier meta. ini dont le chemin absolu (dans le répertoire temporaire) se trouve dans ${1}, de maniére & ne pas utliser le fchier .meta.ini dun document précédent, si le fichier ODT courant ne dispose pas de métadonnées. ¥ Récupération du nombre de pages de $(1) # S{1} : nom du fichier 43: # $(2) : nom du répertoire ter ¥ 5/3) : nombre de pages getbata() ( # Decompression du fichie unzip -o "${1}" -d "$(2)" > /dev/null 2>61 if [ -£°"$(2)"/.meta.ini ]; then getPages "$(2)"/.meta.ini "$(1)" "$(3)" 'Notez ici utilisation de foption -0 avec unzip, de maniére a rendre automatique l'écrasement de fichiers tants (puisque fon décompresse tous les fichiers ODT dans le méme répertoire temporaire). 35: # Récupérat niers Libreoffice 56: # $(1) : nombre de pages getarticles() ( # Création du répertoire temporaire local tmp_dir=§(mktemp -d -t get-articles-xx000ax) GNUILINUX MAGAZINE HORS-SERIE N‘105, # Programmation de 1a destruction du répertoire temporaire # en sortie du seript trap "em -rf §{tmp_dir)" EXIT cd $(0D7_PATH) while read -r filename do getdata "$(filenane)" "$(tmp dir)" "$(1)" done < <(find . name **.0dt") La boucle des ligne 66 & 69 va itrer sur le résultat de la commande find . -name "*.odt™. filename va Contenir le nom des fichiers ODT trouvés. ee seoe aT esc ey eee Prrererry ey eee ieee tee te ieret ts Cees CONCLUSION ‘Vous vous demandez peut-étre pourquoi ne pas avoir réalisé toutes ces opération 6 le choix de ce langage aurat pu étrejudicieux pour le traitement des données, m: sn Python ? En effet, ‘également pour dun ef s'assurer d'une compatiillé multiplate-forme. Mais d'un autre cdté, nous multiplions ici les appels a des com- ‘mandes Shell et c'est dans ces concitions que les scripts Shell montrent toute leur puissance. J'ai donc fat le choix du Shell, mais rien ne vous empéche de reprendre le code pour le retranscrire en Python (ou un autre langage) et 'améliorer! | REFERENCE [1] T. COLOMBO, « L'art du camouriage informatique », GNU/Linux Magazine n°182, mai 2015 : https:l/connect.ed-diamond,com/GNU-Linux-MagazinelGLMF-182/L-art-du-camouflage-informatique PATRONI, UN CLUSTER POSTGRESQL SIMPLE ET RAPIDE David BLASKOW COPE Cus CORR eras el a Cora at Ce Ce SST et er ee ee Ue) Bier ene et ed Con eee ais Patroni[f], __Patroni est un fork développé par I peut ailleurs re intégré & quest ce que —_Zalando [2] de Governor, qui votre Kubernetes, en s‘appuyant cest ?Eh lui aussi étaitun outilpermettant sur son ETCD. bien, cest cde mettre en place des clusters toys allons créer un cluster un outilen PostgreSaL arakas sreanes Gatos Python qui va vous permettfe our maintenir état du cluster ——_‘7.4, Comme nous avons évo- de personnaliser des déploie- PostgreSQL, out repose sur ‘qué, Patroni est écrit en Python, ‘ments, pour mettre en place tne base de données clés! du coup, nous utiliserons la ver- vos serveurs de base de don- valeurs, au choix: ETCD, sion 3.4 disponible dans le dépot rnées en haute disponibilité Consul ou Zookeeper. officiel de Centos. CChaque machine composera un nooud de notre cluster. Nous allons exécuter la version 8.6 de PostgreSQL, avec ETCD comme base de données clés/valeurs, Et voici oe que ga va donner Si vous avez Ihabitude dinstaller PostgreSQL, cette partie ne va pas bouleverser vos habitudes ; cependant, Cotte étape est essentiole. "Nous n’allons pas nous occuper de la configuration de PostgreSQL, mais juste de son installation : est PPalroni qui se chargera de la configuration, Jai choisi dutliser PostgreSQL 9.5 qui n'est pas dans les dépdts standards de CentOS, mais qu’ cela ne tionne, nous utlserons les dépéts de PostgreSQL. Etclest on ne peut plus simple : nous allons configurer le dépot via le RPM fourni sur chacun des trois noouds Et maintenant, installons notre serveur SQL toujours sur les trois nceuds (étape que vous pouvez automatiser avec un outil de gestion de configuration, tol que Ansible) Le service est stoppé ot désactivé, nous pouvons donc passer a a sulte, Notre premiére étape va étre de mettre en place un simple cluster ETCD. ‘Le but 6tantici de vous montrerla mise en ceuvre d'un cluster PostgreSQL via Patroni je nventreral pas trés en avant dans la configuration du cluster ETCD, mais vous pouvez aller jeter un cela la documentation officielle (3) Pour la démonstration,jutliserai un serveur ETCD non sécurisé. Bien évidemment, c'est une pratique & ban- rir, d8s le moment ol on n'est plus en mode exploratoire | I sufit pour cela de mettre en place quelques certi- ficats lest aussi tout a fat possible dutliser un cluster ETCD existant, si vous en avez un, ‘Sur chaque serveur, nous pouvons done lancer stallation Voila qui est fait! Il est temps de se lancer dans la configuration. Commengons par éditer le fichier sur chacun des nosuds, Pour le premior ncoud [Nous pouvons maintenant démarrer notre cluster ETCD, en langant le service ETCD sur chaque naoud (pensez aussi activer, parla méme occasion) Verifons maintenant état du cluster Le cluster est en bonne santé et prét a étre le réceplacie de l'état de notre cluster Patroni Patroni nécessite Python. Par défaut, CentOS est installé avec une version 2.7, ce qui ne nous convient pas. Nous allons done installer . et (disponible sur les dépots oficiels Centos) GNUILINUX MAGAZINE HORS-SERIE N‘105, wovw.ed-dlamond.com ‘wwgnulinuxmag.com Une fois installs, je vous conseille de mettre jour pip et ‘Tout est maintenant prét pour installer Patroni. Nous allons installer avec Pip ‘Comme pour le cluster ETCD, les commandes seront & passer sur chaque noeud du cluster, cest encore une fois bien mieux si vous 'automatisez avec un outi de configuration, afin d’éviter les erreurs, de gagner du temps et surtout, de ne pas avoir refaire plusieurs fois la méme chose ! (Que diable, on ne travalle pas dans IT pour faire des choses manuellement !) Pour commencer, nous allons créer le fichier de configuration de Patron’; celui-i peut étre mis rrimporte (0, mais je vous conseille de le mettre dans. Ce chemin n'existant pas, il faut tout 'abord le créer, ot y motte le fichier YAML GNUILINUX MAGAZINE HORS-SERIE N‘105, wovw.ed-dlamond.com ‘Si nous analysons rapidement le fichier YAML ci-dessus, nous avons fen premier lieu, la configuration lée a etted : le namespace, le nom du cluster, ensuite, nous avons la partie Nous permettant de gérer le cluster Patroni via API ensuite, la partie ‘contenant ia partie ‘ ej et enfin, la partie ui elle contient la configuration du serveur PostgreSQL. lutméme, avec la dofinition de 'tlisateur pour la réplicaton (ainsi que de son mot de passe) ot le superadmin. waw-gnatinuxmag.com GNUILINUX MAGAZINE HORS-SERIE N‘105. La partie tags, quanta alle, donne des informations de configuration pour Patroni "Nous y sommes presque, il ne nous manque plus qu’a créer 'arborescence ol se situera notre serveur PostgreSQL. SSi vous avez bien remarqué, nous avons indiqué dans le fichier de configuration Patroni : cest ce ui va déterminer ol placer les fichiers du serveur Postgres, et donc ici Enfin, pour démarrer notre cluster, il va falloire faire & la main (encore, ou & la manivelle, au choix) sures tuois noouds, via la commande Mais ce n'est pas trés pratique, et catastrophique au niveau opérationnel : que se passer redémarre ? sile nooud Pour faire les choses bien, nous allons fae en sorte que notre Patroni soit géré par Systemd et on aura beau dire, mais Systemd nous rend la vie bien plus simple pour la création d'un service. “Tout ce dont nous avons besoin est d'un simple fichier positionné dans explication de la création dunt Systemd sort quelque peu du cadre de cet article, mais deux choses ici sont importantes il est préférable que Patroni démarre apres ETCD fet que le service Patroni soit démarré avec utlisatour GNUILINUX MAGAZINE HORS-SERIE N‘105, wovw.ed-dlamond.com Rapide reload systemd pour que cette nouvelle unit soit prise en compte Et maintenant, nous pouvons démarrer proprement notre cluster en tant que service Le cluster a bien démarré, nous pouvons voir ii que la machine sur laquelle nous nous trouvons est un nooud secondaire, et que celui suite leader. JJetons un ceil notre noeud primaire Tout semble bien : notre cluster est up and running \ol il ne nous reste plus qu'a placer notre cluster PostgreSQL. derrre un foad balancer, Une des choses intéressantes de Patroni, c'est son API. Cette API va nous permettre, par exemple, de déterminer quel est le noeud primaire, ou encore d'etfectuer un failover, de sort un nosud du cluster (pour une quelconque maintenance, typiquement la mise a jour du SE), ote Pour interagir avec API, nous avons deux méthodes Curl (out! devenu indispensable & quiconque interagit avec une API) ; Patronict (le CLI développé pour Patroni) Via Cur, nous allons pouvoir déterminer le noeud primaire ts simplement, carle naeud primaire répond par lun code HTTP/200, alors que les nceuds secondaires répondent par un HTTP/S03, Et maintenant, sur le nooud primaire Ce simple test est le health-check de base pour mettre notre cluster derriére un load balancer. Il est aussi tout fait possible de changer la configuration de Patroni via curl grace a ‘Commengons paar regarder notre configuration Essayons d'augmenter notre nombre maximum de connexions Et voila! Rien de plus simple, comme vous pouvez le voir. Patronict!estutitaire qui, comme son nom Iindique, va nous permettre de contréler notre cluster Patron Pour utiliser iva nous fallor installer un binaire python supplémentaire via Pip Uslisons pour verifier 'état de notre cluster, par exemple Essayons maintenant de basculer le Leader sur le second nceud La bascule est instantanée ! Et comme précédemment avec curl, il est possible ’éiter la configuration a la volée Par sa simplicité, sa facilité de mise en couvre et de maintenance, Patroni est pour moi un choix adapté pour la ‘mise en place d'un cluster PostgreSQL en hauite disponibilit, De nos jours, API est un atout sans pareil et dune précision étonnante, et elle vous permettra une fois votre Cluster en place de le gérer sans aucun accroc. Cet article n'est bien évidemment qu'une mise en bouche, mais ‘espére quil va vous donner envie d'appro- fondir ce magnifique produit, et de Iuliser dans vos différents projets! Documentation Patroni https:lipatroni.readthedocs.olenilatest Gitkiub Patroni par Zalando https:/igithub.com/zalandoipatroni Documentation officielle CoreOS ETCD hitps:llcoreos.comletedidocsilatest! GNUILINUX MAGAZINE HORS-SERIE N‘105, wovw.ed-dlamond.com N°106 Nov. / DEC. 2019 DELA ‘CYBERSECURITE LE MAGAZINE Y (ve ET DEFENSIVE OFFENS! r Preto ch ez votre marchand de journaux et sur www.ed-diamond.com 4 ’ il ee fevOps :« (..) un mouvement en ingéniere informatique et tune pratique technique visant a unification du développe- ‘ment logiciel (Dev) et de ‘administration des infrastructures informatiques (Ops), notamment Fadministration systéme. », apres Wikipédia, Dans le dossier de ce numéro hore-séria, nous nous sommes consacrés aux buts utiles aux développeurs (‘ou ailleurs le tire de « Botte & outils»). Les artcies présentés sinscrivent dans la mouvance DevOps sans pour autant resterfocalisés sur les outls phares que sont Docker, Torraform, Prometheus ou encore Ansible, Nous nous trouverons un peu plus du cBté Dev que du cbté Ops... une sorte de DEVops (d'un point de vue marketing, il est toujours bien vu dintroduire de nouveaux termes ! Attention toutefois la casse...). Nous aborderons ainsi plusieurs thématiques = «= Le Shell peutil venir en aide aux développeurs ? Il existe pléthore de ‘commandes en Shell et, parmi elles, certaines peuvent s'avérer particullé- rement utiles pour le développement. Nous passerons quelques-unes de calles-cien revue. «= La compilation de code avec Cmake. Comment utiiser correctement cet ‘= Un point crucial du développement : la gestion des versions concurrentes 04 versionning. Nous aborderons le cas du gestionnaire de révisions dis- tribué le plus connu, Git, sous un angle original en nous mettant tour 3 tour dans la peau d'un développeur amateur, dun développeur meter pus dun développeur chevronné. «= Lautomatisation des tests grce integration continue (Cl). Nous pré- senterons deux outils permettant de mettre en place une Cl : CireleCl et ‘Au programme donc deux thémes plus Dev et deux themes DevOps, nous ‘sommes bien sGr du DEVops et sur quatre thémes incontournables ! En dehnors du petit jeu de majuscules sur le terme DevOps, force est de consta- ter que nous aurions tout aussi bien pu aborder ce hors-série sous le seul titre de « Botte & outls du développeur » sans plonger avec allégrosse sur emploi d'un buzzword qui est de plus en plus souvent éloigné de sa definition originale. Regardez les ofres d'emploi: lorsque les entreprises recherchent un DevOps, elles recherchent un profil « bouche-trou », & qui on pourra demander de faire un peu n‘importe quoi. Originelement, le terme DevOps visait a définir le rapprochement des Dev et des Ops dans le cadre «un travail en équipe pour atteindre un objectf commun, réalisé & grands coups ¢'automatisation... ce qui est fialement le but de toute personne tra- vallant sur des ordinateurs | Ce dossier est done pour vous les Dev, les Ops... en fait les informaticiens ! Bonne lecture ! Larédaction | 010101100101100111103 ef “ oe, <> DU SYSADMIN AU DEV: = DES COMMANDES - _ SHELL POUR LES =>" DEVELOPPEURS Tristan COLOMEO «@ Shell rest pas réservé aux administrateurs systéme. Bon nombre de commandes sont tras utiles dans le cadre d'un développement : des commandes peu connues, mais également des Ccommandes trés basiques que tout informalicien, quel que soit son domaine expertise, devralt connattre. Dans cet article, nous commencerons par un rappel de ces commandes élémentaires, avant d'aborder des commandes moins connues. 1. LA BASE DE TOUT La toute premigre commande, celle sans laquelle on ne peut absolument rien faire, est bien entendu man ! 1.1 La commande man Pour obtenir la documentation sur une commande, il faudra employer man (pour manual suivi du nom de la ‘commande. Et pour comprendre comment fonctionne la commande man, iln'y @ qu'a appeter man Une page de manuel se compose des sections suivantes = NAME : Contient le nom de la commande, suivi d'une courte description de son utiité. Par exemple Nom peer oe ee eee eee ees '= SYNOPSIS : Indique comment utliser la commande. Une convention s'applique pour représenter les infor- ‘mations dans ce champ. La page de man de man nous dit : ere eee eer erty eee teC ME ETL SUC etre arts ss oot] esol ee ce eerste -al-b eee eeae ce eC ee ear tary Pisseer eeapre steer ae ped Pe eae 2d cc toute l'expression située a l'intérieur de [ } Poa Voici un exemple de synopsis pour: Bnased man [-C file] [-d] [-D] [--warnings[=warnings}] [-R encoding] Cee OMe t eo eC SMe omen orc mates feeb eC ee eee) [-u] [--no-subpages] [-P pager] [-r prompt] [-7] [-E encoding] [--no- erst encceetrisestrtst Me stc Mes mec cece sme corr soB fete rsep) = DESCRIPTION : Contiont la description longue de ce que fait la commande. C'est généralement la section la plus longue de la page de man et on y trouve le détail des différentes options autorisées Dad Parfois, les options sont regroupées dans une section spéciale OPTIONS. C’est par exemple le as pour la page de man de man, méme si en général les options sont listées dans DESCRIPTION. ‘= EXEMPLES : Cette parte n'est pas toujours présente, mais elle est bien utile, car elle présente des cas application de la commande. Prenons lexemple du man de la commande t evan Con Baro a ee see esc east fee ees renee tare Tes ‘= CODE DE RETOUR : Comme son nom Iindique, vous trouverez dans cette partie la liste des codes de retour ullisés par la commande. Trés ulle pour trater les erreurs depuis un script! Eeeeeern eee etd Pia Ons ee CUM esc re ee eee ecorst etsy Peeea tree artes Cet eee esc rete oe ecco see) 16 Au moins une des pages ou un des fichiers ou un des mots: Seer rea Dray La présentation des pages de man peut étre un peu austére. Si vous souhaitez obtenir des pages colorées, définissez comme commande de lecture most dans le fichier de configuration een Cee te a ee ees waw-gnatinuxmag.com GNUILINUX MAGAZINE HORS-SERIE N*105 ‘Meme sila plupart du temps, on utlse man sans option, i faut savoir que pour chaque page de man, il existe des sections Serer eee err er neers ee eee ear rs ies eters ere ee ee Cee eee Ee Cee ere eed foot) Peter eco e oe eer) Eee ssecc te eerste eet ee COR Sten orton Peg) Ce Ctr Care 5 Formats des fichiers et conventions. Par exemple /etc/passwd A Co eC CeCe enc ECU S2A0) ORC Cee eC COM eC eo Preeteseereretrs) ee eee el) Toutes ces sections ne sont pas nécessairement remplies et lors de fappel de man sans option, a commande va rechercher et aficher la premiére page, en fonction de Fordre prédéfini dans le fichier /etc/ c Par défaut, cat ordre est défini comme suit 111: SECTION 1 n 1 8 3 2 3posix 3pm 3perl 3am 5.4967 Ans, sila page de manuel 1 contient des informations, les autres pages seront ignorées, Prenons exemple dela commande feces SLEEP (1) Cre SUEEP(1) ort SO ee rece ee tere ean er eae Tere etry Perased Ses aT PSPeR csr Cette commande est équivalente & man sLeep..1, puisque nous afficnons la section 1. Par contre, sinous ssouhaitons des informations sur la fonction sLeep() pour coder en C, nous ne pourrons pas y accéder en tapant simploment man sleep. Il faut préciser que nous souhaitons accéder a la section 3 ery SLEEP (3) eC et ae Te) NAME PS Ce eas Ore eae rrr 2c eee eed SYNOPSIS Pree eres SIRE UCC cc Senet ec ee arr icrt sy} MOSSOER ‘Done, suivant que vous souhaitiez développer un script Shell ou programmer en C, il faudra préciser la section 1 oul section 3 Con eC Cu enna Peers rst time (7) See eco eee ans romereeetete time (2) Bee ePaeL Oo) cere eran eae n est done trés utile si fon connat le nom de la commande, dans le cas contraire, il faudra passer d'abord par apro} 1.2 La commande apropos La commande apropos va rechercher dans le nom et la description des pages de man laccurrence d'un param@tre transmis par utlisateur ees sleep (1) Endormir un processus pour une durée déterm: clock_nanosleep (2) - high-resolution sleep with specifiable clock nanosieep (2) high-resolution sleep rtowake (8) enter a system sleep state until specified Saree sleep (3) Ste eee ere sec ete eae eed sleep.conf.d (5) Eee iner in rreeenter ieentsD ee tStnwr sary Une fois la commande trouvée, i n'y a plus qu'a invoquer man sur la bonne section (elle est indiquée entre parenthases aprés le nom de la commande, dans la sorte d'apropos). Taig Cette commande peut étre utilisée pour afficher toutes les sections disponibles pour une page Pe So en LG crac) eee ecco eee ee eS ears eneerentetery time (2) Seeger eee cy time (3am) Bxoeeseererie ears waw-gnatinuxmag.com Pour rechercher des fichiers dans 'arborescence, on ullisetradtionnelle- ‘ment la commande find avec la syntaxe find -name “". Par exemple, pour retrouver tous les fichiers LibreOffice Writer dont le nom commence par doc_ et qui se trouvent dans le répertoire /hone/Login/Work : (On retrouve bien sdr toutes les options permettant de cibler les fichiers par ‘apport a leur talle (-size), leurs droits d'accés (-perm), le laps de temps relatif au dernier acces au fichier (-amin, ete LLoption -exec permet ensuite d'exécuter une commande sur les fichiers renvoyés, Par exemple, pour effacer tous les fichiers compressés en zip pré= ‘sents dans l'arborescence, depuis lerépertoire courant. ‘ind est donc trés complet et comme il est aussi trés connu, je ne m'éten- ral pas plus longtemps dessus, un man find vous apportera toutes les. Informations manquantes concernant les différentes options offertes, pour ible es fichiers. Une autre commande de recherche de fichiers est bien pratique : Locate. ‘Son fonctionnement est ditférent de find, puisqu'elle recherche les occur ‘ences des fichiers dans une base de données... uil faut done mettre a jour réquliérement | ‘Locate niest pas présente par défaut et i faut donc installer. Surles sys- temes basés sur Debian, ce sera Vous disposerez alors bien entendu de la commande Locate, mais égale- ‘ment de la commande updatedb permettant de mettre a jour la base. Lors du premier appel d'updatedb, la commande est nécessairement longue, puisquielle dot indexer ensemble des fichiers Mais une fois que celle-ci a terminé son travail, es résultats sont immédiats. Reprenons lexemple précédent avec la recherche des fichiers LibreOtfice Writer, dont le nom commence par doc_ Ets vous voulez vous restreindre & un répertore de départcible comme /hone/Login/Work, il vous suffra de le spécifier dans la chaine de recherche GNUILINUX MAGAZINE HORS-SERIE N‘105. MOSSOER ee Notez que le résultat sera le meme qu'en uti a oan | ee Etjustement, puisque nous parions de grep, voll une troisiéme commande de recherche de fichiers parti- culiérement utle pour le développeur, puisqu'elle permet de rechercher du contenu a rintérieur des fichiers 1 Pour ma par, jutlse toujours la syntaxe suivante: grep =r --color -n -i -F "crecherche>" *.Les options ullisées effectuent le travail suivant: ss +1: recherche récursive ; ‘color: affichage en couleur (les mots de recherche trouvés sont affchés en rouge, les noms de fichiers fen violet, les numéros de ligne en ver, etc). ‘= =i: afchage des numéros de ligne ; 1= +4: ignore la casse (ne fait pas de distinction entre caracléres majuscules et minuscules) ; ‘= +F :interpréte la chaine comme une chaine de caractéres normale et non une expression régulire. Ceci permet de rechercher les caractéres employés traditionnellement dans les expressions réqu: ligres comme *, $, etc. Par exemple, la commande grep sans option -F va nous permettre de faire une recherche du terme import en début de ligne : ee ee Presser eee La méme commande, dans le méme répertoie, avec Foption =F ne donnera pas le méme résultat (elle ne trouvera la présence du motif dans aucun fichier) : Ee 1.4 Diff LLorsque l'on développe, il peut étte interessant de comparer le contenu de deux fichiers (par exemple, deux fichiers générés par un script avant et aprés une modification). La commande diff réalise cette tache ts ‘implement. Prenons deux fichiers d'exemple. fichier_1.txt contient : Ceci est un fichier d'exemple contenant quelques données 125 ;34;65 45; Le second fichier, fichier_2.txt, contient: Ceci est un fichier d'exemple contenant des données = 125;36;65; 35;6:9; MAGAZINE | FRANCE = cs ae CREEZ VOTRE PREMIERE APPLICATION KGHAIN) << Perera POURQUO! REMPLACER PPro cdi Pr oh Lida TYPAGEEN PYTHON : MYPY ‘ =" sa ; f UARKUS ETAUSSI... ead pS Pye aad AVEC cies chez votre marchand de journau et sur www.ed-diamond.com | Can I iosque sur www.ed-diamond.com Smee eee eec ei Reet) by) » Vous l'avez raté ? Vous avez une deuxiéme chance |! ra, ie 8 ar aS CTS as A nouveau disponible chez votre marchand de journaux et sur www.ed-diamond.com

Vous aimerez peut-être aussi