Un interpréteur de commandes est un processus dont le rôle est de fournir une interface textuelle avec le système d'exploitation.
Un interpréteur de commandes exécute en boucle la séquence d'actions suivante :
Depuis les débuts des premiers Unix, de nombreux interpréteurs ont été
créés, disposant de fonctionnalités de plus en plus puissantes à
mesure que la puissance des ordinateurs augmentait :
sh
, csh
, ksh
, zsh
,
bash
... Par défaut, nous utilisons bash
pour la configuration initiale des comptes des nouveaux élèves, et
c'est donc lui que nous allons étudier.
nom_commande -options arguments
.
La touche <ENTRÉE> lance l'interprétation de la commande.
Premières commandes à taper :
date
: affiche la date courante sur le système ;
id
: voir son numéro d'utilisateur (unique) et à
quel(s) groupe(s) on appartient ;
who
: voir qui est connecté sur la machine, et
qu'il y a autant de connexions que de fenêtres d'interpréteurs ;
hostname
: voir le nom de la machine sur laquelle on
est connecté ;
ps
: parler du numéro de processus, unique, servant
à identifier univoquement tous les processus du système. Essayer
alors avec l'option -f
;
echo
: affiche à l'écran. Essayer echo
"Bonjour"
et echo -n "Bonjour"
;
Les interpréteurs de commandes modernes permettent une gestion avancée de l'historique (qui permet de faire manipuler les touches <CTRL>) :
C-p
(previous) : accès au texte de la commande
précédente ;
C-n
(next) : retour au texte de la commande
suivante ;
C-b
(backward) : recul d'un caractère ;
C-f
(forward) : avance d'un caractère ;
C-d
(delete) : suppression du caractère
courant ;
C-k
(kill) : supprime et mémorise le texte depuis
la position du curseur jusqu'à la fin de la ligne ;
C-y
(yank) : insertion d'un texte précédemment
supprimé ;
C-r
(reverse search) : recherche arrière dans
l'historique ;
C-a
: va en début de ligne ;
C-e
(end) : va en fin de ligne ;
C-c
(cancel) : annulle la frappe de la commande en
cours de saisie ;
history
: affiche l'historique des commandes tapées ;
!numéro
: relance la commande de numéro donné dans
l'historique ;
On peut séparer deux commandes sur la même ligne avec un
point-virgule : echo -n "Bonjour " ; echo "tout le monde"
.
On peut grouper plusieurs commande en une seule avec des
parenthèses :
(echo -n "Bonjour " ; echo "tout le monde")
.
L'invite de commande ne revient que quand la commande est terminée,
afin que l'utilisateur sache exactement où il en est. On peut s'en
rendre compte avec une commande prenant du temps, comme :
sleep 5 ; echo "Fini"
.
Lorsqu'on veut lancer une commande et pouvoir utiliser l'interpréteur
avant la fin de celle-ci, on termine la commande par un
&
. Par exemple, avec la commande
précédente :
(sleep 5 ; echo "Fini") &
.
On voit que, quand la commande exécutée en arrière-plan est terminée,
l'interpréteur de commande nous en informe lors du prochain appui de
la touche <ENTRÉE>. On a besoin des parenthèses car sinon c'est
juste la dernière commande qu'il lance en arrière-plan, le
sleep
étant lui bloquant vis-à-vis de
l'interpréteur : l'interpréteur attend la fin du
sleep
avant de lancer le echo
en
arrière-plan.
Lancer un xterm en tâche de fond avec xterm &
.
Lancer un xeyes dans le nouveau shell. On ne le voit pas dans
l'ancienne fenêtre, mais avec ps -f -u login
on peut le voir.
Pour terminer l'interpréteur de commandes, on peut soit fermer la
fenêtre correspondante, soit taper la commande exit
.