Didacticiel :
Introduction à la ligne de commande

Langage : Shell
Niveau : Grand débutant

Ce tutoriel n'a originellement pas été écrit ni pour ce blog, ni pour des bioinformaticiens, (ni par moi), mais je pense qu'il a tout à fait sa place ici car il donne les clés pour que n'importe qui puisse se familiariser avec la ligne de commande et sera sûrement très utile pour par exemple des biologistes qui veulent s'essayer à la bioinformatique.

L'objectif de ce tutoriel est de démystifier cet outil qu'est la ligne de commande, et constitue d'abord une introduction à celui-ci. Ensuite on rentre plus dans le détail, et on voit comment utiliser la ligne de commande comme navigateur de fichiers. Dans un troisième temps, on essaie de donner un panorama de certaines des tâches les plus courantes (dates, calendrier, gérer les processus, etc…) qui peuvent être gérées également en ligne de commande. Une dernière partie est consacrée à quelques remarques et pistes d'approfondissement.

Les paragraphes débutant par « Note. » discutent de détails (techniques, historiques,…) qui ne sont pas nécessaires à la compréhension du tutoriel.

Introduction

Tout d'abord, qu'est-ce que la ligne de commande ? Pour le savoir il faut pour commencer lancer un émulateur de terminal (l'application gnome-terminal sur Gnome, konsole sur KDE). Le lecteur est invité à le faire, afin de pouvoir tester au fur et à mesure de façon active les exemples qui seront proposés.

Une fois un émulateur de terminal ouvert, on se retrouve donc en ligne de commande : c'est-à dire une invite de commande, généralement un éventuel bout de texte avec des infos suivi d'un symbole comme $, >, ou #, ce qui donne par exemple toto@ordimaison $ ou tout simplement $. On se retrouve alors à demander des choses à la machine dans un langage présentant des similarités avec le langage naturel, spécialement avec le mode impératif.

On doit en effet écrire des phrases qui sont des ordres. Tout ordre a besoin d'un verbe, on parle bien sûr des commandes. Ce qui donne par exemple en écrivant ls après le dollar de l'invite de commande :

lsqui liste des fichiers et dossiers dans le répertoire courant. Ici on voit qu'il y a un dossier Documents et un fichier tuto.txt. Remarquons qu'après la commande, on reçoit une nouvelle invite de commande.

Chaque commande est en général en fait le nom d'un programme qui se trouve généralement dans le dossier /bin ou /usr/bin, hormis quelques commandes basiques qui sont parfois intégrées au programme fournissant l'interface en ligne de commande (le shell).

Mais certains ordres ont besoin de plus qu'un verbe, il nous faut un ou plusieurs compléments d'objets, des objets sur lequels porte l'ordre : c'est le rôle des arguments. Par exemple :

qui fait une copie du fichier tuto.txt sur un nouveau fichier nommé tuto-sauvegarde.txt. Les arguments doivent parfois respecter un ordre précis, comme c'est le cas ici : l'ordre est ce qui remplace la préposition « sur » dans la phrase « copie tuto.txt sur tuto-sauvegarde.txt ».

On remarquera que tout comme avec le langage naturel, les différents mots sont séparés par des espaces.

Bien sûr, ce n'est pas encore fini, ce serait trop simple ! Un verbe peut en effet être nuancé à l'aide d'adverbes, et il en est de même pour les commandes grâce aux options. Par exemple :

ls-lL'option -l nuance la commande ls en lui précisant qu'on veut une liste détaillée (-l pour "long"). On obtient plus de détails sur lesquels on n'insistera pas ici, mais notons toutefois le fichier tuto-sauvegarde.txt qui est apparu suite à la commande cp de tout-à-l'heure. D'autres options sont possibles, comme ls -S qui précise que les fichiers doivent être triés en fonction de leur taille (-S pour "size").

Certaines options, pour des raisons mnémotechniques, utilisent plusieurs caractères : pour le ls on peut écrire --size au lieu de -s par exemple pour afficher la taille des fichiers (Notons l'utilisation de -- au lieu de -). Remarquons au passage que -s et -S représentent des options différentes !

Note. Ceci est vrai pour le ls du projet GNU, qui est vraisemblablement celui qui se trouve sur votre ordinateur si vous avez par exemple Ubuntu d'installé. Mais sur les systèmes BSD par exemple, les commandes ont rarement des options longues, et le nombre d'options est aussi souvent moindre.

Enfin, certaines options peuvent avoir un argument qui les suit, tout comme la commande a des arguments. C'est à rapprocher avec des expressions comme « liste en triant en fonction de la taille » : le « en fonction de la taille » est un argument de l'option « en triant » de la commande « liste ». En vraie syntaxe cela donne ls --sort size.

On peut mixer les différentes options lorsque cela a un sens, et écrire indifféremment ls --sort size -l ou ls -l --sort size pour obtenir une liste détaillée et triée suivant la taille. Les options courtes peuvent souvent être mises ensemble : par exemple ls -l -S peut être abrégé en ls -lS, d'où le besoin des -- pour distinguer les options longues et courtes.

Voilà, c'est en gros tout ce qu'il faut vraiment savoir sur la syntaxe de la ligne de commande. Reste bien sûr à connaître quelles options peuvent être passées à une commande donnée, et quels sont les arguments qu'elle attend. C'est là que font surface les pages de manuel et la commande man, auxquelles une section est consacrée plus loin.

La console : votre nouveau navigateur de fichiers

Manipulations de base

Comme le lecteur attentif aura peut-être remarqué, il a été question à un moment de dossier ou répertoire courant. Cela tient à ce que lorsqu'on est en ligne de commande, on se situe à un endroit donné de l'arborescence de fichiers, consultable à l'aide de la commande pwd (sans arguments), et qui parfois est aussi affiché dans les informations de l'invite de commande. Au démarrage du terminal pwd affichera quelque chose comme /home/toto qui signifie que le répertoire courant est le sous-répertoire toto du répertoire /home issu de la racine /.

On peut changer le répertoire courant à l'aide de la commande cd (change directory). On a déjà vu que l'on peut copier des fichiers. Il n'en faut pas plus pour se rendre compte que l'on peut effectuer toutes les tâches d'un navigateur de fichiers. Récapitulons (chaque ligne est suivie d'un commentaire après le symbole #) :

Le nouveau-dossier peut être spécifié par le nom du chemin complet, par exemple /home/toto/Documents ou par un chemin relatif comme Documents si le répertoire courant est /home/toto. Ceci vaut aussi pour les noms de fichiers de la commande cp : on manipule donc des chemins, qui peuvent correspondre à un fichier ou un dossier. Notons que le répertoire personnel /home/toto de l'utilisateur toto peut être abrégé en ~ ou $HOME ce qui permet d'écrire aussi cd ~/Documents. Enfin, la commande cd appelée sans argument est équivalente à cd ~.

Une fonctionnalité très pratique pour spécifier les chemins est la complétion automatique avec la touche <tab>. Par exemple on commence par écrire cd Doc puis on presse <tab> ce qui complète en cd Documents s'il n'y a pas d'ambiguïté.

Deux dossiers spéciaux ont un nom particulier : le dossier courant, et le dossier juste au-dessus dans l'arborescence. Le premier s'appelle ., et le deuxième ... Ainsi, pour revenir au dossier parent on écrira :

La commande mv permet de bouger ou renommer des fichiers ou dossiers, et s'utilise comme la commande cp : mv chemin nouveau-chemin. Enfin, la commande rm chemin permet d'éliminer le fichier dont le nom est donné par chemin.

Par principe de précaution, cp et rm ne peuvent pas copier ou éliminer des dossiers entiers et ce qu'ils contiennent si l'on n'utilise pas l'option -r (récursif).

On peut faire des manipulations plus complexes comme copier tous les pdfs à la fois du dossier courant dans le dossier Documents :

grâce à l'astérisque *. En gros *.pdf est un raccourci qui sera remplacé par la liste de tous les fichiers dont le nom termine par .pdf. Donc par exemple si tuto.pdf et autre-tuto.pdf sont les pdfs du dossier courant, *.pdf est équivalent à tuto.pdf autre-tuto.pdf.

La commande mkdir permet de créer un nouveau dossier, et la commande rmdir permet d'éliminer un dossier vide.

Une petite image de petite session de navigation :

naviguerNote. Tout dossier ou fichier a des permissions quant aux droits d'écriture, lecture et exécution, et un propriétaire. Les commandes permettant de gérer ceci sont chmod (change file modes) pour les droits et chown (change owner) pour le propriétaire. Par exemple chmod a+w tuto.txt rend le fichier tuto.txt écrivable (w pour "writable") par n'importe quel utilisateur (a pour "all"), ce qui est probablement une mauvaise idée, dit en passant. L'utilisation de ces deux commandes est détaillée dans les pages man des commandes respectives.

Fichiers d'un format particulier (exemple : images)

Souvent, un navigateur de fichiers vous permettra d'ouvrir une image avec votre logiciel de visualisation par défaut à l'aide d'un double clic sur un fichier contenant une image (toto.jpg ou toto.png par exemple). En ligne de commande pour arriver au même résultat il suffit de lancer le logiciel visionneur d'images sur un fichier donné en argument. On donne ici l'exemple du visionneur d'images feh, mais n'importe lequel (eog, gwenview, ristretto, etc…) fera l'affaire.

Pour lire un pdf ce sera analogue avec des logiciels comme evince, okular, epdfview, zathura… Par exemple avec evince :

Enfin, pour une vidéo par exemple avec vlc ou mplayer :

Notons que si l'utilisateur ne connaît pas le type de fichier, et ne sait pas avec quel logiciel il peut le lire, il peut utiliser la commande xdg-open qui lancera le programme par défaut associé à ce type de fichier. Par exemple :

Le lecteur remarquera que jusqu'à ce qu'il ferme le visionneur d'images, de pdf, ou vidéos, il ne peut plus écrire de commandes, car la ligne de commande attend que l'exécution du programme de visualisation soit terminée. Afin de pouvoir continuer à écrire des commandes sans avoir à fermer le programme de visualisation, on peut utiliser le symbole & en fin de commande, qui correspond exactement à cette demande. Par exemple :

Note. Fermer la fenêtre de l'émulateur de terminal avant le visionneur d'images ou de pdf aura pour conséquence de tout fermer à la fois. Si cela s'avère gênant, la commande peut être précédée de nohup, qui détache complètement du shell l'exécution de la commande (nohup n'est rien d'autre qu'une commande qui prend une autre commande en argument !).

Autres tâches habituelles de type desktop

Dates

La commande date permet d'afficher la date actuelle, et la commande cal permet d'afficher un calendrier. Par défaut seul le mois actuel est affiché, mais l'option -y (year) permet d'afficher le calendrier de toute l'année, et -m (monday) permet de faire commencer les semaines à lundi.

Arrêter/redémarrer

La commande halt permet d'arrêter le système. Les droits d'administrateur étant probablement requis sur votre système pour cette action, il faut probablement faire précéder la commande de sudo. De façon analogue, la commande reboot permet de redémarrer.

Il existe aussi des commandes pour hyberner, suspendre, etc… On renvoie le lecteur à la page man pm-action :

Fermer l'émulateur de terminal

Il suffit de fermer la fenêtre. Mais on peut aussi utiliser la commande exit sans arguments.

Gérer plusieurs écrans (par exemple : vidéoprojecteur)

La commande xrandr permet de facilement gérer les écrans, et un simple xrandr --auto suffira normalement à détecter et configurer un rétroprojecteur par exemple.

Installer/désinstaller des programmes

Ceci se doit d'être fait à l'aide du gestionnaire de paquets en usage dans votre système d'exploitation. Ce peut être par exemple apt-get ou aptitude, ou yum suivant la distribution. Le lecteur est invité à consulter la documentation officielle de sa distribution à ce sujet.

Gérer les processus

Un besoin typique que l'on peut rencontrer est celui de devoir forcer l'arrêt d'un programme qui ne répondrait plus. Un programme en cours d'exécution est appelé processus. La commande top donne une liste des processus les plus actifs, et donne un certain nombre d'informations sur chaque processus, et s'actualise avec le temps. Pour quitter il faut presser la touche q (quit) et h (help) fournit un écran d'aide. Les informations plus importantes sont le nom de la commande ayant donné lieu à l'existence du processus, l'utilisation du CPU (processeur), et le numéro PID (process identifier), identifiant unique qui caractérise le processus.

Supposons que l'on a démarré firefox, par exemple en tapant la commande firefox &. Alors en utilisant top avec l'option -u toto (-u pour "user"), on obtiendra des informations sur tous les processus lancés par l'utilisateur toto, ce qui donnera :

topLes premières lignes donnent des informations générales sur le système, et ensuite vient la liste des processus, ici bash (qui fournit la ligne de commande) et firefox. En général il y aura beaucoup plus de processus, mais ici on a simplifié pour des raisons pédagogiques.

Une autre commande avec des objectifs similaires mais non intéractive est ps, on renvoie à sa page man pour son utilisation.

Supposons par exemple que firefox ne répond plus. Le numéro PID de firefox est 9179 donc on peut utiliser la commande :

Ce qui essaiera de mettre fin à l'application gentiment. Si cela n'a pas d'effet c'est que l'option -9 de kill doit être tentée. Souvent, lorsque le programme qui pose souci a un nom particulier, il est plus pratique d'utiliser la commande pkill qui fonctionne similairement à kill (et accepte aussi l'option -9) mais prend un nom et non un PID en argument.

Le lecteur est invité à vérifier avec top que le processus firefox n'apparaît plus.

Et maintenant ?

En savoir plus sur les pages man

Les pages de manuel peuvent être consultées à l'aide de la commande man :

pour connaître tous les détails sur les options et arguments que peut admettre la commande ls. La touche h permet d'obtenir un écran d'aide sur les touches utilisables. Les plus utiles sont les touches directionnelles pour monter ou descendre (ou les touches j et k), et les touches u (up) et d (down) pour avancer ou reculer d'un demi-écran. On donnera en annexe quelques conseils pour bien comprendre une page de manuel. Lorsqu'on ne connaît pas encore le nom de la commande que l'on cherche, on peut tenter sa chance avec la commande apropos.

qui donnera une liste de pages de manuels en rapport avec ce mot clé, mais pour une utilisation simple c'est aussi bien de se faire une petite liste à la main sur un papier, ou sur un simple fichier de texte, et ça évite d'être débordé par le nombre de commandes.

Une page man est toujours structurée suivant un même schéma. Elle est organisée en sections, dont les plus importantes sont la section NOM (NAME en anglais), la section SYNOPSIS et la section DESCRIPTION. La section NOM donne juste le nom du programme et une brève phrase de description. La section DESCRIPTION donne une description détaillée de la commande, généralement suivie par la description des différentes options. La section SYNOPSIS est un peu particulière : elle donne formellement de l'information sur la syntaxe qu'admet la commande. Par exemple pour la commande ls on a quelque chose de simple comme :

Les mots option et file spécifient s'il s'agit d'une option ou d'un nom de fichier. Le fait qu'ils soient entre crochets signifie qu'ils sont optionnels. En effet, les options pour ls sont toutes optionnelles, et ls sans arguments renvoie, on l'a vu, la liste des fichiers et dossiers dans le dossier courant, tandis que ls /home/toto/Documents donnera la liste dans le dossier Documents. Enfin, les trois petits points signifient qu'il peut y avoir autant d'options ou de fichiers qu'on veut. A priori l'ordre a une importance, et les options doivent venir avant les noms de fichiers, mais souvent les commandes permettent en pratique de mélanger arguments et options.

Parfois, lorsque le nombre d'options n'est pas trop important leur liste sera directement donnée dans la section SYNOPSIS. Pour un ls très basique on pourrait par exemple avoir :

Il peut aussi y avoir plusieurs lignes dans cette section, correspondant à des usages différents d'une même commande. On verra aussi parfois la syntaxe --sort=size pour les options, avec un symbole = au lieu d'un espace. Parfois, les mots comme file seront écrits <file>, en majuscules ou d'une autre façon similaire, mais en général on retrouve facilement le schéma commun.

Note. La qualité des pages man peut beaucoup varier d'un logiciel à un autre, ou d'un système d'exploitation à un autre.

En savoir plus sur le shell

Il arrivera par exemple qu'en listant les fichiers dans un dossier, la liste étant trop longue, elle ne loge pas entièrement à l'écran. Dans ces cas-là il faut utiliser un pageur (comme less) à l'aide d'une pipe |. Par exemple :

ls /usr/share donnera la liste des fichiers qui se trouvent dans le dossier /usr/share, et l'enverra grâce au | au programme less afin de pouvoir parcourir la liste des fichiers avec commodité. less est le même programme qui sert à la lecture des pages man.

Une petite astuce dans le même esprit : supposons que pour une raison ou une autre, on veuille garder dans un fichier la sortie affichée par une commande. Dans ce cas on a besoin de ce qu'on appelle une redirection de la sortie, qu'on effectue à l'aide du symbole >. Par exemple :

écrira un fichier texte nommé fichier.txt qui contiendra la date actuelle, au lieu d'afficher la sortie de la commande date. Attention : si le fichier fichier.txt existait déjà, son contenu précédent aura été effacé ! On peut ensuite lire le fichier par exemple avec la commande less. Si l'on voulait ajouter successivement des dates à un même fichier, il nous faudrait utiliser le symbole de redirection >>, qui ajoute du texte à un fichier déjà existant, mais sans remplacer le contenu existant :

Un autre problème typique est celui des espaces dans les noms de fichiers. En effet, si un dossier s'appelle tutoriel pour la ligne de commande, la tentative pour se déplacer dessus avec

sera vouée à l'échec, car la commande cd ne verra que tutoriel en argument. Une première méthode consiste à écrire le nom du dossier entre guillements :

ou bien d'utiliser le caractère d'échappement \ pour les espaces afin qu'ils soient interprétés littéralement :

Une bonne pratique cependant pour éviter ce genre d'inconvenances est de ne pas utiliser d'espaces pour les noms de fichiers ou dossiers.

Note. D'un système d'exploitation à un autre le programme du shell n'est pas forcément le même. Sur la plupart des distributions GNU/Linux (comme Ubuntu), le shell par défaut est bash. Ceci dit, la plupart des shells ont une base commune (qui inclut tout ce qui est présent dans ce tutoriel). C'est pour cela que pour une explication plus détaillée des fonctionnalités, il est sans doute plus approprié de lire dans un premier temps la page man d'un shell minimal comme dash ou de taille moyenne comme ksh que celles de bash ou zsh qui sont beaucoup plus longues car détaillent de nombreuses extensions exotiques.

Logiciels qui s'intègrent bien avec la console

Comme on l'a vu, la ligne de commande peut servir de point névralgique à une utilisation de son desktop, permettant de lancer les différents logiciels dont on a besoin, en plus d'intégrer entre autres les fonctionnalités de navigateur de fichiers et gestionnaire de processus. De ce constat il s'avère parfois commode d'utiliser des logiciels qui s'intègrent bien dans cet environnement, et ne nécessitent pas forcément l'ouverture d'une nouvelle fenêtre, ou d'alterner trop souvent entre clavier et souris.

Par exemple le logiciel task permet de maintenir son agenda à jour en ligne de commande, et est bien documenté grâce à ses pages de manuel et tutoriels.

Notons aussi l'existence des logiciels utilisant la bibliothèque ncurses, qui permet d'afficher des graphismes limités mais simples et intuitifs dans la fenêtre de l'émulateur de terminal. Par exemple le logiciel mutt est un client mail qui utilise cette bibliothèque, sa configuration étant un peu délicate le lecteur est renvoyé aux nombreux tutoriels trouvables sur le web. On peut mentionner moc, logiciel simple pour écouter de la musique, qui a quelques équivalents du même type, ou le logiciel alsamixer servant à configurer des paramètres de son.

Certains de ces logiciels se configurent à l'aide d'un fichier de configuration à éditer avec un éditeur de texte quelconque (gedit, kate,…). Le lecteur pourra aussi considérer l'utilisation d'un éditeur de texte en mode texte dans le terminal comme nano ou mg, ou s'il a le courage un éditeur de texte plus complet comme vim ou emacs.

Enfin, le lecteur vraiment curieux pourra se laisser tenter par un multiplexeur de terminal comme tmux, qui permet d'utiliser plusieurs terminaux dans une même fenêtre, et permet par exemple de copier facilement du texte d'un terminal à un autre, et de passer rapidement d'un terminal à un autre à l'aide de raccourcis clavier.

Conclusion

Ce tutoriel aura, espérons, permis aux personnes intimidées par la ligne de commande de se sentir plus à l'aise maintenant, et d'avoir découvert de nouveaux usages à celle-ci pas forcément très connus de tous.

On peut regretter que certaines tâches demandent encore un minimum de connaissances techniques en ligne de commande, mais rien ne dit que dans le futur ces quelques difficultés ne pourront pas être surmontées, permettant au moins technicien d'entre nous une utilisation de type desktop passant principalement par la ligne de commande si tel est son souhait.

Remarque dactylographique. Notons qu'un des motifs qui peuvent rebuter un débutant dans la ligne de commande, est le simple fait qu'il faut écrire des commandes, et qu'écrire demande en soi une certaine compétence avec le clavier sous peine de se sentir mal à l'aise, lent, et d'avoir peur de faire des erreurs. C'est pour ça que sans doute un apprentissage de la dactylographie au clavier à l'aide par exemple d'un logiciel comme klavaro est une bonne idée, voire un prérequis pour une utilisation intensive des notions abordées dans ce tutoriel. C'est aussi un bon investissement en général pour quiconque ayant à écrire des textes substantiels de temps en temps (mail, rapport, etc…).


Écrit par Anaseto (contact), publié sous licence cc-by-sa. Tout un tas d'idées (images, xdg-open, pm-utils, lutte contre le tldr,…) proviennent de judicieuses remarques sur le forum de linuxfr :

https://linuxfr.org/forums/astucesdivers/posts/tutoriel-sur-la-ligne-de-commande

  • À propos de
  • Passionnée d'informatique, de logiciels libres, de graphisme, touche à tout, curieuse et têtue comme une bretonne.

    Diplomée d'une licence de biologie cellulaire et moléculaire et du master de bioinformatique de Rennes; précédemment stagiaire longue durée à l'EMBL-EBI à Cambridge UK puis ingénieur d'étude au laboratoire d'informatique médicale de Rennes et actuellement doctorante en biologie/bioinformatique à l'université de Genève.

Un commentaire sur “Introduction à la ligne de commande

  1. Rien à dire ... très bien expliqué.

    Merci beaucoup 😀

Laisser un commentaire