Les notes de Joey : les bases de l'interpréteur Bash

Gazette Linux n°160 — Mars 2009

Gérard Baylard

Adaptation française  

Joëlle Cornavin

Relecture de la version française  

Article paru dans le n°160 de la Gazette Linux de mars 2009.

Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières

1. Syntaxe
2. L'invite
3. Commandes
4. Commutateurs et options
5. Arguments
6. Obtenir de l'aide avec les pages de man
7. Aide supplémentaire
8. Saisie semi-automatique à l'aide de la touche Tab
9. Historique de commandes
10. Quelques commandes de base et commutateurs courants
11. Ressources (en anglais)

On prétend souvent que la vraie puissance de Linux réside dans la ligne de commande — et c'est vrai. Malheureusement, beaucoup de nouveaux utilisateurs de Linux commencent par s'en servir comme système d'exploitation pour les ordinateurs de bureau et sont frustrés quand ils découvrent la fréquente nécessité de recourir à la ligne de commande — un environnement peu familier et ipso facto inconfortable. Ce cas se rencontre généralement quand ils doivent effectuer une installation à partir d'une archive tar (code source à compiler dans un fichier portant l'extension tar.gz) et constatent qu'il faut saisir des commandes ou se déplacer dans un répertoire particulier. Pour pimenter le tout, la barre oblique, séparateur de répertoires (ou slash, / est une difficulté supplémentaire s'ils sont habitués à DOS.

Ou peut-être ont-ils besoin d'obtenir le fonctionnement correct de la lecture d'une vidéo — opération pouvant encore tout à fait se transformer en véritable gageure sous Linux. Tout cela peut s'avérer bien difficile pour les nouveaux utilisateurs à cause des nombreuses différences entre les systèmes d'exploitation. Mon but ici est de tenter de faciliter la transition en expliquant quelques fondamentaux susceptibles d'apporter de l'aide, soit pour essayer d'apprendre Linux dans les règles, soit simplement pour commencer en tant qu'utilisateur d'ordinateur de bureau essayant de rompre avec Microsoft.

En fait, une fois qu'on se sera familiarisé avec quelques concepts clés, Linux deviendra beaucoup plus facile. Entre autres, la structure des répertoires : par exemple, il n'existe plus de lecteur C:\. Au lieu de cela, pour Linux, la racine du système de fichiers se situe à « / », l'équivalent de C:\ sous Windows. Peu importe le nombre de lecteurs présents dans un système Linux, il n'y a qu'une arborescence de système de fichiers unique — l'ajout de lecteurs accroît simplement l'espace disponible. Linux n'utilise pas le concept d'une arborescence de répertoires propre à chaque lecteur comme le fait Windows.

Apprendre la structure de cette arborescence de répertoires est l'un des plus gros obstacles pour le nouvel utilisateur. Par exemple, la partie du système contenant vos fichiers personnels est appelée « dossier personnel » : son nom est identique à votre nom d'utilisateur et il est placé dans répertoire /home. À la fin de cet article, se trouve un lien vers un excellent petit tutoriel dont l'examen peut prendre une heure ou deux, mais il ne fait aucun doute qu'il vous initiera à Linux.

La plupart des commandes de Linux sont une forme quelque peu abrégée de ce que fait la commande : par exemple, la commande ls signifie list (lister), cd correspond aux initiales de la commande change directory (changer de répertoire). En apprenant juste quelques commandes élémentaires, vous serez en mesure de vous déplacer efficacement dans votre système et d'effectuer de nombreuses tâches, mais soyez patient — il faut du temps. Linux comporte un peu plus de 3 000 commandes.

 

[En réalité, cette affirmation est à la fois exacte et inexacte. Sous Linux, chaque programme est une commande, mais vous n'avez besoin d'en connaître qu'un faible pourcentage pour travailler sur la ligne de commande efficacement. En règle générale, la boîte à outils Unix© classique (par exemple, cette liste de commandes) contient tout ce qui est nécessaire — et même les experts en connaissent rarement la totalité. À mon avis, connaître une quarantaine de ces commandes sera suffisant pour l'utilisateur moyen 99,9 % du temps.

 
 --  Ben]

Toutes ont des analogies dans leur syntaxe, et quelques concepts de base leur sont communs. Peut-être la commande man est-elle la plus importante dont il faille se souvenir. À chaque fois que vous devez utiliser une commande assez mal connue, saisissez simplement man commande, ce qui affichera la page de manuel de cette commande. Vous y trouverez les informations dont vous pourriez avoir besoin avant de l'exécuter.

1. Syntaxe

La syntaxe d'une commande fait référence à la grammaire de la séquence de caractères à saisir sur la ligne de commande. Pour vérifier la syntaxe d'une commande spécifique, un rapide coup d'œil à la page de manuel appropriée clarifiera les choses. Cette information se trouve sous l'intitulé « SYNOPSIS ». Pour la plupart des commandes, la syntaxe est « commande options argument ».

Commande

Le nom d'un programme comme ls, cat ou grep.

Option

Une lettre ou un mot précédé d'un tiret pour les « options courtes » ou deux tirets pour la « forme longue » d'une option. -a est une option courte et --all est une option longue. Les deux ont la même signification.

Argument

Un argument peut être un nom de fichier, un répertoire, la spécification d'un périphérique comme /dev/cdrom. Il est habituellement lié à l'option (par exemple : « --file doc.txt ») et désigne, dans un certain sens, l'objet de la commande.

Nombre de personnes ont du mal à décider où placer une espace dans la ligne de commande. La meilleure ligne directrice consiste à toujours mettre des espaces après chaque commande et entre toutes les options précédées d'un tiret. Les arguments peuvent ou non nécessiter des espaces de début. Encore une fois, la page de man est souvent le meilleur guide.

2. L'invite

Le premier signe visible quand on travaille dans l'interpréteur de commandes est l'invite. Son apparence vous indique normalement quel type d'utilisateur vous êtes, votre nom d'hôte dans le système hôte et l'emplacement où vous vous trouvez dans ce système.

 

[Ce n'est pas forcément vrai sur de nombreux autres systèmes Unix, voire dans certaines des distributions Linux mineures. Souvent, l'invite n'est rien d'autre que « $ », « % » ou « # » pour afficher votre niveau d'utilisateur et le type d'interpréteur. Pour plus d'informations, vous pourrez être amené soit à configurer l'invite, soit à utiliser quelques-unes des commandes d'information de la boîte à outils.

 
 --  Ben]

En observant l'exemple ci-après, on peut voir que le nom d'utilisateur est « tom », suivi du symbole « @ » séparant le nom d'utilisateur du nom d'hôte du système. Si vous n'avez jamais donné de nom à votre système, on peut trouver « localhost » à cet endroit. Apparaît ensuite le caractère « ~ » indiquant que vous êtes dans le dossier personnel de l'utilisateur. Pour terminer, on a le caractère « $ » ; il indique, de manière générale, le niveau de droits d'accès que nous avons en tant qu'utilisateur. Ce paramètre varie selon les différents interpréteurs ; par exemple, les interpréteurs du langage C (csh, tcsh) utilisent « % » pour un utilisateur normal, alors que l'interpréteur Bourne et ses dérivés (sh, ksh, bash, zsh et beaucoup d'autres) emploient habituellement « $ ». L'utilisateur root (le superutilisateur du système) obtient une invite spéciale, « # », ce qui permet à l'utilisateur de savoir qu'il doit être très, très prudent et précis dans les commandes qu'il saisit, car l'utilisateur root peut facilement détruire ou endommager le système.

Utilisateur normal :

[tom@station1 ~]$

Superutilisateur :

[tom@station1 ~]#

En saisissant la commande echo $SHELL, Tom découvre qu'il utilise Bash (alias, le Bourne Again Shell). Dans cet exemple, la commande echo affiche la valeur de la variable $SHELL sur l'écran. L'interpréteur Bash est normalement l'interpréteur par défaut sur la plupart des systèmes Linux modernes.

[tom@station1 ~]$ echo $SHELL
/bin/bash

Si le répertoire de travail actuel n'est pas indiqué par l'invite, la première commande importante à apprendre est pwd, une abréviation de « print working directory » (afficher le répertoire de travail). Cette commande indique le chemin complet comme on peut le voir ci-après.

[tom@station1 ~]$ pwd
/home/tom

3. Commandes

Les commandes sont soit du code incorporé dans l'interpréteur lui-même, soit des programmes exécutables compilés, soit des scripts exécutables placés quelque part dans votre système. Le shell est un interpréteur de commandes qui lit certaines variables d'environnement (on peut les voir en saisissant « env » sur la ligne de commande) lors de l'ouverture d'un interpréteur de commandes. Quand vous saisissez une commande, l'interpréteur recherche les répertoires listés dans la variable PATH pour trouver le programme que vous avez demandé d'exécuter. Si ce n'est ni du code incorporé dans l'interpréteur, ni un alias de commande, ni une fonction définie, ni un programme dans la variable PATH indiquée, l'interpréteur de commande retourne l'erreur command not found (commande introuvable).

[tom@station1 ~]$ print help me
bash: print: command not found

Il existe de nombreuses commandes — peut-être même trop. Pour savoir combien il y en a à votre disposition, appuyez simplement deux fois de suite sur la touche Tab dans un terminal : un nombre s'affiche et un message vous demande si vous voulez vraiment les voir toutes. Ne vous inquiétez pas : vous n'aurez jamais besoin de connaître la plupart d'entre elles (beaucoup sont exécutées par d'autres commandes ou par l'intermédiaire de menus d'interface graphique). Personne ne peut se souvenir de toutes ces commandes — ce ne serait d'ailleurs d'aucun intérêt — et en connaître simplement un petit nombre vous aidera grandement sur tout système Linux.

Les commandes sont sensibles à la casse et sont normalement écrites en minuscules. Une autre caractéristique importante à savoir est que beaucoup de commandes (par exemple, de copie, de déplacement, de liaison avec un périphérique, etc.) fonctionnent selon le mode « objet_origine vers objet_destination » :

cp /mon/fichier/source /fichier/ou/répertoire/cible/
mv /depuis/ici /vers/là
mount /dev/mon_périphérique mon_périphérique/à/monter/dans

4. Commutateurs et options

Commutateurs et options servent à modifier l'action de la commande. Ils sont d'ordinaire immédiatement précédés d'un tiret simple ou double, prennent la forme soit de lettres, soit de mots entiers. Certaines commandes exigent des options, d'autres non. Voici quelques exemples :

Commande simple :

[tom@station1 ~]$ 

Exemple d'option courte :

[tom@station1 ~]$ ls -a 

Options courtes multiples :

[tom@station1 ~]$ ls -a -h -i

Les options courtes multiples peuvent être groupées :

[tom@station1 ~]$ ls -ahi

Exemple d'option longue :

[tom@station1 ~]$ ls --all

Options longues multiples :

[tom@station1 ~]$ ls --all --human-readable --inode

Normalement, les options courtes sont regroupées s'il faut en indiquer plus d'une. En outre, quelques options courtes ont des options longues équivalentes qui effectuent la même action.

5. Arguments

Un argument est habituellement un objet sur lequel la commande agit. Qu'une commande prenne ou non un argument ne dépend que de celle-ci : par exemple, ls peut prendre un argument, mais si aucun n'est fourni, la commande suppose que le répertoire de travail actuel est l'argument et affiche la liste de ce répertoire. Un exemple de commande ne prenant pas d'argument est true, qui n'accepte que des options. Là encore, les arguments varient selon la commande et un grand nombre d'entre elles ont un argument par défaut.

6. Obtenir de l'aide avec les pages de man

Lorsqu'on utilise la ligne de commande, il est pertinent de prendre l'habitude de vous servir du système de pages de manuel intégré de Linux, également dénommé « pages de man ». À première vue, elles peuvent paraître déconcertantes et très sibyllines. Soyez assuré, pourtant — elles sont très utiles et nécessaires. En les utilisant, vous accélérerez considérablement votre apprentissage de Linux. Pour voir les pages de man d'une commande, saisissez simplement « man command » et un écran contenant des informations s'affiche. Pour parcourir une page de man, appuyez sur les touches fléchées ainsi que les touches Précédent et Suivant pour la faire défiler, et sur la touche « q » pour quitter. Il existe un certain nombre d'autres touches de navigation pour effectuer une recherche, aller au début ou au bas de la page, etc. Tout dépend du programme de mise en page utilisé (en règle générale « more » ou « less », ce dernier étant le plus courant). Vous pourrez en savoir plus à ce propos en appuyant sur la touche h (c'est-à-dire help, aide) tout en parcourant la page de man.

Lorsqu'on observe une page de man, on remarque plusieurs en-têtes de sections :

NOM :

Le nom de la commande et souvent des commandes similaires pouvant être utiles.

SYNOPSIS :

Vous trouverez dans cette section la syntaxe détaillée pour lancer la commande de manière correcte. Vous devrez peut-être examiner la section OPTIONS ci-dessous pour obtenir des précisions. Beaucoup de commandes exigent de fournir des options pour pouvoir fonctionner de façon tout à fait satisfaisante.

DESCRIPTION :

Généralement un résumé de la description technique détaillée de ce que fait la commande.

OPTIONS :

Sous cet en-tête de section, se trouve une liste des options longues et courtes que la commande accepte. Il est pratiquement toujours nécessaire d'utiliser telle ou telle option avec une commande, c'est pourquoi cette section est de première importance et peut être assez longue. Comme la plupart des commandes donnent une signification spécifique à leurs options, sachez que toute option quelle qu'elle soit, employée avec une commande, peut avoir un tout autre sens lorsqu'elle est utilisée avec une autre commande.

EXEMPLES :

Pour les commandes peu courantes, je regarde pratiquement toujours cette section pour ne rien abîmer. Cette section, si elle existe, peut donner un meilleur éclairage à la syntaxe de la commande recherchée.

Selon les commandes, il se peut qu'il y ait plus de catégories pour certaines commandes et moins pour d'autres.

L'apprentissage de Linux peut être un processus de longue haleine, mais vous le trouverez indubitablement plaisant et gratifiant au fur et à mesure que vous découvrirez la puissance impressionnante qu'il offre.

7. Aide supplémentaire

Le système Linux a été conçu à l'origine pour l'utilisateur de la ligne de commande, et si vous savez comment trouver l'aide dont vous avez besoin, vous aurez accès à encore beaucoup plus de puissance que l'utilisateur moyen ne pourrait même imaginer. Une autre source d'information utile, si elle est installée sur votre machine, est la commande info, le système de documentation Textinfo, qui contient la documentation officielle du projet GNU. Quelques systèmes disposent à la fois des pages de man et info. Il est judicieux de tester ces deux applications pour voir si l'une offre plus d'informations à votre convenance. En règle générale, les pages info seraient plus faciles à comprendre que les pages de man, même si dans certains cas les informations sont identiques. Pour utiliser le système info, saisissez info commande ou seulement info pour mieux le connaître.

8. Saisie semi-automatique à l'aide de la touche Tab

Une autre fonctionnalité utile de la ligne de commande Linux est la saisie semi-automatique des commandes à l'aide de la touche Tab (tab command completion) et la saisie semi-automatique de chemin à l'aide de la touche Tab (path completion). Si vous n'êtes pas sûr de l'orthographe complète correcte d'une commande ou un nom de fichier, vous pouvez saisir seulement deux ou trois lettres de début de cette commande et appuyer ensuite sur la touche Tab pour voir ce que l'interpréteur Bash propose comme assistance. Si la commande spécifiée par ce que vous avez saisi jusqu'ici est unique, l'interpréteur réalisera la tâche à votre place en complétant l'orthographe de la commande. Sinon, il vous proposera une liste de choix possibles.

En supposant, par exemple, que vous ayez besoin d'une commande susceptible de vous aider à configurer votre carte son mais que vous vous souveniez seulement qu'elle commence par syst, saisissez simplement

[tom@station1 ~]$ syst

Ensuite, appuyez sur la touche Tab (selon votre configuration, vous devrez peut-être appuyer deux fois), ce qui devrait afficher la sortie suivante :

system-cdinstall-helper          system-config-rootpassword
system-config-authentication     system-config-samba
system-config-date               system-config-securitylevel
system-config-display            system-config-securitylevel-tui
system-config-kdump              system-config-selinux
system-config-keyboard           system-config-services
system-config-language           system-config-soundcard
system-config-lvm                system-config-time
system-config-network            system-config-users
system-config-network-cmd        system-control-network
system-config-packages           system-install-packages
system-config-printer            systool

À partir de cette sortie, vous pouvez voir le nom de la commande dont vous avez besoin : system-config-soundcard. Cette fonctionnalité vaut également avec les chemins de fichiers. Pour l'utiliser et appréhender sa façon d'opérer, commencez par saisir un chemin de répertoire — mais, après avoir saisi deux ou trois caractères, appuyez sur Tab et regardez si Bash effectue le complétement automatique pour vous. Si ce n'est pas le cas, il se peut qu'il n'y ait pas de caractères pour que Bash fasse la différence avec un autre choix possible. Vous pouvez essayer d'ajouter un ou deux caractères de plus et appuyer sur Tab à nouveau. Le complétement devrait être réalisé, ce qui peut vraiment vous économiser un fastidieux travail de saisie :

cat /usr/include/c++/4.0.4/i486-linux-gnu/bits/messages_members.h devient cat /u⟹i⟹c+⟹⟹0.⟹i⟹b⟹m⟹ — soit 22 caractères au lieu de 66 !

9. Historique de commandes

L'utilisation des touches fléchées peut aussi vous faciliter la vie. Dans Bash, elles sont associées à ce que l'on appelle l'historique des commandes : appuyer sur la touche fléchée Précédent vous ramènera à la commande précédemment exécutée, alors qu'appuyer sur la même touche deux fois vous fera reculer de deux commandes. Bien évidemment, la touche fléchée Suivant fait l'opposé et vous fait avancer dans l'historique des commandes jusqu'à ce qu'il n'en reste plus. Pour voir tout ce que contient l'historique des commandes, saisissez history sur la ligne de commande. On peut rappeler une commande n'importe où dans la liste avec Ctrl-R et saisir une partie de cette commande. Il est également possible de rappeler une commande en notant son numéro dans la sortie de la commande history et en ajoutant un point d'exclamation suivi de ce numéro. Il y a beaucoup d'autres raccourcis disponibles ; vous pouvez en prendre connaissance dans la section « HISTORIQUE » de « man bash ».

10. Quelques commandes de base et commutateurs courants

CommandeDescriptionOptions courantesDescription
pwd

Afficher le nom du répertoire de travail en cours

--help

Afficher des informations d'aide

manAfficher une page de manuel[1-8]Numéro de section de la page de man
  -aToutes les informations pertinentes
  -kMot clé
cdChanger de répertoire..Monter d'un niveau
  /Racine du système de fichiers
  ~ ou rienDossier personnel de l'utilisateur actuel
lsRépertorier des fichiers-a --allAfficher tous les fichiers, même cachés
  -lListage long
  -h --human-readableTailles susceptibles d'être lues par un humain
cp Copier des fichiers-i --interactiveInvite avant écrasement
  -r --recursiveInclure les répertoires sous-jacents
  -a --archiveMode d'archive de tous les fichiers
mvDéplacer des fichiers-i --interactiveInvite avant écrasement
  -u --updateDéplacer un fichier s'il y en a un plus récent
  -f --forcePas d'invite avant écrasement
rmEffacer des fichiers-r --recursiveInclure les répertoires sous-jacents
  -f --forcePas d'invite avant une suppression
  -i --interactiveInvite avant une suppression
mkdirCréer un répertoire-p --parentsCréer des répertoires parents
  -m --mode=MODEDéfinir le mode de fichier
  -v --verboseAfficher une confirmation
rmdirSupprimer un répertoire-p --parentsSupprimer un répertoire et ses répertoires parents
  -v --verboseAfficher une confirmation
  --ignore-fail-on-non-emptyIgnorer un échec si les fichiers existent
catConcaténer des fichiers-b --number-nonblankNuméroter les lignes non vides
  -n --numberNuméroter toute les lignes
  -s --squeeze-blankN'afficher qu'une seule ligne blanche
locateRechercher l'emplacement de fichiers-c --countAfficher le compte de correspondances à la place
  -i --ignore-caseIgnorer la casse
  -S --statisticsAfficher les statistiques de bases de données
lessAfficher page par page en autorisant un retour en arrière.-N --LINE-NUMBERSAfficher les numéros de ligne
  -s --squeeze-blank-linesN'afficher qu'une seule ligne blanche
  -E --QUIT-AT-EOFFaire s'arrêter less à la dernière page
grepAfficher les lignes correspondant à un motif-i --ignore-caseIgnorer la sensibilité à la casse
  -R -r --recursiveLire tous les fichiers situés sous le répertoire
  -v --invert-matchSélectionner les lignes ne correspondant pas
mountMonter un périphérique-oPréciser des options additionnelles
  -tSpécifier manuellement le type de système de fichiers
  -aMonter tous les systèmes de fichiers dans fstab
umountDémonter un périphérique-tSpécifier le type de système de fichiers
  -vMode verbeux
  -rEn cas d'échec, remonter en lecture seule

11. Ressources (en anglais)

Joey Prestia est né à Phoenix et a commencé à programmer à l'âge de quatorze ans sur un Timex Sinclair 1000©. Il espérait pouvoir tirer quelque chose de ce modèle d'ordinateur ancien. Maîtrisant rapidement le BASIC et l'Assembleur, Joey est devenu programmeur en 1990 et a ajouté le COBOL, le Fortran et le Pascal à son répertoire de langages de programmation. Depuis lors, il se passionne pour presque tous les aspects de l'informatique. Il s'est perfectionné et a découvert RedHat Linux© en 2002, quand on lui a donné une version 6 de RedHat©. Ce fut le début d'une nouvelle passion centrée sur Linux. Actuellement, Joey termine sa formation en gestion de réseau sous Linux et travaille sur le campus pour la RedHat Academy de l'université, en Arizona. Il fait aussi partie de l'équipe de la Linux Gazette comme coordinateur de miroirs.

Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.