Ligne de commande : Introduction

De Ensiwiki
Aller à : navigation, rechercher

Introduction

Au début était le verbe

Voici un petit tutorial sur la manipulation du terminal, aussi connu sous les noms de shell, console, bash, ou ligne de commande... Au lancement, vous devez voir ça :

bash-3.2$

Tous ce qui est situé avant le $ est ce qu'on appelle l'invite de commande, ici bash-3.2$. Ce texte est personnalisable, donc ce n'est pas garanti qu'il ressemble à ça. Souvent les gens aiment bien le remplacer par l'heure, ou d'autres infos utiles, ou alors juste un > ou un $.

Vous pouvez saisir du texte au clavier, qui s'écrira après l'invite de commande. Ce texte est appelé la commande, à proprement parler. Lorsqu'on appuie sur Entrée, toute la commande qui a été tapé va être envoyée à l'interpréteur de commandes, qui va effectuer l'action décrite.

Si vous essayez par exemple de taper :

bash-3.2$ Bonjour. Dis moi qui je suis !

L'interpréteur va vous renvoyer un message d'erreur, car ce n'est pas une commande valide. Par contre, si vous essayez :

bash-3.2$ whoami
kenobiow
bash-3.2$

(de l'anglais "Who am I?"), bash vous dira gentiment qui vous êtes, selon lui (c'est à dire votre login unix).

Le premier mot d'une ligne de commande est (presque tout le temps) le nom d'un programme. Certains renvoient des résultats, qui s'affichent alors dans votre terminal. C'est le cas pour whoami, qui renvoie votre login, avant que bash ne réaffiche l'invite de commande.

Il faut savoir que vous pouvez quasiment tout faire depuis cette invite de commande : vos projets scolaires, commander une pizza, en passant par redémarrer un ordinateur à l'autre bout de la planète. C'est pour cela qu'on l'utilise encore : elle fait des choses qui sont plus difficiles/maladroites à faire avec un système graphique.

La "phrase" du shell

De façon générale, les commandes se présentent sous la forme suivante:

 nom_du_programme options fichiers_sur_lesquels_effectuer_l'opération

Les options sont des signes cabalistiques de la forme -X, -xzvf, ou --help. Chaque programme à ses options particulières, et elles peuvent être sous n'importe quelle forme. Mais dans le monde UNIX, la plupart du temps, les programmes respectent la convention suivante.

Il existe 2 type d'options :

  • Les options courtes, un tiret suivi d'un caractère. Ces options peuvent souvent être "empilées" : -R -o -v devient -Rov pour être plus rapide.
  • Les options longues, 2 tirets suivi d'un mot. C'est souvent plus clair qu'une lettre dont on oublie vite le sens.

Le même comportement du programme peut généralement s'obtenir via une option longue ou via une option courte (qui est l'initiale de l'option longue correspondante). Par exemple : -r est souvent équivalent à --recursive

Quand vous envoyez le texte d'une commande à un ami par exemple, c'est préférable d'utiliser les options longues : lui ne connait peut-être pas toutes les options par cœur, alors que le texte entier suffit souvent à comprendre le sens.

Les astuces des fainéants : Shell adéquat

Bash est en effet un système plutôt intelligent. Par exemple il garde en mémoire tout un tas de trucs, pour vous faciliter la vie. Vous pouvez bien sûr vous passer de ces astuces, mais tôt ou tard, vous y viendrez. Donc autant commencer à gagner du temps dès maintenant.

L'historique de commandes

Vous vous êtes plantés d'une lettre dans votre dernière commande ??? Bash a bonne mémoire ! Appuyez sur la Flèche haut et vous verrez défiler vos commandes précédentes. La Flèche bas a l'effet inverse (mais elle s'arrête à la dernière commande... Bash n'arrive pas encore à trouver les commandes que vous n'avez pas encore tapées).

L'historique des résultats

Si vos commandes on rempli tout l'écran, il se peut que vous ne puissiez plus voir les résultats qui vous intéressent. Heureusement vous pouvez remonter le temps avec Majuscule + Page précédente. Inversement vous pouvez redescendre avec Majuscule + Page suivante

La complétion automatique

Lorsqu'il ne reste que quelques lettres d'un mot à taper, Bash peut finir le travail pour vous. En effet, il peut souvent détecter la liste des possibilités. Appuyez sur la touche Tabulation pour qu'il finisse votre mot.

Si vous n'avez pas tapé assez de lettres et qu'il reste plusieurs fins possibles, Bash émettra un petit bip pour vous le signaler.

  • Soit vous entrez quelques lettres de plus, et vous réappuyez sur Tabulation.
  • Soit vous avez un doute sur la suite, et vous appuyez une seconde fois sur Tabulation. Bash vous affichera alors la liste des choix restants. S'il y a vraiment trop de possibilités, il vous demandera Display all 42 possibilities? (y or n). A vous de voir si ça ne vaut pas le coup d'entrer quelques lettres de plus, et d'appuyer sur y pour yes ou n pour no.

Les cartes sauvages : wildcards

Pour les noms de fichiers/dossiers, bash à un interpréteur simplifié d'expressions régulières (si vous avez la flemme de lire l'article c'est pas grave, vous allez vite comprendre). Prenons un répertoire contenant quelque fichiers.

 bash-3.2$ ls -A
 .svn chat.off  chat.off~  elephant.off  elephant.off~  elephant.ply

Si on entre :

 bash-3.2$ echo *
 chat.off chat.off~ elephant.off elephant.off~ elephant.ply

On peut constater que la première chose que fait bash, avant d'interpréter la commande, consiste a remplacer ces fameux wildcards (ici le *) par autre chose (ici : les fichiers non cachés du répertoire courant).


On peut combiner l'étoile avec des caractères "normaux". L'étoile correspond alors à n'importe quelle suite de caractères d'un nom de fichier.

 bash-3.2$ echo *~
 chat.off~ elephant.off~

Ou encore:

 bash-3.2$ echo *at*
 chat.off chat.off~

Plus tordu maintenant :

 bash-3.2$ echo *test
 *test

Hé oui ! Quand bash ne trouve rien pour remplacer, il laisse tel quel. Pensez-y, car cela pose parfois problème. (On s'attend souvent à ce qu'il ne renvoie rien. Pour ce faire, mieux vaut utiliser find et grep)

Un autre caractère que bash peut substituer est le ? point d'interrogation, qui correspond à un seul caractère

 bash-3.2$ echo ?hat*
 chat.off chat.off~
 bash-3.2$ echo ?at*
 ?at*

La Reverse I-search

Un peu moins indispensable, mais aussi bien pratique. Vous pouvez faire une recherche dans les commandes que vous avez entrées. Appuyez sur Ctlr + R et tapez ce dont vous vous rappelez (pas forcement le début). Cela vous affichera la dernière commande en date qui contient le-dit texte. Vous pouvez la valider par Entrée, ou la modifier en pressant Flèche droite ou Flèche gauche.

Vous vous apercevrez vite que les commandes les plus longues sont celles que l'on tape le moins souvent (et inversement). La Reverse I-search évite juste d'avoir à appuyer 250 fois sur Flèche haut.

Le système de fichiers : Navigation in a nutShell

Le Shell fait aussi office de navigateur de fichiers : il permet de consulter, d'organiser et de modifier l'arborescence de fichiers. Chaque commande que vous lancez est en fait exécutée depuis un dossier du disque dur.

pwd : print working directory

Cette commande vous dira où vous êtes dans votre arborescence de fichiers : le dossier courant.

cd : change directory

cd permet se déplacer d'un répertoire à l'autre. cd mon_repertoire va vous emmener dans mon_repertoire. ce répertoire peut être soit un nom de dossier absolu, soit un nom relatif par rapport au dossier courant.

ls : list

La commande ls nom_de_fichier vous affiche... le nom du fichier! Pas très utile à première vue, mais vous pouvez demander à ls d'être plus loquace avec l'option -l. ls -l fichier vous indiquera les autorisations, le propriétaire, la taille, la date de dernière modification ... du fichier.

Si vous utilisez ls sans spécifier de fichier, il vous donnera la liste des fichiers, et dossiers, présents dans le dossier en cours. C'est 'ailleurs l'utilisation principale de ls. Si vous voulez en plus afficher les fichiers et dossiers cachés (c'est-à-dire dont le nom commence par un point) c'est l'option -A

Un grand classique est donc :

 ls -lA

mkdir : make directory

Pas grand chose à dire. mkdir mon_repertoire crée le dossier mon_repertoire. Ici aussi le nom de répertoire indiqué peut être absolu ou relatif au dossier courant.

rmdir : remove directory

C'est l'opération inverse de mkdir : rmdir mon_repertoire efface le répertoire du disque. En pratique on n'utilise jamais cette commande, car elle ne s'applique que si le dossier est vide. On préfère rm qui permet d'effacer des dossiers remplis.

rm

Si vous voulez supprimer un fichier, c'est rm fichier qu'il faut utiliser. Attention, il n'y a pas de corbeille avec rm : ce qui est supprimé est quasiment irrécupérable.

Spécifique EnsimagHeureusement, l'Ensimag dispose d'un système de sauvegarde et d'archivage ! Voir Dépannage à l'Ensimag en cas de problème.


On se rend vite compte qu'il est laborieux de supprimer une répertoire non vide : il faut commencer par supprimer tous les fichiers, puis tous les dossiers en commencent au plus "bas"... Heureusement rm comprend l'option -R pour "recursive". Il va lui même s'occuper de faire tout ça.

Si vous avez des problèmes de droits il se peut que rm vous demande une confirmation pour chaque fichier, ce qui peut être ingérable si vous voulez supprimer beaucoup de fichiers. L'option -f (pour "force") est là pour ça : elle force la suppression sans vous demander votre avis.

Enfin vous aurez constaté que rm n'affiche rien. Si vous voulez qu'il soit plus amical, l'option -v (pour "verbose") le rendra plus bavard.

L'utilisation standard est donc

 rm -Rvf mon_dossier_a_supprimer

Commandes minimum de survie

cat, head et tail

cat nom_de_fichier vous affiche le contenu du fichier (ou des fichiers si vous en demandez plusieurs). Head et tail font la même chose, mais en se limitant au début ou à la fin du fichier (on peut spécifier le nombre de lignes via l'option -n )

 bash-3.2$ cat Readme.txt
 Bravo, vous m'avez lu !
 bash-3.2$
 bash-3.2$ tail -n 2 fichier_super_long.txt
 Merci à tous d'avoir lu ce rapport très long sur un sujet dont tout le monde se moque.
 Au revoir....
 bash-3.2$

more or less

more et less sont des pagers, c'est-à-dire qu'ils vous permettent de voir les longs fichiers de texte page par page, ou plutôt, dans notre cas, écran par écran. Les commandes utiles une fois more FICHIER ou less FICHIER lancé sont : q pour quitter et SPC (la touche Espace) pour faire défiler.

Vers l'infini et au delà

Quand vous serez familier avec tous les outils décrits ici, vous aurez déjà de quoi survivre sur un Terminal. Mais sachez que ce n'est que le strict minimum : si vous avez une tâche répétitive à exécuter, bash peut forcement le faire pour vous. Pour approfondir un peu vous pouvez passer au niveau 2.