Accessibility Tools

- Le blog participatif de bioinformatique francophone depuis 2012 -

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

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

après le dollar de l'invite de commande :

ls

qui liste des fichiers et dossiers dans le répertoire courant. Ici on voit qu'il y a un dossier

et un fichier

. 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

ou

, 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 :

$ cp tuto.txt tuto-sauvegarde.txt

qui fait une copie du fichier

sur un nouveau fichier nommé

. 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-l

L'option

nuance la commande

en lui précisant qu'on veut une liste détaillée (

pour "long"). On obtient plus de détails sur lesquels on n'insistera pas ici, mais notons toutefois le fichier

qui est apparu suite à la commande

de tout-à-l'heure. D'autres options sont possibles, comme

qui précise que les fichiers doivent être triés en fonction de leur taille (

pour "size").

Certaines options, pour des raisons mnémotechniques, utilisent plusieurs caractères : pour le

on peut écrire

au lieu de

par exemple pour afficher la taille des fichiers (Notons l'utilisation de

au lieu de

). Remarquons au passage que

et

représentent des options différentes !

Note. Ceci est vrai pour le

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

.

On peut mixer les différentes options lorsque cela a un sens, et écrire indifféremment

ou

pour obtenir une liste détaillée et triée suivant la taille. Les options courtes peuvent souvent être mises ensemble : par exemple

peut être abrégé en

, 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

, 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

(sans arguments), et qui parfois est aussi affiché dans les informations de l'invite de commande. Au démarrage du terminal

affichera quelque chose comme

qui signifie que le répertoire courant est le sous-​répertoire

du répertoire

issu de la racine

.

On peut changer le répertoire courant à l'aide de la commande

(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

) :

$ pwd           # afficher le répertoire courant (print working directory)
$ ls # lister les fichiers et dossier dans le répertoire courant
$ cp fichier nouveau-fichier # copier
$ cd nouveau-dossier # se déplacer dans l'arborescence vers un nouveau dossier

Le

peut être spécifié par le nom du chemin complet, par exemple

ou par un chemin relatif comme

si le répertoire courant est

. Ceci vaut aussi pour les noms de fichiers de la commande

on manipule donc des chemins, qui peuvent correspondre à un fichier ou un dossier. Notons que le répertoire personnel

de l'utilisateur toto peut être abrégé en

ou

ce qui permet d'écrire aussi

. Enfin, la commande

appelée sans argument est équivalente à

.

Une fonctionnalité très pratique pour spécifier les chemins est la complétion automatique avec la touche

. Par exemple on commence par écrire

puis on presse

ce qui complète en

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 :

$ cd ..

La commande

permet de bouger ou renommer des fichiers ou dossiers, et s'utilise comme la commande

:

.

Enfin, la commande

permet d'éliminer le fichier dont le nom est donné par

.

Par principe de précaution,

et

ne peuvent pas copier ou éliminer des dossiers entiers et ce qu'ils contiennent si l'on n'utilise pas l'option

(récursif).

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

:

$ cp *.pdf Documents/

grâce à l'astérisque

. En gros

est un raccourci qui sera remplacé par la liste de tous les fichiers dont le nom termine par

. Donc par exemple si

et

sont les pdfs du dossier courant,

est équivalent à

.

La commande

permet de créer un nouveau dossier, et la commande

permet d'éliminer un dossier vide.

Une petite image de petite session de navigation :

naviguer

Note. 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

(change file modes) pour les droits et

(change owner) pour le propriétaire. Par exemple

rend le fichier

écrivable (

pour "writable") par n'importe quel utilisateur (

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.

$ feh toto.jpg

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

$ evince toto.pdf

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

$ mplayer toto.ogg

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

qui lancera le programme par défaut associé à ce type de fichier. Par exemple :

$ xdg-open toto.ogg

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 :

$ evince toto.pdf &

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

, qui détache complètement du shell l'exécution de la commande (

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

permet d'afficher la date actuelle, et la commande

permet d'afficher un calendrier. Par défaut seul le mois actuel est affiché, mais l'option

(year) permet d'afficher le calendrier de toute l'année, et

(monday) permet de faire commencer les semaines à lundi.

$ cal -m
March 2014
Mo Tu We Th Fr Sa Su
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

Arrêter/​redémarrer

La commande

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

. De façon analogue, la commande

permet de redémarrer.

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

:

$ man pm-action

Fermer l'émulateur de terminal

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

sans arguments.

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

La commande

permet de facilement gérer les écrans, et un simple

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

ou

, ou

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

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

(quit) et

(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

. Alors en utilisant

avec l'option

(

pour "user"), on obtiendra des informations sur tous les processus lancés par l'utilisateur toto, ce qui donnera :

top

Les premières lignes donnent des informations générales sur le système, et ensuite vient la liste des processus, ici

(qui fournit la ligne de commande) et

. 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

, 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 :

$ kill 9179

Ce qui essaiera de mettre fin à l'application gentiment. Si cela n'a pas d'effet c'est que l'option

de

doit être tentée. Souvent, lorsque le programme qui pose souci a un nom particulier, il est plus pratique d'utiliser la commande

qui fonctionne similairement à kill (et accepte aussi l'option

) mais prend un nom et non un PID en argument.

$ pkill firefox

Le lecteur est invité à vérifier avec

que le processus

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 ls

pour connaître tous les détails sur les options et arguments que peut admettre la commande

. La touche

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

et

), et les touches

(up) et

(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 mot-clé

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

on a quelque chose de simple comme :

SYNOPSIS
ls [option]... [file]...

Les mots

et

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

sont toutes optionnelles, et

sans arguments renvoie, on l'a vu, la liste des fichiers et dossiers dans le dossier courant, tandis que

donnera la liste dans le dossier

. 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

très basique on pourrait par exemple avoir :

SYNOPSIS
ls [-lS] [--sort word] [file]...

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

pour les options, avec un symbole

au lieu d'un espace. Parfois, les mots comme

seront écrits

, 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

) à l'aide d'une pipe

. Par exemple :

$ ls /usr/share | less

donnera la liste des fichiers qui se trouvent dans le dossier

, et l'enverra grâce au

au programme

afin de pouvoir parcourir la liste des fichiers avec commodité.

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 :

$ date > fichier.txt

écrira un fichier texte nommé

qui contiendra la date actuelle, au lieu d'afficher la sortie de la commande

. Attention : si le fichier

existait déjà, son contenu précédent aura été effacé ! On peut ensuite lire le fichier par exemple avec la commande

. 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 :

$ date >> fichier.txt

Un autre problème typique est celui des espaces dans les noms de fichiers. En effet, si un dossier s'appelle

, la tentative pour se déplacer dessus avec

$ cd tutoriel pour la ligne de commande

sera vouée à l'échec, car la commande cd ne verra que

en argument. Une première méthode consiste à écrire le nom du dossier entre guillements :

$ cd 'tutoriel pour la ligne de commande'

ou bien d'utiliser le caractère d'échappement

pour les espaces afin qu'ils soient interprétés littéralement :

$ cd tutoriel\ pour\ la\ ligne\ de\ commande

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/​f​o​r​u​m​s​/​a​s​t​u​c​e​s​d​i​v​e​r​s​/​p​o​s​t​s​/​t​u​t​o​r​i​e​l​-​s​u​r​-​l​a​-​l​i​g​n​e​-​d​e​-​c​o​m​m​a​nde

Auteur /​ autrice

  • Isabelle S. (ZaZo0o)

    Mi-​bio, mi-​bioinfo, et re-​mi-​bio derrière. Je suis actuellement en postdoc en épigénomique développementale de la Drosophile à l'IGFL (Lyon).
    J'ai suivi une licence de biologie cellulaire et génétique et un master de bioinformatique à l'université de Rennes, puis j'ai travaillé comme ingé d'étude en développement web pendant 1 an et demi. Enfin j'ai effectué un doctorat en bioinformatique à l'université de Genève (single-​cell RNA-​seq de la gonade de souris en développement).

    Voir toutes les publications


Commentaires

Une réponse à “Introduction à la ligne de commande”

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

    Merci beaucoup 😀

Laisser un commentaire

Pour insérer du code dans vos commentaires, utilisez les balises <code> et <\code>.