Collection d’outils Linux modernes : de nouveaux CLI pour remplacer les commandes classiques
(ikrima.dev)- Présentation de divers outils en ligne de commande modernes qui améliorent l’efficacité du travail sous Linux
- Beaucoup remplacent ou modernisent les commandes Unix traditionnelles, avec un fort accent sur les performances, notamment via des outils développés en Rust, Go, etc.
Outils d’affichage et d’exploration des fichiers
bat: version enrichie de la commandecatavec coloration syntaxique et intégration renforcée avecgitexa: visionneuse moderne de listes de fichiers remplaçantls/tree, mais dont la maintenance est désormais arrêtéeeza: fork deexa, fournissant unls/treemodernelsd: ls de nouvelle génération, compatible avec l’existant et offrant une sortie plus soignéebroot: explorateur de fichiers en arborescence avec navigation amélioréennn: gestionnaire de fichiers en terminal léger et rapide
Analyse de l’espace utilisé par les fichiers et répertoires
ncdu: fournit une interface intuitive pourduen mode textedust: alternative plus simple àdu, implémentée en Rustduf: outil d’analyse de l’usage disque à l’ergonomie améliorée par rapport àdf
Recherche de fichiers et de code
fd: alternative concise et rapide àfind, avec une excellente ergonomieripgrep: alternative àgrepultra-rapide avec prise en charge de.gitignoreag: outil de recherche dans le code, proche deackmais plus rapidefzf: moteur de recherche floue universel, utilisable dans des pipelines et dans bien d’autres contextesbfs: alternative àfindbasée sur le breadth-first
Visionneuses Git/diff dans le terminal
delta: visualise plus lisiblement les résultats degitetdiff
Historique et traitement des commandes
mcfly: améliore de façon marquante la recherche et la navigation dans l’historique du shell, avec une meilleure pertinence et une UI intuitive
Traitement des données
choose: alternative plus intuitive et plus rapide àcutet à certains usages deawkjq: parseur de données utilisable comme un sed dédié au JSONsd: outil de remplacement desed, pour un find/replace plus familier
Supervision système et processus
bottom: moniteur système/processus graphique multiplateformeglances: version améliorée detop/htopgtop: moniteur système en forme de tableau de bord pour le terminalprocs: commande de remplacement pourpsécrite en Rust
Benchmarking et réseau
Clients HTTP
httpie: client HTTP moderne et convivial pour le CLI, bien adapté aux tests d’API pour développeurscurlie: outil qui combine la puissance decurlavec l’ergonomie dehttpiexh: alternative àhttpieaxée sur les performances
Navigation entre répertoires et éditeurs
zoxide: commandecdintelligente inspirée dezmicro: éditeur de texte pour terminal doté de fonctionnalités modernes
Nouvelles utilitaires CLI
up: outil de pipeline avec aperçu en temps réel, permettant de voir immédiatement la sortie des commandes
Outils d’aide et de documentation
ManKier: pages man résumées avec des explications de commandes clairestldr: résumé concis des pages man centré sur des exemplestealdeer: implémentation Rust de tldr, avec une exécution rapideexplainshell: analyse automatiquement les arguments d’une commande et explique visuellement leur significationcheat.sh: service d’aide en ligne combinant tldr et cheatsheets
1 commentaires
Commentaires Hacker News
Ces outils sont peut-être objectivement meilleurs, mais j’ai réalisé que devoir les configurer à chaque nouvelle installation d’OS, à chaque VM lancée ou à chaque connexion SSH, c’est une galère sans fin. Refaire la configuration dans chaque environnement est épuisant, et je n’ai pas envie d’utiliser un mélange de nouveaux outils dans un endroit et d’outils traditionnels ailleurs. Bien maîtriser les outils classiques est au final ce qui simplifie le plus la vie
Certaines personnes passent l’essentiel de leur temps sur leur propre machine, donc ce gain de confort a beaucoup de valeur. Elles savent quand même suffisamment se servir des outils classiques, donc pour intervenir occasionnellement sur d’autres serveurs, c’est largement suffisant. Tout le monde n’est pas administrateur système à devoir se connecter toute la journée à une multitude de serveurs différents
Certains outils sont tellement meilleurs qu’ils valent largement la petite gêne de l’installation. Je maîtrise bien les outils classiques, mais
fdetripgrepsont toujours meilleursSi j’aime autant Nix, c’est justement parce qu’il me permet d’avoir quasiment la même configuration partout (tant que l’environnement que j’utilise est Linux ou macOS, ce sont les deux seuls cas qui m’importent). Il existe plusieurs méthodes d’installation de Nix qui ne nécessitent pas les droits root, ce qui me permet de recréer mon environnement partout. Bien sûr, sans Nix, les outils classiques restent tout à fait suffisants. Ce n’est pas un choix exclusif, on peut avoir les deux
Quand on réinstalle un OS, il faut de toute façon installer les paquets nécessaires avec
apt-get,pacman,dnf,brew, etc., et installer aussi séparément son navigateur, son éditeur et le reste. En SSH, on n’a pas d’interface graphique de toute façon, mais ce n’est pas une raison pour éviter les outils GUI. Je ne pense pas que ce soit un gros problème d’avoir une combinaison d’outils différente entre environnement personnel et environnement partagé. Par exemple,batne remplace pas complètementcat, il ajoute juste la coloration syntaxique et rend la vie plus agréable. S’il n’est pas installé, on s’en passe simplementÀ mon avis, si on se réfère à la philosophie UNIX du « faire une seule chose et bien la faire », le fait même de pouvoir remplacer facilement ces utilitaires simples quand une meilleure alternative apparaît est au cœur du concept. Apprendre d’abord les outils classiques est pertinent pour sa carrière, mais je pense qu’il faut aussi apprendre les nouvelles alternatives. Personnellement, plus que
batoueza, ce sont les alternatives qui font gagner du temps commefd(remplaçant defind) ousd(remplaçant desed) que je trouve vraiment utilesQuand on doit se connecter à des centaines de serveurs, sur plusieurs réseaux et chez plusieurs clients, les outils personnalisés n’ont presque aucune valeur. Dans 90 % des environnements, ils ne sont pas installés. Moi, j’ajoute juste quelques éléments à
ansible-configet je les déploie en automatique, mais je garde une liste très courte. 95 % des systèmes que je gère sont sous Debian ou Ubuntu, donc la base est presque la même partout, et j’ajoute seulement des choses commeack,etckeeper,vim,pv,dstatLe mot-clé ici, c’est « serveur ». Beaucoup de programmes légèrement améliorés pour sysadmins n’ont peut-être pas tant de valeur, mais certains sont de vrais outils de dev utilisés dans l’environnement de développement, donc il suffit de les installer sur le petit nombre de machines où l’on programme.
ripgrep(excellentgreprécursif),jq(processeur JSON sans véritable équivalent dans la boîte à outils Unix de base),hyperfine(benchmarking) en sont de bons exemplesComme je travaille à la fois sur Windows et Linux, des outils cross-platform aussi bons que
ripgrepsont vraiment pratiquesJe me demande s’il existe un outil ou une extension SSH capable d’apporter automatiquement ce genre d’apps dans une session SSH distante. Si ce sont de petits binaires, on pourrait les copier dans un dossier temporaire et les utiliser, et on peut imaginer automatiser ce processus. La vraie question, c’est la sécurité et l’éventuel besoin de privilèges supplémentaires. Au fond, tout repose sur la portabilité de ces apps. Moi aussi, je me pose souvent la question
emacsfonctionne presque comme un système d’exploitation à part entière, ce qui permet de retrouver un environnement familier sur n’importe quel système. C’est de là que vient la phrase « GNU is my operating system, linux is just the current kernel ». Du point de vue d’un admin chevronné, c’est pour cela que je recommande à quelqu’un qui débute sous Linux de commencer par la commandeinfoet de lire toute sa documentation. Cela permet de dépasser largement la plupart des administrateurs. Quand on connaît les outils intégrés, la documentation est bonne, l’écriture de scripts devient facile, et c’est précisément le cœur de la philosophie Linux. À une époque, il n’y avait même pasnano, seulementvi, mais aujourd’hui il est simple d’ajouter un éditeur TUI via l’automatisation CI/CDJ’ai du mal avec ces commentaires du type « moi, je suis ce genre de personne ». Beaucoup de gens se moquent complètement du fait de ne pas installer d’outils personnalisés à distance. L’idée est simplement de profiter de leurs avantages au moins sur sa machine locale
Je pense que ce tableau gagnerait à avoir une colonne supplémentaire du type « quel problème cet outil résout-il ? ». Et pour moi, « implémenté en Rust » n’est pas un critère différenciant
Il m’est déjà arrivé d’assister à une réunion d’entreprise où quelqu’un présentait « écrit en Go » comme un élément différenciant. #facepalm
Beaucoup d’entrées du tableau mentionnent bien un problème concret, par exemple « syntax highlight », « ncurses interface » ou « more intuitive ». En revanche, des formulations comme « écrit en Rust », « moderne » ou « meilleur » n’aident pas vraiment
L’objectif principal de la plupart de ces outils, c’est d’améliorer l’UX
Utiliser une licence non GPL n’est pas non plus un élément différenciant
Une bonne partie de ces outils ont aussi l’avantage d’être disponibles sur Windows
Ce genre de liste d’outils est toujours un plaisir. La plupart des gens trouveront probablement ici un ou deux outils qui leur seront vraiment utiles. Pour moi,
ripgrepetjqsont indispensables.ripgrepest le meilleur remplaçant direct degrep, etjqrésout un problème que j’avais absolument besoin de résoudre. Je vais peut-être aussi essayerlsdetdust. Même quand un nouvel outil ne m’est pas directement utile, j’apprécie que des gens y consacrent du temps. Le fait d’améliorer progressivement la boîte à outils de toute la communauté est remarquableJe choisirais
fzfen premier. Je le préfère de très loin àrgoujqripgrepne se comporte pas commegrep, donc ce n’est pas en réalité un remplaçant direct. C’est un excellent programme, mais il n’est pas totalement compatibleLes admins Linux comme moi ont tous ce genre de liste soigneusement ficelée. Moi, j’ai plutôt construit mon camp autour d’une pile GPL, et j’aime particulièrement le format de ikrima.dev
Je vis dans le terminal, mais ces outils ne résolvent aucun problème que j’ai tout de suite, ou bien ils ne sont pas installés sur mon système, et pourtant ils ont d’une manière ou d’une autre des dizaines de milliers d’étoiles sur GitHub. Je ne comprends vraiment pas d’où vient cette popularité
Quelqu’un qui vit plongé dans sa bibliothèque musicale peut tout aussi bien trouver étrange qu’un artiste qui n’est ni dans sa bibliothèque ni à son goût vende des millions d’albums. Blague à part, j’aimerais demander si tu as déjà vraiment essayé ce genre d’outils. Moi non plus, je ne comprenais pas pourquoi les gens utilisaient
vim, puis quand je l’ai vraiment utilisé, j’ai comprisTu n’utilises pas
fzf? La vie en terminal doit être vraiment difficile. Avec les plugins de shell, c’est extrêmement utile :Ctrl+Rpour faire une recherche floue dansbash_history,Ctrl+Tpour chercher de façon floue parmi les fichiers du répertoire courant, sans avoir à lancer la commande directementLa boîte à outils Unix de base est déjà tellement solide qu’on peut très bien travailler uniquement avec elle. Beaucoup d’alternatives sont meilleures, mais elles ne sont pas indispensables, et en plus elles ne sont généralement pas installées par défaut
Par curiosité, existe-t-il une manière élégante, avec les seuls outils Unix intégrés, de faire un
greprécursif uniquement sur certains fichiers selon leur extension tout en ignorant les fichiers cachés (.git, etc.) ? Par exemple, la commanderg -g '*.foo' barcorrespond à un cas d’usage que j’emploie très souvent. Même chose avecfdpour trouver des fichiers correspondant à une expression régulière ou à un glob. Je n’ai pas trouvé de méthode propre avec les outils de baseJe me demande quel genre de travail on peut faire toute la journée dans le terminal sans ressentir le besoin d’améliorer sa boîte à outils. J’aurais presque envie de demander si la personne écrit elle-même tous ses outils
En mode sombre, le texte des liens est beaucoup trop peu visible, c’est difficile à lire
Pour moi, seul
jqrésout vraiment un problème concret qui n’est pas correctement couvert par les outils existants. Tout le reste relève surtout de préférences, de performances, de mise en évidence syntaxique ou du fait d’être implémenté en RustJ’aimerais bien qu’une équipe sorte une véritable suite d’outils avec une conception cohérente sur les paramètres, les couleurs, les tableaux, etc.
Pendant longtemps, j’ai utilisé
htopplutôt quetopparce que je le trouvais plus accessible, mais le fait quehtopn’affiche pas les threads du noyau par défaut m’a gêné pour identifier la cause d’incidents. Depuis, je suis revenu àtop, qui montre toutes les informations et auquel je fais davantage confiance. Les interfaces dehtop/btopme semblent proches du simple spectacleCet article date de 2023. La plupart des « outils modernes » ont peut-être déjà été mis à jour, et de nouvelles alternatives plus tendance sont peut-être apparues
Comme il y a énormément d’outils, même si seule la moitié survit, cela reste déjà très précieux
Mon expérience est plutôt l’inverse. La plupart de ces outils ne font que « réinventer » une fois de plus les puissants outils GNU de base, à condition d’y consacrer le temps nécessaire pour vraiment les apprendre