Principes de base de Bash

Effectué

Pour bien comprendre Bash, commençons par examiner sa syntaxe. Une fois que vous aurez compris la syntaxe, vous pourrez l’appliquer à chaque commande Bash que vous exécutez.

La syntaxe complète d’une commande Bash est la suivante :

command [options] [arguments]

Bash considère la première chaîne qu’il rencontre comme une commande. La commande suivante utilise la commande Bash ls (qui signifie « list ») pour afficher le contenu du répertoire de travail actif :

ls

Des arguments accompagnent souvent les commandes Bash. Par exemple, vous pouvez inclure un nom de chemin dans une commande ls pour lister le contenu d’un autre répertoire :

ls /etc

Des options permettent de modifier le fonctionnement de la plupart des commandes Bash. Ces options, ou indicateurs, fournissent des instructions plus spécifiques à une commande. Par exemple, les fichiers et les répertoires dont le nom commence par un point sont masqués à l’utilisateur et ne sont pas affichés par ls. Toutefois, vous pouvez inclure l’indicateur -a (qui signifie « all ») dans une commande ls pour voir tout ce qui se trouve dans le répertoire cible :

ls -a /etc

Vous pouvez même combiner des indicateurs par souci de concision. Par exemple, au lieu d’entrer ls -a -l /etc pour afficher tous les fichiers et répertoires dans le répertoire /etc de Linux au format long, entrez ceci à la place :

ls -al /etc

Bash est concis. Ce que vous pouvez accomplir avec une seule commande Bash est parfois remarquable (et une source de fierté chez les passionnés).

Obtenir de l’aide

Les options et les arguments que vous pouvez ou devez utiliser varient d’une commande à l’autre. Heureusement, la documentation de Bash est intégrée au système d’exploitation. Vous pouvez y accéder d’une simple commande. Pour connaître les options d’une commande, utilisez man (qui signifie « manual »). Par exemple, pour voir toutes les options de la commande mkdir (« make directory »), procédez comme suit :

man mkdir

man est votre meilleur ami quand vous apprenez Bash. man vous permet de trouver toutes les informations nécessaires pour comprendre comment n’importe quelle commande fonctionne.

La plupart des commandes Bash et Linux prennent en charge l’option --help. Celle-ci montre une description de la syntaxe et des options d’une commande. Pour faire une démonstration, entrez mkdir --help. La sortie ressemble à ceci :

Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
    
Mandatory arguments to long options are mandatory for short options too.
  -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask
  -p, --parents     no error if existing, make parent directories as needed
  -v, --verbose     print a message for each created directory
  -Z                   set SELinux security context of each created directory
                         to the default type
      --context[=CTX]  like -Z, or if CTX is specified then set the SELinux
                         or SMACK security context to CTX
      --help     display this help and exit
      --version  output version information and exit
    
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report mkdir translation bugs to <http://translationproject.org/team/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'

L’aide obtenue de cette façon est généralement plus concise que celle fournie par man.

Utiliser des caractères génériques

Les caractères génériques sont des symboles qui représentent un ou plusieurs caractères dans les commandes Bash. Le caractère générique le plus fréquemment utilisé est l’astérisque. Il représente zéro caractère ou une séquence de caractères. Supposons que votre répertoire actif contienne des centaines de fichiers images, mais que vous souhaitiez uniquement voir les fichiers PNG (ceux dont le nom se termine par .png). Voici la commande permettant de lister uniquement ces fichiers :

ls *.png

Notes

Linux n’utilise pas un système formel d’extension de nom de fichier comme les autres systèmes d’exploitation. Cela ne veut pas dire que les fichiers PNG n’ont pas d’extension .png. Cela signifie simplement que Linux n’attache aucune importance particulière au fait que les noms de fichiers se terminent par .png.

Supposons à présent que le répertoire actif contienne également des fichiers JPEG. Certains se terminent par .jpg, tandis que d’autres se terminent par .jpeg. Voici une façon de lister tous les fichiers JPEG :

ls *.jpg *.jpeg

Et en voici un autre :

ls *.jp*g

Le caractère générique * correspond à zéro caractère ou plus, mais le caractère générique ? représente un caractère unique. Si le répertoire actif contient des fichiers nommés 0001.jpg, 0002.jpg et ainsi de suite jusqu’à 0009.jpg, la commande suivante liste tout :

ls 000?.jpg

Une autre façon d’utiliser des caractères génériques pour filtrer la sortie consiste à utiliser des crochets, qui désignent des groupes de caractères. La commande suivante liste tous les fichiers du répertoire actif dont le nom contient un point immédiatement suivi d’un J ou d’un P minuscule. Elle liste donc tous les fichiers .jpg, .jpeg et .png mais pas les fichiers .gif :

ls *.[jp]*

Dans Linux, les noms de fichiers et les commandes opérées sur ceux-ci respectent la casse. Pour lister tous les fichiers du répertoire actif dont le nom contient un point suivi d’un J ou d’un P majuscule ou minuscule, vous pouvez donc entrer ceci :

ls *.[jpJP]*

Les expressions entre crochets peuvent représenter des plages de caractères. Par exemple, la commande suivante liste tous les fichiers du répertoire actif dont le nom commence par une lettre minuscule :

ls [a-z]*

En revanche, cette commande liste tous les fichiers du répertoire actif dont le nom commence par une lettre majuscule :

ls [A-Z]*

Celle-ci liste tous les fichiers du répertoire actif dont le nom commence par une lettre minuscule ou majuscule :

ls [a-zA-Z]*

En fonction de tout cela, pouvez-vous deviner ce que font les commandes suivantes ?

ls [0-9]*
ls *[0-9]*
ls *[0-9]

Si vous devez utiliser l’un des caractères génériques comme caractère ordinaire, vous devez le rendre littéral ou « l’échapper » en le faisant précéder d’une barre oblique inverse. Donc, si pour une raison quelconque, vous avez un astérisque dans un nom de fichier (ce que nous vous déconseillons de faire de manière intentionnelle), vous pouvez le rechercher à l’aide d’une commande semblable à celle-ci :

$ ls *\**