Sommaire

[masquer]

L'instrument du pouvoir suprême...

Vous entendrez plus d'une fois quelqu'un entonner la complainte sur les « arcanes » de la « ligne de commande », qui serait « dépassée » etc. etc. et selon laquelle les utilisateurs, et les systèmes d'exploitation eux-mêmes, feraient aussi bien de s'en débarrasser...

En fait, il est parfaitement possible d'utiliser Linux sans connaître quoi que ce soit au shell : on peut lancer le système directement dans l'interface graphique X et le quitter à partir de cette même interface. On peut aussi avoir recours au Centre de Contrôle Mandriva Linux ou à Webmin pour configurer tous les aspects du système.

Je suis absolument persuadé, cependant, qu'utiliser Linux sans le shell est comme conduire une voiture en restant tout le temps en première ! Bien sûr, à première vue, c'est plus facile et la plupart du temps vous pouvez aller où vous voulez. Mais ça ne va pas vite et ça ôte à la conduite tout ce qu 'elle peut avoir d'amusant !

Eh oui ! la ligne de commande est amusante !

C'est quelque chose comme la plus vaste accumulation de cubes pour jeu de construction que vous ayez jamais pu voir ! Et ces divers cubes peuvent chacun accomplir des choses tout à fait étonnantes. Qui plus est, vous pouvez les amener à coopérer et à effectuer les tâches les plus complexes en tapant seulement quelques lignes ! C'est que le shell d'Unix n'est pas un pur et simple interpréteur de commandes, comme le DOS de Windows, mais un véritable environnement de programmation complet.

Cela ne veut pas dire pour autant qu'il vous sera facile d'apprendre à tracer votre propre chemin dans le shell. Après tout il s'agit bien d'apprendre quelque chose, non? ;-) Mais croyez-moi, vous pourrez en être largement récompensés. Et en matière d'Unix la plupart des béotiens vous considèreront bientôt comme un véritable magicien, :-)

Pour arriver à avoir une idée un tant soit peu précise de ce qu'est un interpréteur de commandes - un shell - quelques notions préliminaires ne seront pas inutiles...

Vocabulaire et histoire : les terminaux, les xterms et les shells

A l'époque où Unix a fait son apparition, la race maintenant dominante des « ordinateurs personnels » était complètement inconnue. Les machines qu'on appelait alors « ordinateurs » étaient de grosses brutes qui utilisaient des bandes et des mémoires magnétiques (d'où le terme de « coeur » (core) pour désigner la mémoire du système). Avec le PDP-11 de DEC (devenu ensuite Compaq), sorti en 1970, un ordinateur « petit » (d'où le terme « mini ») et relativement bon marché était désormais disponible et il fit rapidement un tabac dans les universités, dont la plupart pouvaient alors pour la première fois faire l'acquisition d'un ordinateur (le PDP-11 était une véritable affaire à seulement 10 000 dollars...).

Les systèmes d'exploitation destinés à ces ordinateurs étaient écrits en assembleur, un langage très lié à la machine et qui de ce fait était très efficace mais aussi radicalement non portable. Chaque fournisseur d'ordinateur vendait son système d'exploitation avec ses machines. On comprit vite ce qu'une telle situation avait d'insatisfaisant et il y eut des tentatives de créer un système d'exploitation qui pourrait tourner sur des ordinateurs de marques différentes. En 1969, Ken Thompson écrivit le premier code de ce qui allait devenir « Unix » (un jeu de mots sur le nom du projet « MULTICS» , sur lequel Thompson avait travaillé auparavant). Les choses démarrèrent vraiment, cependant, lorsque Dennis Ritchie créa un langage pour ce nouveau système d'exploitation, le langage C. Unix était certes moins efficace qu'un système d'exploitation fourni avec la machine par le fabricant, mais il présentait trois avantages décisifs : il pouvait être porté sur n'importe quelle machine que vous vous trouviez avoir sous la main, le langage C qu'il incluait en rendait la programmation infiniment plus aisée et enfin il était « free ». NdTrad: Apparemment ce premier Unix était vendu pour un prix symbolique et distribué sous forme de code source modifiable par le client. Très vite les universités de toute l'Amérique commencèrent à équiper leurs machines de systèmes Unix.

Les terminaux

Unix était donc (et est toujours) un système d'exploitation capable de tourner sur une vaste gamme de machines diverses. Que dire de ceux qui utilisaient ces machines ? Eh bien, ils s'y connectaient par l'entremise de terminaux « passifs », c'est-à-dire de machines constituées d'un clavier, d'un moniteur et de ce qu'il fallait d'électronique pour entretenir une connexion avec l'ordinateur central. Ce que les utilisateurs de ces machines faisaient, c'était fondamentalement de la transmission par TéléTYpe, d'où la chaîne de caractères tty pour le nom des fichiers spéciaux des terminaux ou encore le nom de la commande getty.

Vous vous demandez sans doute ce que tout cela a à voir avec notre sujet ! Eh bien, il se trouve que les fournisseurs de ces terminaux ne parvenaient pas à se mettre d'accord sur un standard. Autrement dit, chaque marque de terminal avait sa propre disposition du clavier, sa propre méthode d'affichage des caractères à l'écran, ses propres idées sur la correspondance entre les signaux émis et reçus et les caractères ou les codes de contrôle etc. Afin de venir à bout de ce chaos, un fichier central qui contenait les propriétés différentes des différents terminaux fut créé : le termcap. Ouvrez donc /etc/termcap dans un logiciel capable d'afficher un fichier texte et admirez… ou tremblez… ;-)).

Le type de terminal utilisé le plus souvent sous Linux est vt100 ou linux.

Sous Mandriva, vous pouvez accéder à des consoles qui émulent des terminaux à l'ancienne grâce aux séquences de touches du clavier <CTRL-ALT-F1> à <CTRL-ALT-F6>. ALT+F7 vous ramènera à votre session X (voir ci-dessous). Pour ceux qui aiment regarder sous le capot : elles correspondent aux fichiers spéciaux /dev/tty1 à /dev/tty6… Bien que la terminologie en français ne soit pas rigoureusement fixée, on appelle souvent ces consoles : « consoles tty » ou « consoles texte ».

Les xterms

Au début des années 80, fut développé le sous-système graphique « X Window » pour Unix. Le projet XFree86 se détacha de ce système au début des années 90 avec l'objectif d'écrire une version qui serait plus stable lorsqu'elle tournerait sur les clones d'Unix alors émergents basés sur Intel : FreeBSD, NetBSD ou Linux.

Plus récemment le projet « X.org  » s'est détaché de XFree86. C'est maintenant l'interface graphique par défaut de Mandriva, depuis la 10.1.

X servait avant tout à exécuter et prendre en charge une multiplicité de terminaux « virtuels ». X comportait même une application dédiée à cela : « xterm ». C'est pour cette raison que, comme vous pourrez le constater, « xterm » et « terminal virtuel » sont souvent pris comme synonymes. Si l'on vous dit : « ouvrez un xterm », il ne vous est pas vraiment nécessaire d'installer et d'utiliser le programme « xterm », n'importe quel autre émulateur de terminal, comme rxvt, konsole, aterm, eterm, wterm etc. pourra faire l'affaire.

Un émulateur de terminal (autre synonyme de « terminal virtuel ») se connecte au système par l'entremise d'un pseudo fichier tty et il utilise son propre standard d'affichage. Cela peut conduire à un comportement légèrement différent de certaines touches ou de certaines applications sur des émulateurs de terminal différents, en fonction de la plus ou moins bonne émulation du standard « xterm » par ces émulateurs.

Sous Mandriva, vous pouvez par exemple accéder à de tels émulateurs en passant par le Menu K de KDE et en faisant : Système /Terminaux (vous pourrez alors choisir entre différents utilitaires : Konsole, rXVT, Gnome Terminal etc. l'inventaire varie selon votre interface graphique). Bien que, là encore la terminologie en français ne soit pas rigoureusement fixée, on appelle souvent ce genre de consoles des « consoles graphiques » (par opposition aux « consoles texte » évoquées à le section précédente).

Toujours pour ceux qui aiment soulever le capot : ces consoles-là sont représentées par des fichiers spéciaux du répertoire /dev dont le nom est un numéro dans le sous-répertoire /dev/pts (/dev/pts/1, /dev/pts/2 etc.) [« pts » pour « Pseudo-TerminalS » = pseudo-terminaux].

Les shells

Pour exécuter des programmes sur un terminal, on a besoin d'un shell. Le shell est la partie d'un système d'exploitation qui communique avec l'utilisateur et permet aussi la communication entre les commandes.

Le premier « véritable » shell Unix, sh, a été écrit vers 1975 par Steve Bourne et il est connu, de ce fait, sous l'appellation shell Bourne. Rapidement d'autres shells furent développés, certains fondés sur le shell Bourne originel. Parmi ces derniers on trouve par exemple (pd)ksh ou zsh - souvent utilisés comme shell standard sur les Unix propriétaires - ou encore csh ou tcsh, qui implémentent aussi des caractéristiques du langage de programmation C. NdTrad : 'pd'= 'public domain' = domaine public.

Pour Linux le shell standard est le shell Bash, autrement dit le GNU Bourne-Again Shell (eh oui, de l'humour Unix....). NdTrad : Jeu de mots sur « Bourne again » = « encore Bourne » vs « born again » = « qui a connu une "renaissance" ».

Il est très puissant (certains mauvais esprits diraient même : carrément surchargé), la page de man qui le concerne, après compression (!), pèse quelque 50 Ko.

Premiers pas dans le shell

Avant tout une petite remarque : on ne doit jamais utiliser le shell en tant que superutilisateur (root) pour effectuer des tâches courantes, et tout particulièrement quand on débute. Lorsqu'on travaille en tant que simple utilisateur, on ne peut pas endommager le système accidentellement (ou même intentionnellement) ; en tant que root au contraire une simple faute de frappe peut avoir des conséquences graves imprévues.

L'invite

La première chose qu'on voit après s'être identifié dans une console texte ou après avoir ouvert, dans une fenêtre, une console graphique, est l'invite. L'invite standard, sur Mandriva, comprend votre nom d'utilisateur, le nom de la machine sur laquelle vous vous êtes identifié (par défaut : localhost), le répertoire où vous vous trouvez (le « répertoire de travail ») et le symbole de l'invite :

[julie@paradis ~]$

Je me suis identifié comme étant l'utilisateur julie sur la machine que j'utilise, machine à laquelle j'ai donné le nom de paradis, et je suis dans mon répertoire personnel : /home/julie. Le caractère ~ est une abréviation pour « le répertoire personnel de l'utilisateur actuel », abréviation utile car il s'agit d'un répertoire fréquemment utilisé par l'utilisateur, ici ~ représente donc /home/julie.

L'invite de root se présente ainsi :

[root@paradis ~]#

On voit qu'en plus de la différence de nom, le symbole de l'invite est passé de $ à #. C'est une tradition des shells Bourne que de terminer l'invite de l'utilisateur ordinaire par $ et l'invite du root par #. Noter que ~ est maintenant une abréviation pour le répertoire personnel de root et donc qu'il ne s'agit pas du même répertoire que précédemment, même si c'est le même caractère qui le représente.

Lancer une commande...

Pour exécuter une commande, on tape le nom de la commande après l'invite et ensuite on frappe la touche <ENTREE>. Le shell cherche la commande dans son chemin de recherche (nous reparlerons plus loin de cette notion), exécute la commande, affiche la sortie de la commande (s'il y en a une) sur le terminal et affiche une nouvelle invite lorsque l'exécution de la commande est terminée. Dans l'exemple qui suit, l'utilisateur a tapé la commande whoami (littéralement : quisuisje), pressé la touche <ENTREE> et la machine a répondu - correctement - en donnant le nom de l'utilisateur julie :

[julie@paradis julie]$ whoami
julie
[julie@paradis julie]$

Tous les aspects de l'invite sont personnalisables, comme on le verra plus bas. Notez que, dans l'exemple qui précède, le répertoire personnel de julie est représenté par julie et non par ~ : les deux styles d'invite sont possibles, c'est affaire de choix personnel...

A noter que la position du curseur au moment où l'on tape <ENTREE> est sans importance, le shell lira toujours de toute façon la ligne complète. Inutile donc, pour lancer l'exécution de la commande, d'aller laborieusement en fin de ligne, à la manière de ce qu'on ferait avant de presser <ENTREE> dans un traitement de texte!! Retenez-le bien.

Parmi les commandes de base figurent : ls (lister le contenu d'un répertoire), cd (changer de répertoire), cp (copier un fichier ou un répertoire), mv (déplacer/renommer). Chacune de ces commandes est dotée d'un grand nombre d'options, énumérées dans leurs pages de man respectives (man ls, man mv etc.). Nous donnerons bientôt quelques indications qui vous permettront de commencer à les utiliser.

Lorsque vous pressez sur le clavier la touche <TAB> (« tabulation » = touche généralement située en haut et à gauche du clavier et sur laquelle sont d'ordinaire dessinées deux flèches), vous obtenez à l'affichage une liste des commandes disponibles et si vous pressez <TAB> après avoir tapé quelques caractères, vous obtenez la liste des commandes disponibles dont le nom commence par ces caractères. NdTrad : Cette technique, qui permet d'économiser la frappe, sera davantage expliquée plus loin et est connue sous l'appellation de « (auto-)complétement » (ou « complétion ») de la ligne de commande.

Les serviteurs de la commande : options et arguments...

Avant d'entrer dans le pays du shell, voici une brève introduction terminologique.

Les commandes prennent des options et/ou des arguments. Ainsi dans :

Image:Konsole.png
[utilisateur@ordi ~]$ mv -i fichier dir

-i est une option de la commande mv, tandis que fichier et dir sont des arguments de cette commande. Les options disponibles sont décrites en détail dans la page de man de la commande (man mv dans ce cas-ci) et les arguments sont fournis par l'utilisateur. Les options modifient la façon dont la commande travaille, tandis que les arguments déterminent sur quelles données la commande doit être exécutée.

Options courtes et options longues

Comme vous aurez très souvent l'occasion de le constater, certaines options ne contiennent qu'une seule lettre, ce sont des options « courtes ». Elles sont en général précédées par un seul tiret, comme dans l'exemple ci-dessus. Deux options de ce genre (par exemple pour mv : l'option -i et l'option -v) peuvent être regroupées derrière un même tiret, ce qui donnerait : mv -iv fichier dir.

D'autres options contiennent plusieurs caractères, ce sont des options « longues ». Elles doivent alors - en général du moins - être chacune précédées de deux tirets. Pour obtenir une (petite) aide sur mv vous pourriez utiliser, par exemple, l'option --help et faire : mv --help.

Quelques rares commandes sont « autorisées » à posséder des options courtes sans tiret… (par exemple, les commandes ps et top dont nous dirons un mot à la page suivante ou encore la commande tar - pour une description de cette dernière commande, voir ici et pour un exemple d'emploi de tar parmi d'autres voir (futur lien) là).


Jusqu'à présent, tout cela ressemble fort au shell DOS que presque tout le monde déteste et méprise (et à juste titre). C'est donc le moment d'introduire des mécanismes qui feront de votre vie avec le shell une expérience bien plus agréable.

Les toutes premières commandes du shell à expérimenter

Introduction

Si vous êtes débutant, la première chose à faire avant de poursuivre cette lecture devrait être de vous essayer un peu à la manipulation de quelques commandes simples. C'est ce à quoi cette section sera consacrée. Jouez donc, dans une console, avec ces premières commandes, dont nous donnons ici un premier aperçu rapide, pour commencer à vous entraîner un peu... Prenez tout votre temps... faites par vous-même vos premiers petits essais...


Pour ouvrir une console :

  • ou bien vous pressez simultanément les touches Alt+Ctrl+Fn (avec n entre 1 et 6), ce qui vous amènera à une console texte : vous pourrez revenir ensuite à votre environnement graphique habituel par la combinaison de touches Alt+F7
  • ou bien vous faites, pour accéder à un terminal graphique, sous KDE, Menu K -> Système -> Terminaux et vous choisissez par exemple Konsole (on accède au Menu K en cliquant sur l'étoile jaune de la barre des tâches) ou bien vous faites l'équivalent sous GNOME ou sous une autre interface graphique.

Attention, ne jouez pas en étant connecté sous root mais uniquement sous votre identité de simple utilisateur.

Pour savoir « où vous êtes au juste »

  • La commande :
Image:Konsole.png
[utilisateur@ordi ~]$ pwd

permet d'afficher le nom du répertoire de travail (parfois appelé aussi répertoire courant).

Pour mémoriser plus facilement : 'pwd' est l'acronyme de l'anglais Print Working Directory = afficher le répertoire de travail.

Pour créer un fichier vide

  • La commande :
Image:Konsole.png
[utilisateur@ordi ~]$ touch nom_de_fichier

crée un fichier vide appelé nom_de_fichier.

Si d'aventure le fichier nom_de_fichier existe déjà, seul son horodatage (date et heure du fichier) sera modifié, le contenu restant intact.

Vous pouvez créer plusieurs fichiers d'un seul coup :

Image:Konsole.png
[utilisateur@ordi ~]$ touch a b c

créerait trois fichiers nommés a, b et c.

Pour ajouter une ligne à la fin d'un fichier sans supprimer son contenu antérieur

  • Une combinaison de la commande echo et de l'opérateur de redirection >> fera l'affaire :
Image:Konsole.png
[utilisateur@ordi ~]$ echo "bla bla bla" >> nom_de_fichier

La dernière ligne du fichier nom_de_fichier contient maintenant le texte « bla bla bla »...

Pour lire le contenu d'un fichier texte

  • La commande
Image:Konsole.png
[utilisateur@ordi ~]$ cat nom_de_fichier

permet d'afficher le contenu du fichier texte nom_de_fichier.

Pour écrire plusieurs lignes dans un fichier

Pour écrire dans un fichier, ligne par ligne, directement dans la console, sans ouvrir d'éditeur de texte, vous pouvez faire ceci :

Image:Konsole.png
[utilisateur@ordi ~]$ cat > choin.txt

ensuite vous tapez le contenu des lignes successives (pour passer à la ligne suivante taper <ENTREE>) et quand vous avez fini faites <Ctrl-d>. Toutes les lignes devraient maintenant être visibles dans le fichier choin.txt (faites cat choin.txt pour le vérifier).

Pour remplacer le contenu d'un fichier existant par un autre contenu ou créer un fichier doté d'un contenu défini

  • Analogue à l'avant-dernière commande mais en utilisant cette fois l'opérateur de redirection > :
Image:Konsole.png
[utilisateur@ordi ~]$ echo "bla bla bla" > nom_de_fichier

Le fichier nom_de_fichier a maintenant un contenu qui se réduit à une ligne « bla bla bla ». Tout éventuel contenu antérieur a disparu. (Si le fichier n'existait pas avant exécution de la commande, il sera directement créé, sans que vous ayez à passer par la commande touch).

Pour lire le contenu d'un fichier texte s'étendant sur plusieurs pages

  • La commande :
Image:Konsole.png
[utilisateur@ordi ~]$ less nom_de_fichier

permet d'afficher le contenu d'un fichier et de se déplacer dedans.

Pour changer le nom d'un fichier ou d'un répertoire

  • La commande :
Image:Konsole.png
[utilisateur@ordi ~]$ mv nom1 nom2

permet de renommer le fichier ou répertoire nom1 en nom2.

Pour créer un nouvel exemplaire d'un fichier

  • La commande
Image:Konsole.png
[utilisateur@ordi ~]$ cp fichier1 fichier2

permet de créer fichier2 en copiant le contenu du fichier1 (au bout du compte vous retrouvez avec les deux fichiers fichier1 et fichier2, dont les contenus sont identiques et les noms différents...).

Astuce !
Pour plus de détails sur la commande cp, voir Copie de fichiers ou de répertoires.

Pour voir ce qui se trouve dans un répertoire

Astuce !
Pour plus de détails voir l'ensemble de la page sur La commande ls.
  • La commande :
Image:Konsole.png
[utilisateur@ordi ~]$ ls

permet de lister le contenu du répertoire de travail.

  • La commande :
Image:Konsole.png
[utilisateur@ordi ~]$ ls -l

permet de lister le contenu du répertoire de travail en affichant diverses propriétés pour chaque élément de la liste.

  • Les commandes :
Image:Konsole.png
[utilisateur@ordi ~]$ ls -a

ou

Image:Konsole.png
[utilisateur@ordi ~]$ ls -la

permettent de lister le contenu du répertoire de travail en incluant les fichiers cachés.

  • La commande :
Image:Konsole.png
[utilisateur@ordi ~]$ ls -l repertoire

permet de lister le contenu du répertoire repertoire.

Pour aller voir ailleurs

  • La commande :
Image:Konsole.png
[utilisateur@ordi ~]$ cd répertoire

permet de changer de répertoire de travail.

  • La commande :
Image:Konsole.png
[utilisateur@ordi ~]$ cd

employée seule, sans argument, vous ramène dans votre répertoire personnel.

  • La commande :
Image:Konsole.png
[utilisateur@ordi ~]$ cd -

vous ramène au répertoire de travail précédent.

  • Enfin :
Image:Konsole.png
[utilisateur@ordi ~]$ cd ..

vous fera sauter une branche de l'arborescence du système de fichiers en vous amenant au répertoire « parent » de votre répertoire de travail actuel.

Pour nettoyer

  • La commande
Image:Konsole.png
[utilisateur@ordi ~]$ rm fichier

permet de supprimer un fichier.

Vous pouvez supprimer d'un seul coup plusieurs fichiers :

Image:Konsole.png
[utilisateur@ordi ~]$ rm a b c

supprimerait trois fichiers existants nommés a, b et c.

Attention les fichiers effacés seront irrémédiablement perdus (à moins que vous n'ayez pris (futur lien) ces précautions).

Pour créer ou supprimer des répertoires

  • La commande
Image:Konsole.png
[utilisateur@ordi ~]$ mkdir répertoire
permet de créer un répertoire.

Si voulez créer un répertoire et en même temps un ou plusieurs sous-répertoires nouveaux qui le contiendront vous devez utiliser l'option -p

Image:Konsole.png
[utilisateur@ordi ~]$ mkdir -p rep1/rep2/répertoire

créera non seulement répertoire, mais aussi rep1 et rep2, au cas où ils n'existeraient pas.

  • La commande :
Image:Konsole.png
[utilisateur@ordi ~]$ rmdir répertoire

permet de supprimer un répertoire vide.

Et si je veux effacer un répertoire « plein » ? Eh bien, il vous faudra utiliser alors la commande rm avec des options :

Image:Konsole.png
[utilisateur@ordi ~]$ rm -r répertoire/

effacera répertoire et tout son contenu, en vous demandant la permission avant tout effacement et

Image:Konsole.png
[utilisateur@ordi ~]$ rm -rf répertoire/

effacera tout sans rien vous demander...

Attention !
Après exécution de ces commandes ce qui aura été effacé sera irrémédiablement perdu !! (sauf si vous avez pris ces précautions).

Pour ranger un fichier ailleurs

  • La commande
Image:Konsole.png
[utilisateur@ordi ~]$

mv fichier répertoire

vous permettra de déplacer le fichier fichier vers le répertoire répertoire.

Pour chercher du texte dans un fichier

Pour faire une recherche dans des fichiers texte avec grep, vous avez un article détaillé.

  • La commande
Image:Konsole.png
[utilisateur@ordi ~]$

grep chaine_à_chercher nom_de_fichier

permet de rechercher une chaine de caractères dans un fichier.

  • La commande
Image:Konsole.png
[utilisateur@ordi ~]$ grep -i chaine_à_chercher nom_de_fichier

permet la même chose mais sans distinguer entre majuscules et minuscules (si chaine_à_chercher est iso vous trouverez aussi bien iso que ISO ou même Iso, s'ils figurent dans le fichier, alors qu'avec la version précédente vous n'auriez obtenu que iso).

Pour savoir ce qui se passe chez vous

  • La commande
Image:Konsole.png
[utilisateur@ordi ~]$ top

permet de lister les programmes qui utilisent le plus votre processeur (ils seront en haut de l'affichage). A noter : pour quitter top, il suffit de presser la touche q.

  • La commande
Image:Konsole.png
[utilisateur@ordi ~]$ ps ux

permet de lister tous les programmes actifs de l'utilisateur courant.

  • La commande
Image:Konsole.png
[utilisateur@ordi ~]$ ps aux

permet de lister tous les programmes actifs du système.

Pour revoir ce que vous avez fait

  • Faites défiler les commandes que vous avez tapées précédemment à l'aide des touches Flèche vers le haut et Flèche vers le bas.
  • La commande
history
permet de visualiser la liste des dernières commandes utilisées.

Pour devenir administrateur et revenir bien vite sous votre identité

  • La commande
Image:Konsole.png
[utilisateur@ordi ~]$ su -

permet de passer en mode administrateur, c'est-à-dire permet de devenir root (attention ne restez pas sous root pour expérimenter toutes ces commandes, une erreur est si vite arrivée !).

  • La commande
Image:Konsole.png
[root@ordi ~]# exit

vous permet de revenir à votre identité antérieure.

J'ai oublié à quoi sert la commande machin !!

Dans ce cas la commande :

Image:Konsole.png
[utilisateur@ordi ~]$ whatis

vous en donnera une brève définition (en anglais). Essayez-la donc, pour voir, avec les quelques commandes de cette page. (Vous pouvez même tenter whatis whatis...).

J'ai oublié le nom d'une commande !!

Vous avez l'impression de n'avoir mémorisé qu'une partie du nom d'une certaine commande et vous ne parvenez pas à reconstituer le nom complet ?

Essayez la commande apropos, en lui fournissant en argument un fragment du nom de la commande que vous cherchez...

Par exemple, si vous avez oublié le nom exact de cette commande qui vous permet d'obtenir une liste de vos périphériques pci, vous pourrez retrouver son nom (lspci) en tapant :

Image:Konsole.png
[utilisateur@ordi ~]$ apropos pci

Divers outils pour se rendre la vie plus facile dans le monde de la console

Introduction

Unix (et son jeune frère Linux) sont nés au fil de la ligne de commande. Aussi la ligne de commande d'Unix présente-t-elle de nombreux mécanismes destinés à vous éviter des tâches de dactylographie ancillaires. Cette section est une introduction à ce genre de mécanismes.

L'auto-complétement

Comment passer le plus rapidement possible de votre répertoire de travail courant, situé dans votre répertoire personnel, au répertoire :
/usr/src/linux/Documentation/isdn/
en utilisant la commande cd (« changer de répertoire ») ?

Eh bien, voilà, il vous suffit de taper ceci (où <TAB> représente une pression sur la touche des tabulations, aussi appelée touche <ECHAP>, une touche d'ordinaire située en haut à gauche de votre clavier et qui comporte le plus souvent deux flèches horizontales) :

cd /u<TAB>sr<TAB>l<TAB>/<TAB>D<TAB>isd<TAB>

Au total vous pressez 16 touches du clavier pour un « chemin » qui comporte 34 caractères !! 53 % d'économie en « frappe » du clavier !!

C'est ce qu'on appelle « le complétement (ou la complétion) automatique de la ligne de commande », quelque chose de tout à fait indispensable. Regardons de plus près notre exemple :

cd /u<TAB>

devient cd /usr/. Facile. Ensuite

cd /u<TAB>sr<TAB>

devient cd /usr/src/. Si vous tapez cd /u<TAB>s<TAB>, le shell vous présente une liste de trois répertoires de /usr : /usr/sbin, /usr/share et /usr/src.

La touche <TAB> est donc un moyen pratique de rechercher dans un répertoire des fichiers ou des sous-répertoires dont vous connaissez les premières lettres. Ainsi ls /usr/bin/zip<TAB> fournit une liste de tous les fichiers ou sous-répertoires de /usr/bin dont les noms commencent par les lettres 'zip'. Il y a bien sûr des commandes beaucoup plus puissantes qui peuvent aussi effectuer cette tâche, mais le complétement règle l'affaire en un tournemain.

C'est vraiment très pratique avec des noms de fichier très longs. Imaginons que vous vouliez installer un RPM appellé 'boomshakalakwhizbang-4.6.4.5-mdk586.rpm'. Vous tapez rpm -i boom<TAB> et, s'il n'y a pas d'autre fichier qui corresponde dans le répertoire, le shell complètera la suite tout seul.

Si vous tapez :

cd /u<TAB>sr<TAB>l<TAB>

le shell vous propose, par exemple, trois choix et attend que vous preniez une décision. Il y a en effet, dans votre système, deux répertoires de /usr/src qui correspondent à : '/usr/src/linux-{...}' et il y a aussi /usr/src/linux lui-même. Comment dire au shell que c'est le deuxième cas qui nous intéresse ? Ajoutez une barre oblique ('/'), vous représentez ainsi la fin de ce deuxième nom (ceci est vrai pour la fin d'un nom de répertoire uniquement).

Le complétement ne permet pas seulement d'aller plus vite : il permet aussi de retrouver des informations ou de s'assurer qu'on ne se trompe pas en tapant tel ou tel nom.

Imaginons par exemple que vous ne sachiez plus très bien si le répertoire que vous cherchez est /usr/src/linux/Documentation ou /usr/src/linux/documentation. Comme vous le savez peut-être, Linux différencie les majuscules des minuscules. Si vous avez lu attentivement ce qui précède, vous connaissez déjà la réponse :

cd /u<TAB>sr<TAB>l<TAB>/d<TAB>

devient /usr/src/linux/drivers/. Selon toute apparence c'était donc 'Documentation' (avec un 'D' majuscule).

La complétion est donc aussi un dispositif de sécurité : n'hésitez pas à l'employer même si vous tapez vite et si vous croyez vous souvenir des noms des fichiers et répertoires qui vous intéressent. Cela constituera une utile vérification.

La complétion marche aussi avec les commandes :

[julie@paradis ~]$ gre<TAB>
grecord grefer grep
[julie@paradis ~]$ grep

Le shell me propose ici une liste de toutes les commandes qu'il connaît dont le nom commence par la chaîne de caractères gre. Un mécanisme qui peut vous aider si vous avez oublié le nom exact de la commande. Notez que si vous tapez <TAB> en début de ligne sans avoir rien tapé d'autre le shell vous proposera d'afficher la totalité des commandes que vous avez le droit de lancer sur le système !

Au total la complétion vous permet :

  • de taper plus vite
  • d'éviter des erreurs
  • de retrouver des informations oubliées.

Le paquet bash-completion

Si vous utilisez le shell bash (par défaut avec Mandriva), le paquet bash-completion ajoute la complétion avec des règles prédéfinies.

Par exemple, si vous faites :

$ perl <TAB>

C'est probablement que vous souhaitez exécuter un script perl. Bash-completion va alors ne vous proposer que les fichiers finissant par .pl du répertoire courant. (À vérifier : est-ce qu'il se base sur le nom (.pl) où sur le type de fichier (en utilisant la commande file) ?)

Ce comportement peut être outrepassé ponctuellement en utilisant Alt-/ à la place de Tab.

L'historique des commandes

Avec la touche « flèche vers le haut » vous pouvez faire défiler toutes les commandes du shell que vous avez lancées récemment sur la console. Avec la touche « flèche vers le bas » vous pouvez revenir en arrière.

En appuyant en même temps sur la touche MAJ, vous pouvez faire défiler les précédentes sorties vers la console. Par exemple, on a vu plus haut qu'on peut afficher l'ensemble des commandes avec la touche <TAB>, il peut arriver qu'il y en ait beaucoup trop pour qu'elles tiennent toutes sur un seul écran et elles défilent alors à toute vitesse, vous pouvez dans ce cas les revoir tranquillement en appuyant sur MAJ et en manipulant en même temps la flèche <Haut> et la flèche <Bas>. Vous pouvez aussi éditer de « vieilles » lignes de commande et les lancer à nouveau. Nota : Cette fonctionnalité est disponible, dans mon système, sous l'utilitaire Konsole de KDE, mais peut faire défaut dans d'autres environnements.

La combinaison de touches <CTRL r> place le shell dans le mode « recherche incrémentale inversée » (reverse-i(ncremental)-search). Vous obtenez alors ceci :

(reverse-i-search)`':

Vous pouvez alors, par exemple, taper la première lettre de la commande que vous recherchez. Taper 'i' peut aboutir à ceci :

(reverse-i-search)`i': isdnctrl hangup ippp0

si la dernière commande commençant par 'i' que vous avez lancée est isdnctrl hangup ippp0.

En appuyant sur <ENTREE>, cette commande sera à nouveau exécutée. Les touches<Droite> ou <Gauche> ou <ECHAP>, placeront cette commande sur la ligne de commande normale où vous pourrez l'éditer.

Note : La recherche lancée par <CTRL r> est dite « inversée » parce que le shell vous donne d'abord la ligne de commande la plus récente, puis chaque fois que vous taperez à nouveau <CTRL r>, il vous donnera une ligne plus ancienne. La recherche est « incrémentale » parce qu'au fur et à mesure que vous tapez les caractères d'une chaîne, le shell vous affiche une ligne de commande qui contient les caractères déjà tapés.

Notez que si vous êtes allé très loin en arrière en faisant plusieurs fois <CTRL r>, vous pouvez relancer une recherche en sens inverse, en direction des commandes plus récentes, par la combinaison de touches <CTRL s>.

Pour plus d'astuces sur l'utilisation de l'historique, voir L'historique du shell.

Editer la ligne de commande

Pour éditer la ligne de commande on peut déplacer le curseur à l'aide des touches de fonction habituelles (touche <Début>, touche <Fin>, flèches <Gauche> et <Droite>, touches <Retour arrière> et <Suppr> pour effacer un caractère), mais l'on dispose aussi de raccourcis clavier pour la plupart des tâches d'édition courantes :

- Effacement de ligne

  • <CTRL k> : effacement depuis la position du curseur incluse jusqu'à la fin de la ligne (k pour kill = tuer en anglais)
  • <CTRL u> : effacement depuis le caractère qui précède le curseur jusqu'au début de la ligne

- Effacement de mot

  • <ALT d> : effacement depuis la position du curseur incluse jusqu'à la fin du « mot » courant
  • <CTRL w> : effacement depuis le caractère qui précède le curseur jusqu'au début du « mot » courant

- Déplacement en début et fin de ligne

  • <CTRL a> : placer le curseur sur le premier caractère de la ligne (comme la touche <Home>/<Début>)
  • <CTRL e> : placer le curseur après le dernier caractère de la ligne (comme la touche <End>/<Fin>)

- Se déplacer de mot en mot

  • <ALT b> : placer le curseur sur le premier caractère du « mot » courant (b comme begin = commencer en anglais)
  • <ALT f> : placer le curseur après la fin du « mot » courant (f comme follow = suivre en anglais)

- Insérer ce qui a été effacé

  • <CTRL y> : insère la dernière chaîne de caractères de la ligne de commande effacée par l'une des commandes précédentes

- Récupérer un argument de la ligne précédente

  • !$ : reprise du dernier argument de la commande précédente.

Exemple: créons un répertoire avec :

mkdir -p peter/pan/documents/clochettes

Nous voulons maintenant entrer dans ce répertoire en utilisant la commande cd. Au lieu de retaper le chemin, nous tapons simplement :

      cd !$

et le shell va donner comme argument à la commande cd le chemin peter/pan/documents/clochettes qui servait d'argument à la commande mkdir précédente.

- Effacer ou se déplacer caractère par caractère (utile pour garder ses mains bien au milieu du clavier...)

  • <CTRL d> : effacement du caractère sous le curseur (comme la touche <Suppr>)
  • <CTRL b> : se déplacer d'un caractère vers la gauche (comme la flèche <Gauche>)
  • <CTRL f> : se déplacer d'un caractère vers la droite (comme la flèche <Droite>)


- Tout nettoyer

  • <CTRL l> : efface le contenu de l'écran


A mesure que vous vous familiariserez avec Linux, vous vous apercevrez que ces raccourcis clavier sont aussi utilisés dans d'autres applications pour entrer du texte. Une bonne part d'entre elles sont également utilisées dans le célèbre éditeur de texte Emacs. Elles sont aussi disponibles dans les pages de la documentation à laquelle on accède par (futur lien) la commande info.

Par défaut les raccourcis d'édition de la ligne de commande du shell Bash sont identiques aux raccourcis par défaut d'Emacs. Toutefois si vous êtes, ou devenez un jour, un aficionado de l'éditeur de texte vim (ou de son ancêtre vi), vous pourrez faire en sorte que Bash utilise plutôt les raccourcis de ce dernier logiciel. Si c'est ce que vous souhaitez, vous lancerez la commande suivante :

set -o vi

pour la pérenniser vous l'écrirez dans votre fichier de configuration ~/.bashrc.

Les raccourcis clavier du shell

Mandriva Linux est doté de toute une gamme de raccourcis, certains sont des traits « natifs » de Bash, d'autres ont été préconfigurés (vous apprendrez par la suite à configurer vos propres raccourcis).


Le répertoire personnel est le point central de l'activité de tout utilisateur et nombre de systèmes Unix possèdent des raccourcis particuliers pour y faire référence.


~, par exemple, est une forme courte du nom de votre répertoire personnel. Supposons que vous soyez dans quelque répertoire éloigné et que vous souhaitiez copier un fichier appelé untexte dans le répertoire docs de votre répertoire personnel. Au lieu de taper (si votre nom d'utilsateur est julie) :

cp untexte /home/julie/docs

vous taperez simplement :

cp untexte ~/docs

ce qui est beaucoup plus court tout en ayant exactement le même effet.


En principe, ceci peut être appliqué aussi à la commande cd.

cd ~

vous conduirait à votre répertoire personnel, où que vous soyez. Mais même cela est encore trop ! Taper simplement :

cd

et vous serez de retour dans votre répertoire personnel.


Mandriva Linux vous fait bénéficier d'un ensemble de raccourcis pré-configurés (appelés alias) :

  • cd..

exécute cd .. (aller dans le répertoire parent, utile au cas où vous auriez oublié de taper l'espace qui doit séparer cd de ..).

  • d

exécute ls (liste du contenu d'un répertoire).

  • l

exécute ls (liste du contenu d'un répertoire).

  • la

exécute ls -a (liste complète du contenu d'un répertoire, incluant les fichiers « cachés », dont les noms commencent par un point)

  • ll

exécute ls -l -k (liste du contenu d'un répertoire en format long, c'est-à-dire avec des attributs de fichiers, avec affichage de la taille des fichiers en Ko, et non en octets)

  • ls

exécute ls -F --color=auto (liste du contenu d'un répertoire, avec des indicateurs de types de fichiers et une utilisation de la couleur)

  • lsd

exécute ls -d */ (liste des sous-répertoires uniquement, sans les fichiers)

  • md

exécute mkdir (créer un répertoire)

  • p

exécute cd - (retourner dans le répertoire précédent)

  • rd

exécute rmdir (effacer un répertoire (vide))

  • s

exécute cd .. (aller dans le répertoire parent)


Maintenant que vous êtes un peu familiarisé avec le shell et certains de ses raccourcis, il est temps de jeter un coup d'œil sur ce que l'on peut vraiment faire avec son aide au-delà de l'exécution de simples commandes. Pour cela, visitez Le shell sans peine : techniques avancées.