Outils de ligne de commande pour les développeurs
Publié: 2022-03-11Dans le monde en ligne d'aujourd'hui, la bataille pour attirer les utilisateurs continue de faire rage, les fabricants d'applications préférant les applications mobiles ou Web. Les applications de bureau deviennent de moins en moins pertinentes. De plus, ils ont également tendance à n'être rien de plus que des clients riches pour les applications Web, Electron étant la plate-forme populaire de choix.
Cela signifie-t-il que nous allons bientôt abandonner le bureau en tant que plate-forme ? Non, bien sûr que non, je ne dirais pas ça. En outre, alors que les applications GUI semblent avoir stagné récemment, il existe un segment d'applications de bureau qui continue de croître.
Avez-vous déjà vu un film mettant en scène des hackers ? Le plus souvent, ces personnes sont montrées en train de travailler devant des écrans affichant une sorte de terminal (généralement avec un arrière-plan sombre et un premier plan clair). Ce terminal, à son tour, a tendance à être inondé de personnages de passage qui ont apparemment une signification pour la personne qui les regarde.
De telles représentations de hackers en action sont souvent moquées par les développeurs professionnels, et il existe même des programmes qui simulent divers effets de « hacker », juste pour le plaisir.
Cependant, dans le monde réel, les outils de ligne de commande ne sont pas utilisés pour leur valeur de divertissement.
Pourquoi nous utilisons toujours des outils d'interface de ligne de commande
Cet article se concentre sur le côté pratique de l'utilisation des outils d'interface de ligne de commande (CLI). Connaître les commandes CLI et utiliser des outils de qualité peut vous rendre plus productif et peut également ouvrir les portes à diverses approches d'automatisation qui sont beaucoup plus pratiques avec des interfaces textuelles qu'avec des applications GUI.
Vous pouvez vous améliorer dans l'exécution de tâches répétitives dans l'interface graphique, au point que vos multiples clics sont entendus comme un seul long. Le problème est que cela ne battra toujours pas l'efficacité d'un script spécialisé. De plus, l'exécution manuelle des mêmes opérations introduit à la fois une charge cognitive supplémentaire et une possibilité accrue d'erreur humaine. Comme d'habitude, nous comptons sur les ordinateurs pour gérer les tâches que les humains peuvent trouver ennuyeuses, répétitives ou accablantes.
Il faut savoir qu'un outil terminal peut proposer plusieurs types d'interfaces. Il y en a des non interactifs comme ls, qui prennent simplement les paramètres et fournissent la sortie. Il existe des interfaces interactives ou semi-interactives que l'on trouve le plus souvent dans les gestionnaires de packages. ("Êtes-vous sûr de vouloir procéder à l'installation à partir d'une source non vérifiée ?") Ensuite, il existe des interfaces utilisateur textuelles (TUI), qui sont des applications GUI interactives conçues pour s'adapter aux limites d'un terminal. Le plus célèbre est probablement Midnight Commander (mc), un clone de Norton Commander extrêmement populaire (dans les années 90).
Outils de ligne de commande essentiels
Si vous voulez devenir un habitant de la console, vous devez vous équiper d'un minimum d'outils de développement en ligne de commande - le strict nécessaire. Les choses dont vous ne pouvez certainement pas vous passer sont un shell interactif (visez quelque chose de moderne avec une complétion par tabulation pratique) et un éditeur de texte .
Maintenant, je mentionnerai la philosophie UNIX , qui est souvent à la base des décisions de conception prises par les auteurs de l'outil, consciemment ou non. Certains des points clés peuvent être résumés comme suit :
- Traitez tout comme un fichier.
- Ne faites qu'une chose, mais faites-la bien.
- Lisez à partir de l'entrée standard, écrivez sur la sortie standard et communiquez les erreurs à un flux d'erreurs standard.
- En cas de succès, code de retour 0. Une valeur différente de zéro signifie une erreur (qui peut être spécifiée par le code de retour exact).
- Autoriser le chaînage de commandes et les scripts.
Coquille
La première chose que vous voyez à l'ouverture d'un terminal est un shell. C'est la partie qui rend possible l'interaction entre l'utilisateur et la machine. Il interprète vos commandes, les divise en noms de programme et en arguments, et exécute toutes les commandes shell que vous lui lancez.
Historiquement, il y a eu de nombreux types de coquillages différents. Parmi les plus populaires figuraient csh (C Shell) et diverses implémentations de Bourne Shell (généralement appelées simplement sh ). Bourne Shell a été étendu à Korn Shell qui a également gagné du terrain et est toujours utilisé par ses passionnés. Csh est actuellement le shell par défaut sur certains systèmes BSD, tandis que presque tous les autres systèmes d'exploitation de type UNIX préfèrent une sorte de Bourne Shell. Les distributions Linux ont tendance à favoriser bash tandis que Mac OS X est livré avec zsh comme choix par défaut.
Il existe d'autres possibilités, mais elles sont beaucoup moins populaires, à l'exception de Microsoft PowerShell sur les systèmes Windows. PowerShell s'inspire en partie des shells UNIX interactifs tels que zsh et en partie du runtime .NET. Au lieu de tout traiter comme du texte, un concept courant dans le monde UNIX, il permet une manipulation orientée objet des données.
Même si Microsoft PowerShell est assez populaire dans le domaine Windows, de nombreux programmes d'origine UNIX (les plus notables étant Git, Autotools ou Make) ont tendance à préférer certaines variantes de Bourne Shell. Pour cette raison, des projets tels que msys (fourni avec Git pour Windows), Cygwin ou le récent WSL de Microsoft sont nés. Si vous voulez une sensation de type Linux sur Windows, MSys est le meilleur choix ici. Si vous voulez un environnement Linux complet capable d'exécuter des binaires Linux standard, alors WSL est la solution. Pour quelque chose entre les deux - l'API UNIX mais compilée en tant qu'exécutable Windows (utilisez-la uniquement lorsque vous savez réellement pourquoi vous en avez besoin) - Cygwin est la réponse.
Éditeur
Une fois que vous vous serez familiarisé avec votre shell, vous voudrez acquérir des compétences utiles. Comme la majeure partie du travail de codage tourne autour de l'écriture de texte (code, README, messages de commit), une bonne connaissance des éditeurs de texte interactifs est essentielle. Il y a beaucoup de choix, et comme un éditeur est l'un des outils les plus nécessaires pour tout développeur, il y a probablement autant d'opinions sur le meilleur éditeur.
Les éditeurs de texte les plus populaires peuvent être séparés en deux groupes de base : les éditeurs de texte simples et les éditeurs de texte programmables .
Les deux peuvent être parfaits pour écrire du code, mais, comme leur nom l'indique, les programmes programmables offrent la possibilité de façonner et de personnaliser l'éditeur en fonction de vos besoins. Cela a cependant un prix, car ils ont également tendance à avoir une courbe d'apprentissage plus abrupte et peuvent nécessiter plus de temps pour s'installer.
Éditeurs de texte de base
Parmi les éditeurs de texte simples, GNU Nano est le plus répandu. En fait, c'est un clone de l'éditeur pico, donc si l'un n'est pas disponible sur votre système, vous pouvez essayer l'autre. Une autre alternative, plus moderne, aux deux est le micro-éditeur. Si vous voulez quelque chose de simple et extensible à la fois, celui-ci est un bon point de départ.
Éditeurs de texte programmables
De nombreux développeurs s'appuient sur des éditeurs programmables de différents camps, tels que Vim et GNU Emacs. Les deux éditeurs peuvent s'exécuter dans la console ou en mode graphique, et les deux ont eu un impact sur les raccourcis clavier trouvés dans d'autres logiciels. Ils offrent tous deux non seulement une API, mais également de véritables langages de programmation intégrés. Emacs se concentre sur LISP et Vim utilise son propre VimL, mais il offre également des interfaces vers d'autres langages de script populaires (comme Lua, Perl, Python ou Ruby). Une approche plus récente de Vim, appelée Neovim, mérite également d'être mentionnée, car elle commence à être suivie sérieusement.
Cela peut être quelque peu déroutant, mais il existe également un éditeur appelé vi qui est un prédécesseur de Vim (qui, soit dit en passant, signifie « Vi i m prouvé »). C'est beaucoup plus simple que Vim, mais si vous avez assez de confiance pour écrire dans Vim, cela ne devrait pas être un défi pour vous si vous avez besoin d'utiliser vi.
Étant donné que pico/GNU Nano et vi/Vim sont généralement préinstallés sur divers systèmes, c'est une bonne idée de comprendre au moins leurs bases (quitter Vim est un problème notoirement difficile pour les débutants). De cette façon, si vous devez éditer quelque chose sur une machine distante, vous serez prêt quel que soit l'éditeur déjà présent. Sur votre appareil privé, n'hésitez pas à utiliser n'importe quel éditeur que vous trouvez le plus confortable.
Éditeur système par défaut
Une dernière chose à noter est que votre système peut avoir ce qu'on appelle un éditeur par défaut .
La variable d'environnement $EDITOR pointe vers l'éditeur par défaut et dans les shells compatibles Bourne (sh, bash, ksh, zsh), vous pouvez le voir en entrant echo $EDITOR . Si la valeur diffère de votre choix personnel, vous pouvez la définir vous-même en ajoutant export EDITOR=my-awesome-editor à la configuration d'exécution de votre shell ( ~/.profile , ~./bashrc , ~/.zshrc , etc.).
D'autres programmes, tels que les systèmes de contrôle de version et les clients de messagerie, utiliseront cet éditeur lorsqu'ils auront besoin d'une saisie de texte plus longue.
Multiplexeur
Dès que vous commencerez à faire des choses sérieuses dans CLI, vous rencontrerez la limitation de ne pouvoir garder qu'une seule application ouverte à un moment donné. Lors du codage, vous souhaiterez peut-être modifier le code, l'exécuter, corriger les erreurs et exécuter à nouveau. Lorsque vous recherchez un bogue, vous souhaiterez peut-être répertorier les journaux et voir ce qui est enregistré lorsque vous envoyez une requête au serveur. En règle générale, cela signifie soit basculer constamment entre les deux applications, soit ouvrir plusieurs fenêtres de terminal.
C'est là qu'un multiplexeur de terminaux peut vous aider. En parlant de multiplexeurs, certaines personnes supposent immédiatement que le sujet est GNU Screen. C'était le premier outil répandu de son genre et il est toujours très populaire aujourd'hui (souvent installé par défaut). Son remplaçant moderne est tmux qui, sans surprise, signifie « terminal multiple x er » .
Ces deux vous permettent d'avoir plus d'une fenêtre ouverte dans une session de terminal donnée et de basculer librement entre ces sessions. Ils vous permettent de diviser les fenêtres en volets, ce qui permet d'exécuter plusieurs applications en même temps et d'observer leur sortie en temps réel (sans changer de fenêtre). De plus, ils fonctionnent en mode client-serveur, ce qui signifie que vous pouvez les détacher à tout moment et revenir plus tard pour continuer le travail là où vous l'avez laissé. Cette dernière fonctionnalité a conduit à la popularité de Screen lorsque les gens voulaient des sessions IRC persistantes.

Pour la plupart des cas d'utilisation, GNU Screen ou tmux devraient être parfaits pour vous, mais si pour une raison quelconque vous considérez qu'ils sont trop lourds en ressources, il existe également des alternatives plus légères. Il y a dtach/atach et il y a abduco. Ils ont une portée limitée à dessein, mais peuvent bien s'acquitter de leurs fonctions respectives.
Directeur chargé d'emballage
À ce stade, vous pouvez commencer à penser à installer tous les logiciels susmentionnés sur votre machine. Un problème est que chacun des outils a des instructions d'installation différentes. Parfois, vous devez télécharger des sources et les compiler vous-même, parfois vous obtenez le binaire autonome, et parfois vous obtenez ce qu'on appelle un paquet binaire , ce qui signifie généralement un exécutable compressé avec des métadonnées.
Pour faciliter le processus d'installation des logiciels, les créateurs de systèmes d'exploitation ont proposé un concept de gestionnaires de packages. En termes simples, un gestionnaire de packages est comme un magasin d'applications pour les applications CLI et de bureau. Il précède les magasins d'applications réels de quelques décennies. Le problème est que presque chaque système a son propre gestionnaire de paquets. Debian, Ubuntu et les distributions GNU/Linux dérivées utilisent APT, les distributions basées sur Red Hat préfèrent yum ou DNF, d'autres distributions Linux ont des moyens plus exotiques d'installer des logiciels, tout comme différents clones BSD. Outre les gestionnaires de packages intégrés, il existe également des gestionnaires installés par l'utilisateur, tels que Chocolatey pour MS Windows et Homebrew pour Mac OS X/macOS. Lorsque vous voulez écrire des instructions sur la façon d'installer votre programme, vous pouvez finir par écrire des cas pour chacun de ces systèmes. Cela semble un peu trop, n'est-ce pas?
Heureusement, le dernier des systèmes mentionnés, Homebrew, est peut-être le plus portable, grâce à Linuxbrew, un portage de Homebrew vers les systèmes GNU/Linux. Le plus drôle, c'est que cela fonctionne même sur WSL si vous voulez avoir une expérience utilisateur similaire sur Microsoft Windows. Gardez à l'esprit que WSL n'est pas officiellement pris en charge.
Donc, en plus de la portabilité, qu'est-ce que Homebrew peut offrir d'autre ? Tout d'abord, cela n'interfère pas avec les packages système, donc tout ce que vous installez réside sur une couche distincte du système d'exploitation. De plus, aucune autorisation root n'est généralement nécessaire pour installer des packages. Vous pouvez donc avoir des packages système stables et testés, mais en même temps vérifier leurs nouvelles versions sans sacrifier la stabilité du système.
Si vous vouliez tester les éditeurs, j'ai mentionné plus tôt que tout ce que vous avez à faire sur un système avec Homebrew ou Linuxbrew est d'exécuter cette commande :
brew install emacs micro nano vim neovim .
Les trucs brillants
Ce dont nous avons déjà discuté est sans aucun doute utile pour le travail. Mais il existe aussi des applications qui, bien qu'elles ne soient pas nécessaires, apportent tout de même du confort au quotidien. Vous n'en avez peut-être pas besoin, mais cela vaut toujours la peine de les connaître.
Filtre interactif
La recherche dans l'historique des commandes peut être fastidieuse. Bien que bash et zsh disposent tous deux de la combinaison de touches Ctrl + R, il n'affiche qu'une seule substitution à la fois. De plus, vous devez entrer le texte exact que vous avez utilisé auparavant. Comme il s'agit d'une opération assez courante, une fois que vous avez commencé à utiliser la ligne de commande, cela ressemble à un bon point d'amélioration.
Les filtres interactifs, comme fzy, percol, peco ou fzf vous aident à filtrer les longues lignes de texte. Il peut s'agir de l'historique des commandes susmentionné, de toutes les lignes de code d'un répertoire de projet ou d'une liste de noms de fichiers générée par find . . L'idée générale ici est de vous présenter d'abord toutes les lignes disponibles, puis de s'appuyer sur des algorithmes de recherche floue pour filtrer tout ce qui ne correspond pas.
Par exemple, la liaison Ctrl + R à fzf vous montre une liste des commandes les plus récentes, que vous pouvez parcourir de haut en bas à l'aide de flèches, ou vous pouvez taper git pour afficher uniquement les commandes qui comportent Git quelque part à l'intérieur. Personnellement, quand je travaille avec un shell qui n'a pas de filtre interactif, je me sens du coup un peu perdu. Cette fonctionnalité est vraiment convaincante !
De plus, vous pouvez rendre votre filtre interactif disponible dans votre éditeur de texte programmable. De cette façon, vous aurez des capacités de recherche unifiées entre votre shell et votre éditeur.
Navigateur interactif
Facebook PathPicker m'a été d'une grande aide lorsque je travaillais principalement sur des projets C++. Le journal des erreurs généré par le compilateur peut devenir assez volumineux et assez désagréable, et la possibilité de trouver les chemins réels à l'intérieur de ce journal était une aubaine pour la productivité.
Dans n'importe quel fichier texte donné, ou le contenu de votre écran lorsqu'il est utilisé avec tmux, fpp filtre tout sauf les chemins de fichiers. Il présente ensuite une interface utilisateur dans laquelle vous pouvez sélectionner un ou plusieurs de ces chemins et exécuter une commande avec eux. La réponse la plus courante serait d'ouvrir les fichiers dans un éditeur, bien sûr, ce qui est l'action par défaut.
Interface utilisateur Git
Il y a de fortes chances qu'au moins un des projets sur lesquels vous travaillez utilise Git comme système de contrôle de version. Tout en étant entièrement puissant, le Git CLI n'est pas le summum de l'excellente expérience utilisateur. Pour vous éviter un peu de stress en lisant toutes les options de l'aide Git $SUBCOMMAND , je vous recommande de consulter tig. Il offre une belle interface utilisateur de console pour les opérations qui en bénéficient, comme log ou blame .
Un autre outil qui vise à aider les utilisateurs de GIt est fac, qui est un acronyme pour Fix All Conflicts . Comme vous l'avez peut-être deviné, cela s'avère pratique lorsque vous rencontrez des conflits lors de fusions ou de rebases. C'est une alternative aux autres outils de fusion comme vimdiff.
Gestionnaire de fichiers
Il fut un temps dans les années 90 où tout le monde voulait un gestionnaire de fichiers à deux volets. La tendance a commencé avec Norton Commander. Beaucoup d'autres ont suivi le même chemin, mais celui qui voit toujours une base d'utilisateurs stable est Midnight Commander. Le cas d'utilisation le plus évident consiste à utiliser mc pour manipuler des fichiers locaux, mais il est également très utile lorsque vous travaillez avec des machines distantes.
Comme la plupart des programmes en ligne de commande, il est très léger, il n'y a donc aucun problème à l'exécuter sur ssh et grâce à la prise en charge des protocoles FTP et FISH, vous pouvez avoir un système de fichiers local visible dans un volet et le système distant dans l'autre—une pratique fonctionnalité lorsque vous voulez éviter de taper ou de copier des noms de fichiers en tant qu'arguments de scp.
Outils CLI Juste pour le plaisir
"Tous les travaux et aucun jeu font de Jack un garçon ennuyeux", disent-ils. Il existe de nombreux programmes, en ligne de commande et autres, qui ne servent qu'à vous amuser. Le jeu vidéo Rogue entre dans cette catégorie. Il a même donné un nom à tout le genre de jeux ! D'autres jouets populaires sont la fortune et le cowsay, qui peuvent rendre votre journée un peu moins ennuyeuse si vous les utilisez quelque part dans vos scripts CI, par exemple.
Mais pour certains d'entre nous, le principal attrait de l'utilisation d'une console en premier lieu est de se sentir comme un hacker dans les films. No More Secrets et Hollywood Hacker représentent bien ce groupe. Essayez-le quand quelqu'un vous regarde travailler, et votre crédibilité de hacker augmentera à coup sûr !
Ligne de commande en pratique
Alors, qu'y a-t-il de si attrayant dans la ligne de commande qui compense les heures passées à apprendre à utiliser le shell, l'éditeur et tous les commutateurs de diverses applications ? La réponse courte est la productivité , qui vient de deux choses :
La première est que lorsque vous êtes présenté avec seulement une fenêtre de terminal et rien de plus, vous pouvez vous concentrer plus intensément, car il n'y a pas grand-chose pour vous distraire. Aucune notification ne s'affiche, aucune publicité, aucune photo de jolis chatons. Juste vous et votre objectif.
La deuxième chose est l'automatisation. Vous pouvez mettre plusieurs actions fréquemment combinées dans un script et l'appeler plus tard dans son ensemble au lieu de les taper toutes à la main à chaque fois. Vous pouvez rapidement revenir à une commande particulièrement complexe que vous avez écrite une fois en recherchant dans l'historique de votre shell. Fondamentalement, vous pouvez enregistrer et rejouer n'importe quoi, et le code est disponible en tant que documentation de ce que vous avez fait.
La possibilité d'ajouter des alias contribue également aux gains. Par exemple, je me retrouve souvent à créer des commits dans Git en mettant à jour le même jusqu'à ce qu'il soit parfait (pour le moment). Une fois que j'ai préparé les fichiers souhaités, je lance git carmh . N'essayez pas de le rechercher dans le manuel, car il s'agit de mon alias privé signifiant commit --amend --reuse-message=HEAD . Cela permet d'économiser un peu de frappe à coup sûr.
Le fait est que les gens s'ennuient à répéter les mêmes actions encore et encore, et l'ennui réduit la concentration. Cela peut conduire à des erreurs et des erreurs. La seule façon de les éviter est de ne pas entrelacer des actions à focalisation élevée et à focalisation faible. L'écriture de code est une priorité et la révision d'un message de validation et de son contenu est une priorité, mais lorsque vous devez répéter plusieurs clics mécaniques ici et là pour passer à l'étape de la révision de la validation, il y a de fortes chances que votre concentration soit réduite. La ligne de commande n'est bien sûr pas exempte de telles activités mécaniques, mais grâce à l'automatisation, vous pouvez en éviter la plupart.
Explorations supplémentaires
Vous connaissez peut-être déjà certains ou tous les outils de ligne de commande mentionnés dans cet article. Vous avez peut-être appris quelque chose de nouveau et d'utile en le lisant. Si c'est le cas, excellent - mon objectif ici n'était pas d'offrir un aperçu complet et une comparaison des différents outils, mais de démontrer quelques outils cruciaux que j'ai trouvés utiles dans mon travail quotidien, dans l'espoir que vous pourriez trouver certains d'entre eux utiles, aussi.
Il existe des programmes de ligne de commande bien plus intéressants, et si vous êtes intéressé par eux, je vous recommande de consulter la liste organisée par Awesome Shell de certains des meilleurs outils de ligne de commande disponibles aujourd'hui.
La plupart des applications GUI ont leur homologue terminal. Cela inclut les navigateurs Web, les clients de messagerie, les clients de chat (IRC, Slack, XMPP), les suites PIM ou les feuilles de calcul. Si vous connaissez de bons programmes que je n'ai pas mentionnés, veuillez les mentionner dans les commentaires.
