next up previous contents
Next: 1.6 Programme, processus, logiciel & Co [YB] Up: 1. Premiers pas Previous: 1.4 Le Shell.7 [YB]

Sous-sections

1.5 Commandes de bases

1.5.1 Format général des commandes [YB]

Une fois le système démarré, il attend les ordres que vous voudrez bien lui donner, sous la forme de ce que l'on appelle un prompt. Celui-ci qui peut présenter différentes formes selon les cas, par exemple :

[yves@kafka doc]$ _

Dans celui-ci, les informations affichées sont (de gauche à droite) :

La barre de soulignement symbolise le curseur clignotant. C'est à cet endroit que vous entrez les commandes au clavier, en terminant par la touche Entrée (en général, la plus grosse du clavier, sur la droite des lettres). Par entrer une commande, on entend frapper au clavier une suite de lettres ou autres caractères, de manière à constituer des mots que le système pourra interpréter. Dans l'exemple qui suit, le symbole \( \smile \) représente un espace frappé au clavier (qui donc n'affiche rien à l'écran) :

[yves@kafka doc]$ gzip\( \smile \)-9\( \smile \)Rapport.lyx\( \smile \)Lettre.txt_

Les espaces sont très importants lorsque vous donnez une commande. Par exemple, les deux mots <<gzip\( \smile \)-9>> seront interprétés de manière totalement différente par le système sous la forme <<gzip-9>>, sans espace. Ceci fait partie des règles à respecter pour donner correctement une commande au système ; l'ensemble de ces règles est désigné sous la terme de syntaxe, qui a en fait le même sens que lorsqu'on l'emploie pour parler de la syntaxe de la langue française.

Par ailleurs, il n'est pas rare que les commandes produisent un résultat à l'écran, c'est-à-dire affichent diverses informations. Dans la suite, nous parlerons alors d'affichage résultant, pour désigner ce qu'une commande pourra ainsi afficher.

Normalement, le système exécute la commande (si celle-ci est correctement orthographiée) avant d'autoriser la saisie d'une nouvelle commande. Toutefois, Linux est multi-tâche : il est donc possible de lancer une commande en arrière-plan, et de récupérer immédiatement la main. La commande s'exécutera alors pendant que vous faites autre chose. Ceci est particulièrement intéressant pour les commandes de longue durée, dont on peut ignorer l'affichage résultant. On réalise l'exécution d'une commande en arrière-plan en la faisant suivre du symbole <<et-commercial>> '&'. Par exemple :

[yves@kafka doc]$ ls -alR / > tous_fichiers &

Cette commande va donner une liste complète des fichiers du système, et stocker le résultat dans le fichier tous_fichiers. C'est généralement quelque chose d'assez long (un système Linux comporte souvent quelque dix mille ou vingt mille fichiers)... Des explications permettant de comprendre cette commande viennent dans la suite.

Comme vous l'avez constaté, nous utilisons une forme de caractère différente lorsqu'il s'agit de commandes ou de nom de fichiers. Il en sera de même dans tout le reste de l'ouvrage.

1.5.1.1 Options [YB]

La plupart des commandes acceptent des options (appellées aussi paramètres), qui permettent de préciser la manière dont elles doivent s'exécuter.

Sous Linux, la manière usuelle de spécifier des options est un tiret '-' précédé d'un espace et suivi d'une lettre, ou alors d'un double-tiret '-' suivi d'un mot. Il est généralement possible de combiner plusieurs options <<mono-lettres>> en une seule. Par exemple :

ls\( \smile \)-lisa\( \smile \)-color=tty (équivaut à ls\( \smile \)-l\( \smile \)-i\( \smile \)-s\( \smile \)-a\( \smile \)-color=tty)

rpm\( \smile \)-i\( \smile \)libg++-2.7.2.8-9.i386.rpm\( \smile \)-nodeps

Encore une fois, les espaces sont très importants. Dans la deuxième commande, le mot <<libg++-2.7.2.8-9.i386.rpm>> est un nom de fichier. Remarquez que ce nom comporte justement un tiret : l'abscence d'espace avant permet au système de comprendre que ce qui vient après le tiret n'est pas une option, mais la suite du nom de fichier. Deux options très répandues sont :

-h ou -help
Donne une (courte !) aide sur l'utilisation de la commande.
-ver ou -V
Donne le numéro de version de la commande utilisée.

1.5.1.2 Redirections [YB]

Il est fréquent que les commandes produisent un résultat à l'écran, ou parfois demandent des informations complémentaires à l'utilisateur. Il est possible de rediriger ces entrées/sorties à l'aide des symboles '>' et '<' : par exemple, le résultat d'une commande est trop long pour être affiché dans l'écran, ou bien on désire en garder une trace. Une redirection de la sortie de cette commande permet de stocker ce qu'elle afficherait normalement dans un fichier.

La commande suivante liste tous les éléments d'un système installé à partir d'une distribution RedHat ou S.u.S.E. (habituellement désignés sous le vocable de packages) :

rpm -qa

Si vous possédez une telle distribution, le nombre de packages dépasse en général largement la hauteur de l'écran... Et c'est assez malcommode à consulter. Ce problème peut être résolu en envoyant l'affichage dans un fichier, qu'il sera alors possible de consulter à loisir ou d'imprimer :

rpm -qa > tous_les_packages.txt

Les redirections peuvent être effectuées dans l'autre sens. Supposons que vous souhaitiez envoyer un courrier électronique, dont le texte se trouve dans un fichier. Une méthode consiste à exécuter :

mail untel@tel.adresse < message.txt

Ces exemples simples ne montrent pas toute la puissance des redirections. Disons simplement qu'il est possible de combiner les deux types ensemble, ou encore d'utiliser les pipes exposés maintenant...

  
1.5.1.3 Pipes1.11 [YB]

Ce mécanisme permet d'enchaîner l'exécution de plusieurs commandes, en branchant la sortie d'une commande sur l'entrée de la suivante, à l'aide du symbole '|' (obtenu sur un clavier français usuel en pressant simultanément sur la touche AltGr et la touche '6' au-dessus des lettres). Prenons un exemple.

Vous souhaitez connaître tous les fichiers de votre système dont le nom comporte les caractères 'doc'.

La commande permettant d'obtenir tous les fichiers du système est 'ls -alR /', nous l'avons déjà rencontrée.

Il exsite une commande permettant de rechercher les lignes comportant un certain texte dans un fichier, et de n'afficher que celles-ci : la commande grep, davantage détaillée en 2.6.11, page [*] (mais inutile pour l'instant de la comprendre pleinement !).

Avec les redirections, nous pourrions obtenir ce que nous voulons par :

ls -alR / > tous_fichiers

grep doc tous_fichiers

Un pipe nous permet toutefois de simplifier l'expression et d'éviter la création d'un fichier :

ls -alR / | grep doc

Le fonctionnement peut être illustré par la figure 1.3, page [*].


  
Figure 1.3: Mécanisme d'un pipe

\includegraphics{images/pipe.eps}


Ce qui se passe en réalité, c'est que ce qui est normalement affiché par la première commande est utilisé par la deuxième, comme s'il s'agissait d'un véritable fichier.

La combinaison des pipes et des redirections, en donnant les options judicieuses aux commandes impliquées, permet de réaliser en une seule ligne de commande des opérations très complexes. Mais gare à ne pas se perdre soi-même...

  
1.5.1.4 Jokers [YB]

Il est fréquent qu'une commande fasse référence à, ou utilise, un fichier. On peut toutefois vouloir appliquer une commande à plusieurs fichiers, parfois en très grand nombre : le fait de retaper la commande pour chaque fichier peut devenir rapidement fastidieux.

C'est pourquoi il existe les caractères jokers : leur rôle est de remplacer une ou plusieurs lettres dans un nom de fichier, de la même manière que le joker d'un jeu de cartes remplace la carte manquante. Il existe deux caractères jokers selon ce que l'on veut faire :

*
Sans doute le plus utilisé, permet de remplacer un groupe de caractères (lettres ou autre).
?
Permet de remplacer un seul caractère.
Envisageons quelques exemples.

Vous souhaitez obtenir la liste de tous les fichiers du répertoire courant commençants par les lettres <<courrier_>>. La commande est la suivante :

ls courrier_*

Le caractère '*' est interprété comme <<n'importe quoi>> : on demande donc la liste des fichiers commençant par <<courrier_>> suivi de <<n'importe quoi>>. Par contre, la commande :

ls courrier_?

...limite l'affichage aux fichiers dont le nom commence par <<courrier_>> suivi d'un seul caractère (quel qu'il soit).

Pour reprendre en partie l'exemple donné sur les pipes plus haut, une recherche équivalente dans le répertoire courant s'écrirait :

ls *doc*

  
1.5.2 man [YB]

Besoin d'un renseignement sur la fonction ou l'utilisation d'une commande ? Des questions sur la structure d'un fichier de configuration ? La commande man est là pour ça !

La commande man donne accès aux <<pages man>>1.12, les pages de manuel. Ces pages se trouvent dans le répertoire /usr/man, mais peuvent également se trouver en d'autres endroits plus spécialisés (voir figure 1.1, page [*]).

Ce que l'on appelle communément <<le man>> est subdivisé en plusieurs sections selon le propos des pages1.13, comme le montre le tableau 1.2.




 
Tableau 1.2: Les sections des pages man
Nom Description
1 Commandes utilisateurs usuels et communes
2 Appels système (fonctions du kernel)
3 Sous-programmes (fonctions des librairies de programmation)
4 Périphériques (fichiers dans /dev)
5 Format (structure) de certains fichiers, comme /etc/passwd
6 Jeux
7 Divers
8 Outils d'administration système (réservé à root)
9 Autres fonctions du kernel
n Documentation nouvelle (qui peut être déplacée par la suite)
o Documentation ancienne (qui peut disparaître un jour)
l Documentation locale (spécifique au système que l'on utilise)


Pour accéder à la page concernant une commande (par exemple, chmod), il suffit de taper :

man chmod

La commande man possède de nombreuses options de ligne de commande. Citons par exemple :

-a
Permet d'obtenir toutes les pages concernant le nom donné (essayez par exemple man -a kill)
-t
Provoque un formatage PostScript de la page, avant de l'envoyer sur la sortie standard. Une redirection permet d'obtenir un fichier PostScript immédiatement imprimable :
man -t adduser > adduser.ps
Il existe de nombreuses autres possibilités. Mais rien de vous empêche de faire man man...

Enfin, si vous savez dans quelle section se trouve la page cherchée (dans le cas de commandes possédant un équivalent en programmation), il est possible d'indiquer la section où chercher la page voulue :

man 2 mount

man 8 mount

Le man est une source inépuisable de renseignements. Surtout ne jamais le négliger ! Mais il est également possible d'obtenir de nombreuses informations dans le répertoire /usr/doc, notamment le sous-répertoire HOWTO.

1.5.3 Parcours et manipulation des répertoires

1.5.3.1 Promenade dans les répertoires [YB]

La commande cd permet de changer le répertoire courant.

Supposons nous trouver dans le répertoire /home, et pour quelque raison nous voulons aller dans le répertoire /usr/doc. Les trois séries de commandes suivantes effectuent l'opération souhaitée :

1.
cd /usr/doc
2.
cd ../usr/doc
3.
cd .. 
cd usr 
cd doc
Encore un exemple : nous sommes dans /usr/local/doc, et nous voulons aller dans /usr/X11R6/doc. Trois manières d'y parvenir :

1.
cd .. 
cd .. 
cd X11R6 
cd doc
2.
cd ../../X11R6/doc
3.
cd /usr/X11R6/doc
A vous de trouver laquelle vous préférez...

1.5.3.2 Création de répertoires [YB]

mkdir est utilisée pour créer un répertoire. Il est naturellement possible d'utiliser un chemin relatif ou un chemin absolu. Pour créer un répertoire dans le répertoire courant, il suffit de taper quelque chose du genre :

mkdir rep

Une option intéressante est l'option '-p' : elle permet de créer en une fois une hiérarchie de répertoire. Supposons que dans le répertoire courant, le répertoire Lettres n'existe pas, que l'on veuille le créer, ainsi qu'un sous-répertoire perso, contenant lui-même un répertoire Nath. On peut le faire en exécutant simplement :

mkdir -p Lettres/perso/Nath

1.5.3.3 Suppression de répertoires [YB]

La commande rmdir est utilisée pour supprimer un répertoire. Normalement, si le répertoire n'est pas vide, la commande envoie un message d'erreur. Il est toutefois possible de supprimer une hiérarchie de répertoires vides en une seule fois, avec l'option '-p'. Par exemple, juste après avoir exécuté :

mkdir -p Lettre/perso/Nath

on peut supprimer tous les répertoires que l'on vient de créer avec :

rmdir -p Lettre/perso/Nath

Par contre, la commande

rmdir -p Lettre/perso

renverra une erreur, car perso contient encore Nath et donc n'est pas vide.

1.5.3.4 Savoir où l'on est [YB]

La commande pwd toute simple donne le répertoire courant, par son chemin absolu. Bien pratique dans certains cas...

1.5.3.5 Encombrements des répertoires et des fichiers [YB]

Deux outils pour le contrôle de l'espace disque occupé par les fichiers.

du permet de connaître l'espace disque occupé par les fichiers d'un répertoires.

df permet de connaître l'espace disque total occupé et restant sur les partitions de votre système.

1.5.3.6 Illustration [YB]

La figure 1.4 page [*] illustre l'utilisation des commandes évoquées dans cette section. Le répertoire courant apparaît en grisé sur le dessin. Naturellement, seule une partie de l'arborescence est présentée.


  
Figure 1.4: Démonstration de manipulations de répertoires

\includegraphics{images/demo_repertoires.eps}


1.5.4 Manipulation des fichiers

  
1.5.4.1 Liste des fichiers dans un répertoire [YB]

ls donne la liste des fichiers contenus dans un répertoire. Appelée sans arguments, ls donne la liste des fichiers dans le répertoire courant.

Il existe de nombreuses options à ls. Nous n'évoquerons ici que les principales et les plus utiles, pour le reste, consultez la page man correspondante ('man ls').

-a
Liste également les fichiers cachés (dont le nom commence par un point).
-l
Affichage <<long>> : donne des informations supplémentaires sur les fichiers, tels que la taille, la date de dernière modification, les droits d'accès (voir 2.3 page [*]), etc.
-R
Liste récursivement le contenu des sous-répertoires. Essayez donc un 'ls -alR /'...
-X
Affiche les fichiers en les ordonnant selon leur extension (les caractères après le dernier point).
-1
Liste sur une seule colonne. Par défaut, ls utilise plusieurs colonnes, selon la longueures des noms à afficher.
-color=tty
Applique une couleur selon le type de fichier : une pour les répertoires, une pour les commandes exécutables, etc.

1.5.4.2 Supprimer des fichiers [YB]

Il est évidemment possible de supprimer des fichiers sous Linux. La commande à utiliser est rm. Prenez garde aux erreurs de manipulation : une fois un fichier effacé, il n'est plus possible de récupérer son contenu, celui-ci est irrémédiablement perdu. Par exemple, s'il existe dans le répertoire courant un fichier nommé core (les fichiers de ce nom sont généralement générés lorsqu'un programme provoque une erreur), vous pouvez le supprimer par :

rm core

Les options les plus utilisées de rm sont :

-R
Supprime tout un répertoire, ainsi que ses sous-répertoires. Attention ! Sur certains systèmes, une commande telle que 'rm -R .*' peut avoir des conséquences catastrophiques : elle supprime le répertoire courant, ainsi que les répertoires qu'il contient. Or, le répertoire '..', qui désigne l'ancêtre du répertoire courant, est contenu dans celui-ci : sur certaines version, rm va alors <<remonter>> dans l'arborescence, parvenir à la racine, puis redescendre... En quelques secondes, vous pouvez ainsi supprimer tous les fichiers de votre système Linux !
-i
Demande une confirmation avant de supprimer un fichier.

1.5.4.3 Copier des fichiers [YB]

La copie de fichiers (c'est-à-dire une duplication à l'identique, comme un clonage) s'effectue par cp. Il est toujours nécessaire d'indiquer ce que l'on copie (la source), puis vers quel endroit on le copie (la destination). Les caractères jockers (voir 1.5.1.4 page [*]) peuvent bien entendu être utilisés.

Méfiez-vous lorsque vous utilisez cette commande, surtout en tant qu'utilisateur root (voir 2.3.1 page [*]) : sauf configuration particulière, si vous copiez un fichier sur un autre de même nom dans un autre répertoire, ce dernier sera purement et simplement écrasé sans avertissement, c'est-à-dire que son contenu sera irrémédiablement perdu.

Enfin, la commande cp peut être utilisée pour simplement dupliquer un fichier dans un même répertoire. Par exemple, si dans le répertoire courant se trouve un fichier nommé Rapport.lyx, que vous souhaitez modifier mais en conservant la version précédente, vous pouvez effectuer :

cp Rapport.lyx Rapport.lyx.save

Le fichier actuel sera ainsi sauvegardé en tant que Rapport.lyx.save. Si vous n'êtes pas satisfait de vos modifications, vous pourrez toujours restaurer la version précédente par :

cp Rapport.lyx.save Rapport.lyx

Nous utilisons ici le fait que copier un fichier sur un fichier de même nom, écrase celui-ci : le Rapport.lyx sera exactement identique à celui que vous aviez sauvegardé avec la première commande.

Une utilisation plus courante de cp est de copier un fichier situé quelque part dans le répertoire courant, pour par exemple travailler dessus. Si vous souhaitez ainsi disposer dans le répertoire courant du fichier Printing-HOWTO situé dans le répertoire /usr/doc/HOWTO, vous pouvez utiliser :

cp /usr/doc/HOWTO/Printing-HOWTO .

Le '.' final désigne, rappelez-vous, le répertoire courant.

Quelques options :

-R
Pour copier une arborescence : si la source est un répertoire, cette option va copier ce répertoire et son contenu, ainsi que tous les sous-répertoires qu'il contient.
-i
Demande une confirmation si un fichier risque d'être écrasé.
-v
Affiche le nom de chaque fichier avant de le copier. Utile lorsqu'on copie un répertoire, ou que l'on utilise les caractères jockers.

1.5.4.4 Déplacer ou renommer des fichiers [YB]

mv permet de déplacer des fichiers (les fichiers sont copiés comme avec cp, puis effacés de la source). Si le répertoire source est le même que le répertoire destination, cette commande permet de renommer des fichiers.

Par exemple, s'il se trouve dans le répertoire courant un fichier nommé Lettre que vous voudriez renommer (changer son nom) en Lettre-16.03.1999 (une bonne manière d'insérer la date dans un nom de fichier), vous pouvez effectuer :

mv Lettre Lettre-16.03.1999

Supposons maintenant que vous souhaitiez déplacer ce fichier dans un répertoire qui s'appelerait Archives, c'est-à-dire placer une copie du fichier dans ce répertoire et supprimer l'original. Une première méthode est :

cp Lettre-16.03.1999 Archives

rm Lettre-16.03.1999

La commande mv permet de faire la même chose en une seule ligne :

mv Lettre-16.03.1999 Archives

De même que pour la commande cp, méfiez-vous : cette commande peut écraser des fichiers, si la cible existe déjà.

mv possède peu d'options. Citons :

-f
Force le déplacement, même si la cible existe déjà : ceci supprime les éventuels messages d'avertissement.
-i
Au contraire, cette option provoque une demande de confirmation si des fichiers risquent d'être écrasés.

1.5.4.5 La complétion des noms de fichier [YB]

Il s'agit là d'un petit quelque chose très pratique du shelle Bash. Prenons un exemple. Entrez la commande suivante (sans danger) :

cd /etc

Le résultat de cette commande est de nous amener dans le répertoire /etc, qui devient donc le répertoire courant.

Maintenant, tapez les caractères suivants, mais n'appuyez pas immédiatement sur Entrée :

more H

Appuyez maintenant sur la touche de tabulation. Normalement, vous devriez voir apparaître :

more HOSTNAME

Que s'est-il passe ? Lorsque vous avez appuyer sur la touche Tabulation, le shelle a recherché dans le répertoire courant les fichiers dont le nom commence par la lettre 'H' (rappelez-vous que Linux distingue les majuscules des minuscules dans les noms de fichiers). En principe, il n'y en qu'un seul, et le shelle complète alors le nom du fichier. Recommencez, avec cette fois :

more f 

suivie à nouveau de la touche Tabulation. Rien ne se passe, avec un peu de chance vous devriez même entendre un bip : c'est que plusieurs fichiers commencent par la lettre 'f'. Appuyez une deuxième fois sur Tabulation rapidement, et le shell affichera tous les fichiers commençant par 'f'.

Ceci fonctionne également si vous donnez un groupe de lettres, ou un chemin (relatif ou absolu). Essayez :

cd (vous replace dans votre répertoire de login)

more /etc/rc.d/rc (suivi de Tabulation : un bip, plusieurs fichiers commencent par 'rc' dans le répertoire /etc/rc.d)

Cette petit fonctionnalité est très pratique dès que l'on se trouve confronté à des noms de fichiers un peu longs. Expérimentez-la, vous l'apprécierez rapidement !

  
1.5.4.6 Affichage de fichiers (texte) [YB]

more et less permettent de consulter le contenu d'un fichier à l'écran, en l'affichant page par page. Par exemple :

more /etc/inittab

less /etc/passwd

Vous pouvez passer à la page suivante en appuyant sur la barre d'espace de votre clavier. Pour remonter d'une page avec less, il suffit de presser la touche 'b'. Normalement, less ne vous rend pas automatiquement la main : une fois arrivé à la fin du document, il faut presser la touche 'q' pour terminer less et pouvoir entrer une autre commande.

more est la commande la plus ancienne. less est une sorte de <<super-more>>, en ceci qu'il ajoute nombre de fonctionnalités. Consultez la page man correspondante pour plus de détails. less accepte des commandes lors de son fonctionnement : vous les tapez simplement au clavier, lorsque less a fini d'afficher une page, suivies d'un appui sur Entrée. Citons entre autres :

/<motif>
Effectue une recherche du motif dans le texte (les caractères '<' et '>' ne doivent pas être inclus). Très utile pour rechercher un mot dans un document long : pour rechercher le mot <<bonjour>>, entrez la commande /bonjour.
g
Retourne au début du fichier.
G
Va à la fin du fichier.
ng
Va à la ligne n du fichier.
Il est assez fréquent d'utiliser ces commandes au travers d'un pipe (voir 1.5.1.3 page [*]) pour lire un affichage long résultant d'une commande. Par exemple, la commande dmesg permet de voir les messages du système lors du démarrage : cela représente souvent plus d'une page-écran. Pour pouvoir consulter facilement ces messages, vous pouvez effectuer :

dmesg | more

1.5.4.7 Illustration [YB]

La figure 1.5 page [*] vous propose une démonstration des commandes rm, cp et mv évoquées plus haut. Les répertoires sont dans des cadres aux coins arrondis, les fichiers dans des cadres aux coins droits. Le répertoire courant apparaît en grisé.

Le contenu des fichiers est symbolisé par un motif de remplissage : un même motif remplissant les cadres de deux fichiers différents, signifie des contenus identiques.

  
Figure 1.5: Démonstration de manipulation de fichiers

\includegraphics{images/demo_fichiers.eps}




Footnotes

...Pipes1.9
Prononcer le 'i' à l'anglaise, comme dans <<aïe !>>. En Français, on parle de tubes.
...Pipes1.10
Prononcer le 'i' à l'anglaise, comme dans <<aïe !>>. En Français, on parle de tubes.
...Pipes1.11
Prononcer le 'i' à l'anglaise, comme dans <<aïe !>>. En Français, on parle de tubes.
... man>>1.12
man-pages en anglais, <<man>> pour manual, manuel en français.
... pages1.13
Liste extraite du Man-Pages mini-Howto

next up previous contents
Next: 1.6 Programme, processus, logiciel & Co [YB] Up: 1. Premiers pas Previous: 1.4 Le Shell.7 [YB]
kafka.fr@linux-france.org