Introduction à la ligne de commande

Lan­gage : Shell
Niveau : Grand débu­tant

Ce tuto­riel n'a ori­gi­nel­le­ment pas été écrit ni pour ce blog, ni pour des bio­in­for­ma­ti­ciens, (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 fami­lia­ri­ser avec la ligne de com­mande et sera sûre­ment très utile pour par exemple des bio­lo­gistes qui veulent s'essayer à la bio­in­for­ma­tique.

L'objectif de ce tuto­riel est de démys­ti­fier cet outil qu'est la ligne de com­mande, et consti­tue d'abord une intro­duc­tion à celui-ci. Ensuite on rentre plus dans le détail, et on voit com­ment uti­li­ser la ligne de com­mande comme navi­ga­teur de fichiers. Dans un troi­sième temps, on essaie de don­ner un pano­ra­ma de cer­taines des tâches les plus cou­rantes (dates, calen­drier, gérer les pro­ces­sus, etc…) qui peuvent être gérées éga­le­ment en ligne de com­mande. Une der­nière par­tie est consa­crée à quelques remarques et pistes d'approfondissement.

Les para­graphes débu­tant par « Note. » dis­cutent de détails (tech­niques, his­to­riques,…) qui ne sont pas néces­saires à la com­pré­hen­sion du tuto­riel.

Introduction

Tout d'abord, qu'est-ce que la ligne de com­mande ? Pour le savoir il faut pour com­men­cer lan­cer un ému­la­teur de ter­mi­nal (l'application gnome-ter­mi­nal sur Gnome, kon­sole sur KDE). Le lec­teur est invi­té à le faire, afin de pou­voir tes­ter au fur et à mesure de façon active les exemples qui seront pro­po­sés.

Une fois un ému­la­teur de ter­mi­nal ouvert, on se retrouve donc en ligne de com­mande : c'est‑à dire une invite de com­mande, géné­ra­le­ment un éven­tuel bout de texte avec des infos sui­vi d'un sym­bole comme

$

,

>

, ou

#

, ce qui donne par exemple

toto@ordimaison $

ou tout sim­ple­ment

$

. On se retrouve alors à deman­der des choses à la machine dans un lan­gage pré­sen­tant des simi­la­ri­tés avec le lan­gage natu­rel, spé­cia­le­ment avec le mode impé­ra­tif.

On doit en effet écrire des phrases qui sont des ordres. Tout ordre a besoin d'un verbe, on parle bien sûr des com­mandes. Ce qui donne par exemple en écri­vant

ls

après le dol­lar de l'invite de com­mande :

lsqui liste des fichiers et dos­siers dans le réper­toire cou­rant. Ici on voit qu'il y a un dos­sier

Documents

et un fichier

tuto.txt

. Remar­quons qu'après la com­mande, on reçoit une nou­velle invite de com­mande.

Chaque com­mande est en géné­ral en fait le nom d'un pro­gramme qui se trouve géné­ra­le­ment dans le dos­sier

/bin

ou

/usr/bin

, hor­mis quelques com­mandes basiques qui sont par­fois inté­grées au pro­gramme four­nis­sant l'interface en ligne de com­mande (le shell).

Mais cer­tains ordres ont besoin de plus qu'un verbe, il nous faut un ou plu­sieurs com­plé­ments d'objets, des objets sur lequels porte l'ordre : c'est le rôle des argu­ments. Par exemple :

$ cp tuto.txt tuto-sauvegarde.txt

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

#

) :

$ 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

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 :

$ cd ..

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

:

$ cp *.pdf 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.

$ 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

xdg-open

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

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.

$ 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

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

:

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

$ kill 9179

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.

$ pkill firefox

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

:

$ man ls

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

.

$ 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

ls

on a quelque chose de simple comme :

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

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 :

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

--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 | less 

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 :

$ date > fichier.txt

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

$ date >> fichier.txt

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

$ cd tutoriel pour la ligne de commande

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 :

$ 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/forums/astucesdivers/posts/tutoriel-sur-la-ligne-de-commande



Pour continuer la lecture :


Commentaires

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

  1. Rien à dire … très bien expli­qué.

    Mer­ci beau­coup 😀

Laisser un commentaire