L'été est fini, c'est la rentrée ! Pour se remettre en forme, rien de tel qu'une revue des techniques de programmation en shell — ces techniques sont pour le shell de Bourne /bin/sh mais peuvent être utilisées avec les shells compatibles qui permettent parfois des solutions plus faciles.
GameShell, apprendre les rudiments du shell en s'amusant
Il y a 4 ans, j'ai pris en charge un nouveau cours intitulé « système d'exploitation » en première année de licence. Le programme est assez large, avec un peu d'architecture, un peu de système, et même un peu de réseau. Là dedans, je devais faire une introduction au shell. Le risque avec ce genre du truc, c'est de se retrouver avec un catalogue de commandes qui rebutera même les étudiants les plus motivés.
Et c'est comme ça qu'est né GameShell, ou gash pour les intimes. GameShell est un jeu où il faut entrer des commandes dans un shell (bash) pour valider des « missions ». Comme il n'y a pas eu de gros bug ces deux dernières années, je me dis que je pouvais en faire la pub. (Attention, il reste probablement plein de bugs. C'est juste que les étudiants ne sont pas encore tombés dessus !). Ça peut intéresser les gens qui veulent apprendre, ou enseigner les rudiments du shell.
Le code est disponible sur GitHub (promis, je changerais un de ces jours) avec une licence GPL : GameShell sur GitHub
N'hésitez pas à me faire des retours d'utilisation, des rapports de bugs, proposer des fonctionnalités, ajouter des missions, etc.
Si vous l'utilisez « en public », ça serait juste bien d'inclure un lien vers le dépôt et / ou mon nom.
GameShell est un jeu en ligne de commandes, où le joueur doit taper des commandes bash pour valider des « missions ».
Des alternatives à grep, ls et find
Les outils en ligne de commande comme ls, grep et find existent depuis de nombreuses années et, même s’ils continuent de s’améliorer, il est parfois intéressant de regarder les alternatives. Je vais vous parler de ripgrep, exa et fd.
À la Croisée des Chemins: crossroad, environnement de cross-compilation
Cross-compiler pour Windows sur une machine Linux est maintenant aussi simple que compiler pour Linux avec le fameux triptyque ./configure && make && make install. Crossroad fait référence à la fameuse chanson "Cross Road Blues" de Robert Johnson, une des références du blues que je joue régulièrement moi-même. La chanson raconterait comment Robert Johnson aurait rencontré le diable à un croisement de route. La légende populaire veut qu'il aurait alors vendu son âme au diable en échange de son extraordinaire don pour la musique. Je trouvais que c'était le nom parfait pour mon outil, me permettant de cross-compiler pour des environnements propriétaires. :-)
NdM : le film libre Crossroads la route du blues vous en dira plus sur le génial Robert Johnson.
Quel terminal pour 2018 ?
Vous connaissez les terminaux, ces petites fenêtres le plus souvent noires où l’on tape des lignes de commande bizarres ? Eh bien, vous risquez d’être surpris : le choix du logiciel pour faire ça n’est pas aussi simple que ça en a l’air et des gens continuent de proposer de nouvelles alternatives. Cette dépêche vise à présenter rapidement quelques fonctionnalités intéressantes que les terminaux historiques ne géraient pas forcément et à présenter quelques terminaux.
Coloriser des flux de texte avec colout
Les réalisateurs de films policiers ne s'y trompent pas : lire des flux de textes en ligne de commande nécessite parfois le super pouvoir de lisibilité.
Bien que les outils GNU soient extrêmement pratiques pour manipuler des flux de texte, il en manquait un pour aider à mettre en valeur l'information importante, sans masquer l'accessoire. Par exemple pour faciliter la lecture de logs s'étendant sur plusieurs lignes ou pour détecter rapidement le numéro de ligne d'un fichier responsable d'une erreur de compilation.
Heureusement, grâce à la commande colout (aujourd'hui en version 1.0), vous pouvez maintenant très facilement coloriser colorer colorier mettre de la couleur là où vous le souhaitez dans votre ligne de commande.
Basiquement, colout s'utilise comme un filtre de flux de texte classique, généralement après un pipe, et mets en valeur les bouts de texte correspondant à une expression régulière avec une couleur et un style de votre choix :
<flux de texte> | colout <expression régulière> [couleur [style]]
L'IHM de colout est pensée pour être simple tout en permettant des utilisations vraiment intéressantes, telles que le coloriage l'application des couleurs sur les groupes des expressions, l'utilisation de cartes de couleurs (mais si, vous savez, les couleurs de l'arc-en-ciel…), la coloration la mise en valeur de la syntaxe de code source, des thèmes automatiques et même l'application d'une couleur en fonction de la valeur d'un nombre.
Un point d'avancement sur Neovim

Neovim est un éditeur de texte, issu d'un fork de Vim. Il vise à le rendre plus moderne. En particulier, faciliter le développement et l'utilisation de greffons, et permettre de l'intégrer plus facilement dans d'autres outils.
Le fork date d'un peu plus d'un an et le travail commence à payer. En plus d'un gros nettoyage de la base de code, les développeurs de Neovim ont mis en place un système de plugins, de greffons, qui peuvent désormais tourner à l'extérieur du processus principal et communiquer avec lui via msgpack. On peut également apprécier la possibilité de lancer un terminal à l'intérieur de Neovim, grâce à l'inclusion récente de la libvterm.
Mais pour accélérer le développement, Neovim a besoin de vous. Le développeur principal, @tarruda passe une partie de son temps sur Neovim et une autre partie à faire des missions en freelance pour gagner sa vie. Grâce à des dons, il pourrait diminuer le temps passé sur les missions, et ainsi passer plus de temps à faire vivre Neovim.
Personnellement, je suis un utilisateur comblé de Neovim depuis quelques mois. Bien que celui-ci soit toujours en version alpha, il est très stable et le passage de Vim à Neovim s'est fait sans aucun souci. Aussi, j'ai participé à l'appel à dons et vous encourage à faire de même pour promouvoir ce projet qui le mérite bien !
Présentation de The Log File Navigator
The Log File Navigator, ou lnav en plus court, est un outil en ligne de commande pour afficher des journaux, sous licence BSD. Par rapport aux classiques cat, grep ou less, il propose quelques fonctionnalités supplémentaires :
- il offre de la coloration syntaxique ;
- il permet d’afficher plusieurs journaux en même temps, les lignes étant triées en fonction de la date et de l’heure à laquelle l’événement est survenu (c’est pratique pour corréler des informations entre plusieurs processus) ;
- il offre différents modes d’affichage.
Comparaison critique de systèmes d'invite de commande
Cet article a été écrit à l’occasion de l’imminence de la sortie de la version 2.2 de Liquid Prompt et vous aurez l’occasion de pouvoir en discuter avec son auteur lors des journées Toulouse Capitole du Libre, qui proposera une conférence sur Liquid Prompt : repenser en profondeur le design du prompt shell.
TL;DR: résumé
Si vous utilisez la ligne de commande, vous gagneriez à utiliser un bon système d’invite de commande (« prompt ») au lieu de la configuration par défaut. Parmi les sept systèmes de prompt les plus connus, certains sont mieux conçus et d’autres prennent mieux en charge certaines fonctionnalités.
Mes principales conclusions sont les suivantes :
- Si vous recherchez le système qui offre la meilleure expérience globale à l’utilisateur, vous devriez probablement utiliser Liquid Prompt.
- Si la faible latence est plus importante pour vous que les fonctionnalités, vous devriez miser sur PowerLevel10k.
- Si vous êtes un développeur qui jongle en permanence avec plusieurs jeux d’outils, Starship semble être la meilleure option pour vous.
Cet article est divisé en deux parties principales : la première introduit le sujet et présente les principales évaluations ; la deuxième partie entre dans les détails des designs et des fonctionnalités. Enfin, la conclusion donne des conseils sur le choix d’un prompt et propose quelques idées sur l’avenir des systèmes de prompts.
Offpunk 1.0 : un navigateur déconnecté pour le smolnet
Alors que sort la version audiolivre de mon roman cyberpunk Printeurs, dont il a été question sur ce site, j’ai le plaisir de vous annoncer une autre sortie très punk, la version 1.0 du logiciel Offpunk, un navigateur optimisé pour la navigation déconnectée sur le « smolnet », incluant les protocoles https, gemini, gopher et spartan.
Offpunk est un logiciel écrit en Python et utilisable entièrement en ligne de commande : il s’affiche dans un terminal et n’utilise ni souris ni raccourci clavier. Chaque action nécessite une commande. Le rendu des pages et des images se fait dans l’afficheur « less » (en utilisant chafa pour les images).
Mosh, the Mobile Shell
Mosh est une application permettant d'ouvrir une session à distance et sécurisée sur une machine de type Unix.
À la différence du célèbre et incoutournable SSH, Mosh offre la possibilité de maintenir une session ouverte tout en étant connecté par intermittence (roaming IP), d'où son nom : Mobile Shell.
Ce dernier est une alternative au couple SSH+Screen.
Fonctionnement
Mosh utilise SSH pour se connecter sur l'hôte distant. Une fois la connexion établie, un processus mosh-server prend le relais sur un port UDP en ouvrant une nouvelle session sécurisée et ferme la session SSH. Le client communique alors directement avec mosh-server. Avantage de la solution ? Si le client change d'adresse IP et qu'il retente une connexion à travers SSH, mosh-server reprend le dialogue avec la nouvelle adresse IP.
Mosh utilise aussi une approche différente de SSH pour la gestion de l'affichage du terminal client. Mosh n'attend pas une réponse de l'hôte distant pour afficher ce qui a été saisi par l'utilisateur. Le client et le serveur possèdent chacun un instantané (snapshot) de l'écran à afficher. La solution de Mosh repose sur la synchronisation de ces deux états. Ce qui permet à l'utilisateur de réduire les impressions de latence si la qualité de sa connexion est mauvaise.
Autres points importants :
- Mosh n'a pas besoin des droits super-utilisateur pour s'exécuter.
- Mosh impose un environnement en UTF-8 et ne gère pas d'autres encodages.
- Mosh ne gère pas encore le X-forwarding, ni le Port-forwarding.
Quelle palette de couleurs pour vos outils ?
Je passe pas mal de temps avec Neovim et des lignes de commande dans un un terminal. J’apprécie d’avoir des couleurs agréables et homogènes. Mais comme c’est quelque chose de très personnel, je vais vous présenter plusieurs alternatives pour choisir une palette de couleurs.

htop atteint la version 1.0 !
htop est un outil en mode texte qui permet d’afficher les processus qui tournent et les informations associées à ces processus, comme leur utilisation du temps processeur ou leur consommation mémoire. htop est publié sous licence GPL et vient d’atteindre la symbolique version 1.0.
htop est un clone de top, mais en mieux. Il permet par exemple :
- d’avoir un défilement (scroll) horizontal et vertical ;
- de tuer un processus sans avoir à entrer à la main son identifiant PID ;
- de démarrer plus rapidement ;
- d’afficher des barres colorées pour indiquer l’utilisation processeur globale et la consommation mémoire.
Bref, je vous encourage à essayer htop, c’est un très bon remplaçant à top.
Kakoune, un éditeur de texte qui a du caractère
Kakoune est un éditeur de texte en console qui gagne a être connu. Cette dépêche a pour but de le faire découvrir à plus de monde.
NdM : Le logiciel est placé par ses auteurs dans le domaine public.
Bogue, fonctionnalité, mauvais usage ? Un cas pratique
Dans la rétrospective LinuxFr.org de la première quinzaine de mars 2019, il était question de la réponse surprenante de diff : « Le fichier /var/lib/lxc/alpha/rootfs/dev/full est un fichier spécial‐caractères alors que le fichier /var/lib/lxc/beta/rootfs/dev/full est un fichier spécial‐caractères. »
Les choses auraient pu en rester là. Mais quand même, ça reste une bonne occasion de se demander si c’est un bogue, une fonctionnalité ou un mauvais usage, non ? Jouons un peu avec ce cas pratique.
GameShell, le retour
Il y a quelques mois, je postais une dépêche décrivant “GameShell”, un jeu que j’avais développé pour enseigner les bases de la ligne de commandes. Cette dépêche avait provoqué discussions, corrections de bugs et suggestions intéressantes.
Trois mois et quelques centaines de commits plus tard, je me permets de faire une petite mise à jour.
Globalement (mais je suis un peu biaisé), le GameShell d’aujourd’hui est nettement mieux que le GameShell d’hier. Ceci a un coût : la taille d’une archive GameShell a été multipliée par 3. On est passé de 44kio à 140kio !
Je ne sais pas comment on traduit “bloat” en français (“boursouflage” ?), mais pour le moment, ça ne m’empêche pas de dormir !
La version précédente avait été testée par plusieurs générations d’étudiants, parfois très inventifs. Alors n’hésitez pas à vous mettre dans la peau d’un étudiant en faisant une partie avant de me faire un retour.
Je suis preneur de toute critique, suggestion, rapport de bug, ticket, contribution et j’en passe.
Si certains veulent créer des missions, je pourrais faire une petite description de l’architecture d’une mission type. Ce n’est pas très compliqué, et une année, j’ai même eu un étudiant qui en a ajouté une comme « question bonus » !
Trois outils pour développeur : MailHog, Tokei et Pandoc
Dans cette dépêche, je vais vous présenter trois outils que j’utilise de temps en temps et qui pourraient servir à d’autres développeurs :
- MailHog permet d’attraper des courriels pour les examiner ;
- Tokei compte les lignes de code d’un projet ;
- Pandoc est un couteau suisse pour manipuler des fichiers et les transformer d’un langage de balisage à un autre.
Interminable liste de terminaux
Ah, la ligne de pêche Maginot commande ! Que ce soit pour gérer ses fichiers, récupérer des commits, lancer une compilation, se connecter à un serveur, redémarrer un service, consulter les logs, voire contrôler la musique, afficher des images, cette interface reste en 2025 exceptionnellement boomer rapide et même parfois confortable.
Sans compter que le terminal est l'endroit où lancer des applications dédiées, pour lire ses mails ou un million d'autres choses.
Bref rappel avant se lancer dans de longues comparaisons
- TTY vient de teletypewriter. Si vous tapez (Xorg comme Wayland)
Control+Alt+F3par exemple, vous vous retrouverez devant une invite de commande. - pts/pty : quand vous ouvrez un terminal
L'invite de commande pourra bénéficier d'un shell personnalisé. Le bureau permettra l'usage d'un terminal.
Au source du fun N° Zéro : retrouver le fun dans le libre
La plupart des logiciels libres sont devenus indispensables dans la vie professionnelle des gens sérieux qui perdent leur vie à la gagner.
Heureusement la productivité n’est pas une fatalité. Avec Au source du fun, LinuxFr.org inaugure une série de dépêches pour les gens marrants qui veulent perdre leur temps sans gagner leur vie !
Ce premier épisode traite des inutilitaires dans le libre. Il est conseillé de le consulter pendant un temps parfaitement inutile telle que la réunion du comité exécutif sur la stratégie IA de votre entreprise.
ack 1.96 — mieux que grep
Ack est un outil qui permet de rechercher du texte à l’intérieur de fichiers. C’est donc un clone de grep avec quelques améliorations notables. Voici donc dix raisons de passer à ack si vous utilisez grep :
- ack est très rapide, car il ne recherche que ce que vous voulez chercher ;
- il recherche récursivement par défaut ;
- il ignore les trucs inutiles, comme les répertoires utilisés par les [VCS], les fichiers de sauvegarde (
« foo~ »et« #foo# »), les binaires, etc. ; - vous pouvez spécifier simplement le type de fichiers à rechercher, comme
« --perl »ou« --nohtml »; - la coloration syntaxique des résultats est là par défaut ;
- vous pouvez utiliser les expressions régulières de Perl, pas juste le sous‐ensemble de GNU ;
- l’apprentissage d’ack est très simple, car il reprend les mêmes options en ligne de commande que grep (
« -c »,« -l »,« -w », etc.) ; - il est possible d’avoir des options par défaut dans un fichier
« ~/.ackrc »; - la commande fait 25 % de caractères en moins à taper ;
- en fait, c’est même 50 % de gagné par rapport à
« grep -r ».
La version 1.96 d’ack est sortie dimanche et apporte quelques améliorations notables :
- les fichiers JavaScript « minifiés » sont ignorés par défaut ;
- le langage Groovy est supporté (extensions :
« .groovy », « .gtmpl », « .gpp », « .grunit ») ; - les fichiers Perl et Lua sont mieux détectés.
Note : pour installer ack sur Debian et Ubuntu, il faut faire un « apt-get install ack-grep » (et pas juste « ack »). En revanche sous Archlinux, un « pacman -S ack » sera suffisant. Les autres distributions (Fedora, Gentoo) utilisent également le simple nom « ack »).
Lidecli : Un outil en ligne de commande pour interagir avec les environnements de bureau
Lidecli - abréviation de Linux Desktop CLI - est un wrapper libre (MIT) développé en Python permettant de scripter plus facilement le positionnement de vos fenêtres quel que soit votre environnement de bureau. Habituellement, scripter ou automatiser le positionnement des fenêtres nécessite :
- l’utilisation d’outils bien connus (wmctrl, xprop, qdbus, xrandr, etc.),
- ou, pour certains environnements - du code (LUA pour AwesomeWM par exemple).
En d’autres termes, il n’existe pas vraiment de moyens « simples » permettant de scripter à sa guise son environnement. Lidecli agit comme un wrapper qui simplifie grandement cette tache.

Trois utilitaires : Delta, Dust et Watchexec
Bash Argsparse : mieux gérer sa ligne de commande dans ses scripts.
Je vous présente une bibliothèque écrite en Shell : bash-argsparse
Bash-argsparse permet une gestion des options de la ligne de commande en plus haut niveau qu'un simple getopt, un peu comme le module argparse de python.
Parmi la liste des fonctionnalités, on trouve :
- la génération automatique du --help ;
- la vérification des entrées utilisateurs, soit suivant des énumérations, soit suivant des formats pré-établis (nombres entiers, adresses IP, etc.), soit via des résultats de fonctions définies par le développeur du script ;
- l'exclusion mutuelle de plusieurs options ;
- le cumul de valeur par répétition d'une option ;
- et plein d'aut'trucs.
Sortie de Fim 1.0.2, qui vérifie l'intégrité de vos fichiers
Fim (File Integrity Manager) est un gestionnaire de fichiers libre (licence GPLv3) qui permet de gérer beaucoup de fichiers de n'importe quelle taille. Il peut par exemple, gérer des photos ou des vidéos. Il est capable de gérer des centaines de milliers de fichiers occupant une taille totale de plusieurs téraoctets. Il peut détecter les fichiers dupliqués et aider à les effacer.

Bash 5 : une introduction
La troisième version du document « Introduction à la programmation en Bash » (IUT de Rodez) vient de paraître. Elle est principalement destinée aux étudiants de niveau Licence.
