Image for post
Image for post
Aéroport de Lyon.

Unix (ou bash) pour journalistes

Quelques commandes de l’antique système d’exploitation pouvant s’avérer utiles à des fins journalistiques en ce début de XXIe siècle

Jean-Hugues Roy
Sep 15, 2016 · 20 min read

Toutes les commandes décrites dans cette page fonctionnent si vous vous servez d’un ordinateur disposant du système d’exploitation Linux, sinon en ouvrant l’application Terminal sur un ordinateur fonctionnant sous MacOSX.

Dans un objectif d’éducation inclusive, pour tenir compte des personnes qui utilisent un ordinateur fonctionnant avec le système d’exploitation Windows, les commandes décrites ici peuvent également fonctionner, mais seulement si vous installez Linux dans votre ordi. Les instructions sont décrites sur le site officiel de Microsoft. Ça ne marcherait, selon ce que j’ai compris, que sous Windows 10. Si vous avez une version antérieure de Windows, je vais tâcher, lorsque c’est possible, de vous donner les commandes équivalentes sous PowerShell.

Dans le web, vous trouverez plusieurs sites qui donnent les traductions entre les commandes Unix (Linux, bash) et PowerShell.

Pour faire certains des exercices du tutoriel ci-dessous, veuillez télécharger le fichier compressé que j’ai préalablement préparé ici (http://bit.ly/matosunix2).

J’ai baptisé ces fichiers de travail «matosunix». Décompressez-les et téléversez l’ensemble dans un répertoire de votre choix sur votre ordi.

Dans Visual Studio Code, ouvrez une nouvelle fenêtre (-N), cliquez sur «Open folder…»

Image for post
Image for post

Et choisissez le répertoire matosunix que vous venez de télécharger. Une fenêtre s’ouvre. C’est votre espace de travail.

Ouvrez ensuite un nouveau terminal. Un panneau devrait apparaître dans votre espace de travail dans laquelle vous devriez voir une ligne se terminant par le caractère $ ou > suivi d’un curseur.

C’est ce qu’on appelle l’invite de commande, ou «prompt».

Voilà! On est prêt(e)s!


whoami

Qui suis-je? En fait, la commande whoami vous donne votre nom d’utilisateur sur votre ordinateur. Pratique pour faire des vérifications si vous partagez votre ordi avec d’autres.

pwd

Où suis-je? La commande pwd permet simplement d’afficher le chemin («path») à partir de la racine («root») du répertoire dans lequel vous vous trouvez en ce moment.

<flèche vers le haut>

Vous avez peut-être remarqué que mes commandes apparaissent très rapidement. Pour faire réapparaître la commande que vous venez tout juste d’exécuter, ou une commande que vous avez entrée dans le passé (il est possible de remonter passablement loin), vous n’avez qu’à appuyer sur le bouton flèche vers le haut de votre clavier.

Si vous reculez trop loin, la flèche vers le bas vous permet d’afficher la commande suivante que vous avez entrée.

<ctrl-z>

Pour interrompre une commande qui prendrait trop de temps à s’exécuter, vous pouvez taper ctrl-z afin de vous retrouver à l’invite de commande.

cd

La commande cd, qui signifie change directory, peut sembler ridicule, mais avant l’invention de la souris et des fenêtres, c’était la façon de naviguer dans les différents répertoires se trouvant sur un ordinateur.

Il vous suffit donc de taper cd suivi du nom du répertoire dans lequel vous voulez entrer.

Pour revenir en arrière et remonter d’un niveau, il faut ajouter deux points après cd (deux points, l’un après l’autre, comme ceci: ..; et non un deux-points, comme cela: :)

Si on veut éviter d’entrer plusieurs fois la commande cd, on peut aussi indiquer un chemin plus complet si on le connaît :

Et dans ce cas-ci, on pourrait revenir au répertoire «matosunix» en entrant deux fois les deux points, séparés par une barre oblique.

On peut même effectuer un aller-retour dans la même commande. Ci-dessous, on passe directement du répertoire journaux/jdem au répertoire facebook en passant par le répertoire «parent» (matosunix) :

Sur un ordinateur Mac, il est possible d’éviter de devoir taper plusieurs commandes cd en faisant un ctrl-clic sur le répertoire dans lequel vous voulez vous rendre et en choisissant le menu Services > Nouveau terminal au dossier. Une nouvelle fenêtre de terminal s’ouvre alors et vous vous retrouvez dans le répertoire en question.

Image for post
Image for post

ls

La commande ls permet d’afficher le contenu du répertoire dans lequel vous vous trouvez. Par défaut, le contenu s’affiche par colonnes et dans l’ordre alphabétique. Dans PowerShell, cette commande pourrait devoir être remplacée par dir, pour «directory».

On peut cependant ajouter des options aux commandes Unix. Ces options commencent toujours par un ou deux traits d’union.

Ainsi, ajouter -l à ls permet d’effectuer un affichage détaillé du contenu de votre répertoire.

Il y a une multitude d’options disponibles pour la commande ls. Vous pourriez souhaiter ordonner les fichiers en fonction de leur taille en octets, par exemple. C’est l’option -S qui permettrait de le faire (et la casse [majuscule ou minuscule] est importante dans ces options).

On peut aussi combiner les options. Si on ajoute -Set -l à la commande ls, on obtient un affichage détaillé ordonné en fonction de la taille des documents.

Notez qu’on peut aussi coller les options lorsqu’on en utilise plusieurs. Ainsi, au lieu d’écrire -l -S, on peut écrire -lS ou -Sl.

man

Pour en savoir plus sur une commande donnée, lisez-en le manuel en invoquant la commande man. Pour connaître toutes les options de la commande ls, par exemple, vous tapez man ls. C’est malheureusement affiché en anglais. Il faut aller sur le web pour trouver des versions françaises de ces manuels.

L’option -h (pour help) ou encore , peut également être utilisée avec certaines commandes pour faire afficher une version abrégée du manuel.

mkdir

On peut créer, au besoin, des répertoires avec la commande mkdir (make directory).

On peut créer plusieurs répertoires en enchaînant tout simplement leurs noms séparés d’un espace.

rmdir

Pour détruire un répertoire, c’est la commande rmdir (remove directory)

rm

Je vous parle de rmdir, petite sœur de la commande rm (remove), parce qu’il faut faire très attention avec cette commande et ne l’utiliser qu’avec parcimonie. Je vous la mentionne pour que vous la connaissiez et la fuyiez comme la peste. Entrer la commande ci-dessous, par exemple, efface tout votre disque dur sans même vous demander auparavant si vous souhaitez réellement faire ça. Pas de yes, no, cancel. Pas de undo non plus. C’est irrémédiable.

Image for post
Image for post

Attention, donc, si vous tombez sur une page web qui vous propose d’entrer une commande comme ça. Quelques autres commandes mortelles à éviter absolument sont décrites dans la page suivante du site Howtogeek :

head et tail

Les commandes head et tail sont très pratiques pour avoir une idée de ce que contient un très gros fichier que les logiciels habituels (notre traitement de texte ou notre tableur, par exemple) seraient incapables d’ouvrir. Par défaut, head affiche les 10 premières lignes du fichier, tail les 10 dernières.

Parmi les fichiers fournis se trouve guns.csv. C’est une copie du registre fédéral des armes à feu obtenu par La Presse en 2014. Il pèse plus de 950 Mo et contient plus de 8 millions d’enregistrements. Impossible de l’ouvrir avec un tableau. La seule manière d’avoir une idée de son contenu est d’utiliser head ou tail.

La commande tail vous permet de voir que le fichier contient des infos sur 8016808 armes à feu très précisément.

L’option la plus utile avec head ou tail est -n. Elle vous permet de changer le nombre de lignes que vous faites afficher si vous avez besoin d’en voir plus (ou moins) que 10. Ainsi, pour n’obtenir que les entêtes d’un fichier csv, vous n’avez qu’à ajouter l’option -n 1 à la commande head.

Sous Windows, il est possible que ces deux commandes ne fonctionnent pas… Selon ce site, la commande tail -n3 <nom de fichier> donnerait les trois dernières lignes dudit fichier.

wc

Pas de blagues, désolé: cette commande signifie simplement word count. Par défaut, elle vous donne trois choses: le nombre de lignes, de mots et d’octets dans un fichier donné.

Si on veut le nombre de caractères que contient le fichier, il faut invoquer l’option -m.

Si on veut seulement afficher:

  • le nombre de lignes, c’est l’option -l;
  • uniquement le nombre de mots, c’est l’option -w;
  • et si on ne veut que le nombre d’octets, c’est l’option -c.

Si on souhaitait que wc nous donne des informations sur les 100 fichiers contenus dans le répertoire facebook, on pourrait répéter l’opération 100 fois. Ce serait fastidieux.

Heureusement, on peut procéder plus rapidement grâce au caractère de substitution qu’est l’astérisque. Cela permet d’effectuer la recherche dans tous les fichiers de notre répertoire se terminant par une extension donnée (.csv, par exemple). Et wc nous calcule des totaux par-dessus le marché!

Sous PowerShell (Windows 10), la commande Measure-Object est l’équivalente de wc.

cat

Non, ce n’est pas une commande qui fait miauler votre ordi. Elle vient du mot concaténation. Elle permet d’interagir avec des fichiers texte. La commande cat est surtout utile pour joindre plusieurs fichiers en un seul. Il suffit d’écrire le nom de tous les fichiers qu’on souhaite réunir et, après le caractère >, d’inscrire le nom du nouveau fichier qui naîtra de la réunion qu’on souhaite effectuer.

Par exemple, je vous ai fourni, dans le répertoire «martino», deux fichiers des chroniques de Richard Martineau accessibles dans le web. Le fichier martino1.csv contient l’url, la date de publication, le nombre de caractères et le texte de ses chroniques publiées entre le 1er janvier 2010 et le 31 décembre 2014. Le fichier martino2.csv contient la même chose, mais pour ses chroniques publiées entre le 1er janvier 2015 et le 30 avril 2019.

Il serait plus utile que toutes les chroniques soient réunies en un seul fichier. Pour ce faire, vous pourriez ouvrir Excel ou un autre tableur et de faire un copier-coller qui pourrait être long. Mais vous pouvez aussi régler ça en une ligne dans votre terminal.

On voit que le nouveau fichier fait environ 9,7 Mo, ce qui correspond à la somme des deux autres.

grep

On arrive dans les commandes plus hardcore. Toujours dans le cas où vous tombez sur des fichiers trop énormes pour être ouverts facilement par les suites bureautiques habituelles, la commande grep vous permet d’y faire des recherches sans heurts.

Dans PowerShell, grep peut être remplacé par select-string.

Son nom vient de cette phrase en anglais : globally search a regular expression and print it. Il suffit dont d’indiquer quelle est l’expression qu’on cherche et grep nous retourne toutes les lignes où cette expression est présente dans notre fichier.

On va se rendre dans le répertoire facebook pour demander à grep, par exemple, de retrouver toutes les occurrences de la chaîne «UQAM» dans le fichier posts-urbania.csv (je ne reproduis pas tout, car ce serait trop long):

Et si on ne souhaite pas afficher tout le contenu des lignes? On veut simplement avoir le nombre de lignes dans lesquelles le texte qu’on cherche se retrouve. C’est possible avec l’option -c(pour count). Ainsi, il y a 6 lignes dans lesquelles on retrouve «Laval» dans le fichier posts-urbania.csv.

Comme avec wc, on peut se servir de l’astérisque pour effectuer la recherche dans tous les fichiers d’un répertoire donné se terminant par .csv. Ainsi, on pourrait se demander, dans le quelque demi-million de posts qu’on retrouve dans les fichiers du répertoire facebook, combien mentionnant Xavier Dolan.

Si on souhaite utiliser grep pour rechercher dans des fichiers se trouvant dans plusieurs répertoires différents, on peut se servir de l’option -r. Elle permet de faire une recherche récursive qui fouille dans tous les sous-répertoires se trouvant dans un répertoire donné.

Ainsi, on peut faire la même recherche et l’appliquer à l’ensemble du répertoire journaux. Dans ce cas-ci, il faut simplement lancer notre commande grep à partir du répertoire parent.

Il faut cependant savoir que grep est sensible à la casse. Ainsi, si on souhaite rechercher le nombre de fois où l’expression «Québec» avec toutes les graphies possibles («Quebec», «québecois», etc.), il faut ajouter l’option -i, qui rend la recherche insensible à la casse :

Il est également possible de faire des recherches avec des expressions booléennes (ET, OU) avec grep, mais les opérateurs sont un peu barbares (les informaticiens des années 1970 devaient en fumer du bon).

Pour rechercher une expression ou une autre, l’opérateur à utiliser est \|. Ainsi, si on se demande combien d’articles traitent de Trump ou de Justin Trudeau, voici la commande qu’il faudrait entrer:

Pour rechercher une expression et une autre, l’opérateur est .*. Donc, pour rechercher dans combien de lignes Trump et Poutine sont mentionnés, voici la commande à entrer:

Mais il faut savoir que cette recherche ne nous donne que les lignes où Trump est mentionné avant Trudeau. Si on inverse leur ordre, on a des résultats qui peuvent être différents:

Il faut donc, pour s’assurer d’avoir tous les cas,combiner les deux requêtes avec une commande ressemblant à ceci:

Il peut arriver qu’on souhaite identifier les lignes où une chaîne de caractères donnée ne se trouve pas. On utilise alors l’option -v. Combinée avec l’option -c, elle permet de voir dans combien de chroniques Richard Martineau n’a pas utilisé le mot «islam» depuis 2010 (avoir avoir compté le nombre de chroniques où ce mot s’est retrouvé).

Maintenant, vous vous souvenez que les deux lettres du centre dans grep signifient «regular expression», ou regex. Mais qu’est-ce que ça mange en hiver, une regex?

D’abord, on retrouve différentes traductions de regular expression en français. Termium propose «expression normale». Le Grand dictionnaire terminologique suggère plutôt «expression rationnelle». Évitez «expression régulière».

Pour reprendre la définition du GDL, une expression rationnelle est un «motif constitué d’une chaîne de caractères spécifiant des conditions à remplir lors d’une recherche effectuée dans un éditeur de texte, et qui correspond à la chaîne recherchée». Ça va devenir clair avec un exemple.

Imaginons que vous souhaitiez chercher, dans un document, toutes les mentions des années 1980 à 1989. L’expression suivante compte le nombre de fois que l’on retrouve «en 1980», «en 1981», «en 1982» et ainsi de suite dans les titres du Journal de Montréal durant les années 2010.

Les possibilités sont quasi illimitées. Si vous souhaitiez, par exemple, chercher dans tous les fichiers du répertoire facebook pour repérer tous les mots de plus de 35 caractères (pour détecter des erreurs, par exemple, ou la fois où un média a publié un post à propos de la localité de Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch), voici ce qu’il faudrait entrer :

Bref, pour en savoir plus sur les expressions rationnelles, l’outil regex101 est parfait pour s’exercer.

curl

La commande curl permet d’interagir avec des documents sur le web. C’est ainsi que son équivalent dans l’univers Windows est Invoke-WebRequest.

À la base, elle sert à effectuer des téléchargements. Ainsi, la commande ci-dessous télécharge le code source du site web de l’École des médias de l’UQAM et le copie dans un fichier appelé edm.html.

Bien sûr, on pourrait accomplir exactement la même chose à partir de notre logiciel fureteur. À quoi bon se servir de curl, alors? Je l’avoue, cette commande m’a rarement servi. Elle peut cependant être utile si on veut faire des recherches de type grep directement dans des pages web. Un exemple?

La commande ci-dessous combine un curl et un grep à l’aide du caractère appelé pipe en anglais et représenté par une ligne verticale |. Elle repère les occurrences du mot Noël lors de la dernière journée de débats à l’Assemblée nationale en 2019.

Bien entendu, il suffirait d’ajouter l’option -c pour ne compter que les occurrences du même mot.

Il est également possible, avec ce truc, de faire des recherches sur plusieurs pages web en même temps. Pour cela, il faut auparavant écrire la liste des URLs qui nous intéressent dans un document texte. Le document assnat.txt contient les 18 pages web de la retranscription des débats à l’Assemblée nationale au cours des mois de novembre et de décembre 2019.

La commande ci dessous dit à curl de lire le fichier assnat.txt, puis d’aller chercher le contenu de chacune des pages web dont ce fichier contient l’adresse, de mettre tout ça dans une variable et enfin d’utiliser grep afin d’y compter le nombre d’occurrences du mot UQAM.

Le résultat de la commande affiche une barre de progression pour chacune des pages web consultées à l’aide de l’option -# de curl et nous dit, à la toute dernière ligne, que le mot UQAM n’a été prononcé que quatre fois au cours des mois de novembre et décembre 2019 à l’Assemblée nationale.

wget

La commande wget est comme un curl sur les stéroïdes. On la présente parfois comme un aspirateur du web. Elle permet plus facilement de télécharger plusieurs documents se trouvant sur une même page, voire l’ensemble d’un site web en entier. Avec le PowerShell de Windows, vous pouvez aussi vous servir de la commande Invoke-WebRequest.

Admettons que vous ayez besoin de télécharger tous les documents PDF de l’évaluation environnementale d’un gigantesque site d’enfouissement de la région de Montréal. Vous pourriez les télécharger un à un, ce qui vous exposerait à la tendinite puisqu’il y a plusieurs dizaines de documents!

La commande wget peut vous permettre de les télécharger tous en une seule ligne de code:

Plusieurs options sont à l’œuvre, ici. L’option -r fait une recherche récursive, plus complète. L’option -np (no parents) dit que le contenu des répertoires «parents» situés au-dessus de celui qui est précisé dans la commande ne nous intéressent pas. Et l’option -A.pdf dit à wget de n’accepter que les fichiers se terminant par l’extension .pdf.

Voici un autre exemple de l’utilisation de cette commande pour télécharger des fichiers en vrac.


Autres commandes pour s’amuser

cal

Vous affiche le calendrier du mois en cours.

Vous pouvez voir toute une année en faisant suivre la commande par l’année qui vous intéresse. Ou afficher un mois dans le passé en entrant le numéro du mois suivi de l’année (voici l’affichage tel que le rend mon ordi pour montrer qu’Unix parle aussi français):

say

Ne fonctionne qu’avec un Mac doté de synthèse vocale, cette commande fait en sorte que l’ordinateur énonce, de sa belle voix électronique, ce que vous écrivez.

Et pour vraiment vous amuser, vous pouvez faire lire un fichier txt avec l’option -f (ça ne fonctionne bien qu’avec des fichiers texte) et enregistrer ce que dit l’ordinateur dans un fichier aiff avec l’option -o. Ça me donne presque des idées d’émission de radio!


Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch

Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore

Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store