Dernière révision : 2015.
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.
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 :
qui 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 d’un verbe, il nous faut un ou plusieurs compléments d’objets, des objets sur lesquels porte l’ordre : c’est le rôle des arguments. 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 :
L’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
,
qui seront détaillées dans la section
En savoir plus sur les pages man
plus loin.
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 :
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
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.
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 !).
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
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 hiberner, suspendre, etc. On renvoie le
lecteur à la page man
pm-action
(seulement sous Linux) :
$ man pm-action
Il suffit de fermer la fenêtre. Mais on peut aussi utiliser la commande
exit
sans arguments.
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.
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.
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 :
Les 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.
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.
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
où
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.
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.
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, 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