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.
Petite histoire du Bourne Shell
Nos systèmes d'exploitations sont forgés par l'histoire. Ils se sont formés par stratifications d'inventions accumulées. Les idées de Ken Thompson, Steve Bourne, et Bill Joy - pour ne citer que les personnes dont il est question dans cette dépêche - sont fossilisées dans les sources des logiciels que nous utilisons aujourd'hui. Parce qu'un rappel historique nous permet de comprendre les raisons du fonctionnement actuel d'un logiciel, cette dépêche présente rapidement l'histoire du shell de Bourne.
Journal Des "basheries"
Salut,
Voici un journal qui répertorie les quelques raccourcis et commandes que j'ai découverts au fil du temps et de balades sur le net (blogs, forums, wiki, man bash, etc.). J'essaie de faire une liste ici de ceux qui me semblent vraiment utiles pour l'utilisation quotidienne du terminal par un utilisateur lambda. Je fais partie de cette catégorie, je ne suis ni un programmeur, ni un utilisateur averti, je fais de la recherche en sciences humaines et sociales et de (…)
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 ».
GNOME 3.0 : le grand saut !
L’environnement de bureau du projet GNU a livré sa version 3.0, tant attendue. Contrairement au poisson d’avril de Vincent Untz, la version 3.0 n’est pas repoussée une troisième fois !
La branche 2 ne verra pas de nouvelle version majeure. La version 2.32 sera maintenue aussi longtemps que les distributions remonteront des erreurs.
Journal Back to basics : avoir un excellent pager avec less
Un petit article sur des trucs que j’apprécie pas mal avec less
et qui explique pourquoi je n’utilise pas (et je m’énerve) quand je dois utiliser more
.
D’abord pour les étourdis. Un pager est un outil en ligne de commande qui permet de naviguer dans un document texte dont la taille dépasse celle de votre terminal. C’est ce que vous utilisez sans le savoir à chaque fois que vous lisez une page de manuel avec man. Il existe (…)
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.
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.
Journal Le core utile
GNU Coreutils
Ce journal concerne les utilitaires GNU. Ils sont présents dans toutes les distributions Linux, et tous les adeptes du shell les connaissent.
Mais connaissons-nous vraiment toutes ces commandes ?
J'ai donc listé le contenu du paquet coreutils de ma distribution, et j'ai écrit une description rapide pour les commandes que je ne connaissais pas, ou peu.
base64
Codage/décodage d'un fichier dans le format base64.
Fonctionne avec l'entrée standard (on peut donc piper).
basename
Voir dirname
cat
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.
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 » !
Journal Tu souhaites apprendre à programmer en shell
Cher lecteur, tu souhaites apprendre à programmer le shell. Voici quelques recommendations que tu trouveras utiles (ou non).
(Ceci est une version modifiée d'un de mes commentaires planqué au fond du forum. Quand j'ai pensé au fantastique appeau à troll que j'avais écrit, j'ai décidé d'en faire un journal—c'est trolldi pour encore au moins deux longues heures!)
Usenet
Pour apprendre à programmer il faut lire beaucoup de programmes: abonne-toi à comp.unix.shell
tu apprendras vite!
Bashing
Comme bash est un gros (…)
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.
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.
Journal Envoyer un SMS rapidement depuis le terminal
Je continue à me servir des journaux LinuxFR comme sauvegarde pour mes scripts shells pourris.
J’utilise KDE Connect pour relier mon téléphone à mon ordinateur. Ça permet plein de choses, y compris répondre rapidement aux textos reçus. Par contre, impossible de commencer un texto depuis l’interface graphique. L’outil en ligne de commande, en revanche, le permet.
Voici un script qui permet d’envoyer un texto rapidement depuis la ligne de commande. Le script invoque votre éditeur de texte préféré (indiqué dans (…)