Linux-Mandrake:
Guide de l'utilisateur
et Manuel de référence

MandrakeSoft

 
 
Janvier 2000
http://www.linux-mandrake.com


Suivant : L'édition de texte: Emacs et VI
Précédent : Où obtenir de la documentation
Retour

(Retour à la table des matières)

Chapitre 1 : Introduction à la ligne de commande


Dans le chapitre 4.0, nous avons vu comment lancer un shell et ses principes de base, mais nous ne l'avons pas mis au travail, et c'est ce que nous allons faire dans ce chapitre.

Le principal avantage du shell est le nombre d'utilitaires existants: il en existe des milliers, et chacun est dédié à une tâche particulère. Nous n'en verrons qu'un petit nombre ici. L'une des grandes forces d'Unix est la possibilité de combiner ces utilitaires, comme nous allons le voir un peu plus tard.

Utilitaires de manipulation de fichiers

La manipulation de fichiers signifie ici copier, déplacer et effacer des fichiers. Après ceci, nous verrons des manières de changer leurs attributs (propriétaire, permissions associées).

mkdir, touch: création de répertoires et fichiers vides (MaKe DIRectory, « créer un répertoire », « toucher »)

mkdir est utilisé pour créer des répertoires. Sa syntaxe est simple:

mkdir [options] <répertoire> [répertoire ...]

Une seule option est digne d'intérêt: l'option -p. Si cette option est passée en argument, mkdir créera les répertoires parents s'il n'existaient pas avant. Si elle ne l'est pas et que les répertoires parents n'existent pas, mkdir renverra une erreur. Exemples:

Initialement, la commande touch n'a pas pour but de créer des fichiers mais de mettre à jour les temps d'accès et de modification[3]. Toutefois, l'un de ses effets de bord est de créer les fichiers mentionnés s'ils n'existaient pas déjà. La syntaxe est:

touch [options] fichier [fichier...]

Donc, lancer la commande:

touch fichier1 images/fichier2

créera un fichier appelé fichier1 dans le répertoire courant et un fichier appelé fichier2 dans le répertoire images.

rm: supprimer des fichiers ou des répertoires (ReMove, « ôter »)

Cette commande joue le rôle des del et deltree du DOS, et plus encore. Sa syntaxe est:

rm [options] <fichier|répertoire> [fichier|répertoire...]

Parmi les options, on trouve:

Quelques exemples:

Attention: un fichier effacé avec rm est effacé de façon irrévocable. Il n'y a aucun moyen de récupérer les fichiers! N'hésitez donc pas à utiliser l'option -i...

mv: déplacer ou changer le nom des fichiers (MoVe, « déplacer »)

La syntaxe de la commande mv est la suivante:

mv [options] <fichier|rép.> [fichier|rép...] <destination>

Quelques options:

Quelques exemples:

cp: copier des fichiers et des répertoires (CoPy, « copier »)

cp est un remplacement pour les commandes copy, xcopy de DOS et plus. Sa syntaxe est la suivante:

cp [options] <fichier|rép.> [fichier|rép...] <destination>

Il existe une myriade d'options. Voici les plus utilisées:

Quelques exemples:

Manipulation des attributs de fichiers

La série de commandes présentée ici est utilisée pour changer le propriétaire ou groupe propriétaire d'un fichier ou ses droits d'accès. Nous avons vu les différents droits d'accès dans le chapitre 4.0.

chown, chgrp: changer l'utilisateur et le groupe propriétaires d'un ou plusieurs fichiers (CHange OWNer, « changer de propriétaire »; CHange GRouP) « changer de groupe »

La syntaxe de la commande chown est la suivante:

chown [options] <utilisateur[.groupe]> <fichier|rép.> [fichier|rép...]

Entre autres options, on trouve:

Quelques exemples:

La commande chgrp ne vous laisse changer que le groupe propriétaire d'un fichier ou d'un groupe de fichiers; sa syntaxe est très semblable à celle de la commande chown:

chgrp [options] <groupe> <fichier|rép.> [fichier|rép...]

Les options de cette commande sont les mêmes que pour chown, et elle est utilisée de façon très similaire. Ainsi, la commande:

chgrp disk /dev/hd*

attribue au groupe disk tous les fichiers du répertoire /dev dont le nom commence par hd.

chmod: changer les permissions sur des fichiers et des répertoires (CHange MODe, « changer le mode »)

La commande chmod a une syntaxe bien particulière. La syntaxe générale est:

chmod [options] <changement de mode> <fichier|rép.> [fichier|rép...]

mais ce qui la distingue, ce sont les différentes formes que peut prendre le changement de mode. Il peut être spécifié de deux façons:

Les options principales sont très similaires à celles de chown ou chgrp:

Exemples:

Motifs d'englobement du shell et expressions rationnelles

Vous utilisez sans doute déjà des caractères d'englobement sans le savoir. Quand vous enregistrez un fichier dans une application sous Windows, quand vous recherchez un fichier, vous utilisez * pour désigner une suite de caractères quelconque. Par exemple, *.txt désigne l'ensemble des fichiers dont le nom se termine par .txt. Nous l'avons également beaucoup utilisé dans la section précédente. Mais l'englobement va beaucoup plus loin que le seul *.

Quand vous tapez une commande comme ls *.txt et tapez Entrée, la tâche de trouver quels fichiers correpondent au motif *.txt n'est pas du ressort de ls, mais par le shell lui-même. Cela requiert une petite explication sur la façon dont le shell interprète une ligne de commande. Quand vous tapez:

$ ls *.txt
readme.txt  recettes.txt

la ligne de commande est tout d'abord séparée en mots (ls et *.txt en l'occurrence). Quand le shell voit le * dans un des mots, il interprète le mot comme étant un motif englobant et le remplace dans la ligne de commande par les noms de tous les fichiers correspondant au motif. La ligne juste avant exécution par le shell est donc devenue ls readme.txt recettes.txt, ce qui donne le résultat recherché. Le shell réagit aussi à la vue d'autres caractères:

Voici quelques exemples de motifs et leurs significations:

Redirections et tubes

Un peu plus sur les processus

Pour comprendre le principe des redirections et des tubes, nous avons besoin d'expliquer une notion sur les processus qui n'a pas encore été introduite. Chaque processus sous Unix (y compris les applications graphiques) ouvre un minimum de trois descripteurs de fichiers: l'entrée standard, la sortie standard et le canal d'erreur standard. Leurs numéros respectifs sont 0, 1 et 2. En général, ces trois descripteurs sont associés au terminal depuis lequel le processus a été lancé, l'entrée standard étant lue depuis le clavier. Le but des redirections et des tubes est de rediriger ces descripteurs. Les exemples dans cette section vont vous aider à mieux comprendre.

Redirections

Supposons par exemple que vous vouliez connaître la liste des fichiers se terminant par .gif[5] dans le répertoire images, mais cette liste est très longue, vous avez donc intérêt à la stocker dans un fichier pour la consulter à loisir ensuite. Vous pouvez alors taper ceci:

ls images/*.gif 1>liste_fichiers

Ce qui signifie que la sortie standard de cette commande (1) est redirigée (>) vers le fichier de nom liste_fichiers. L'opérateur > est l'opérateur de redirection de sortie. Si le fichier de redirection n'existait pas, il est créé, mais s'il existait son ancien contenu sera écrasé. Cependant, par défaut, le descripteur redirigé par cet opérateur est la sortie standard, il n'est pas besoin de le spécifier sur la ligne de commande. Vous pouvez donc écrire plus simplement:

ls images/*.gif >liste_fichiers

et le résultat sera exactement le même. Vous pouvez ensuite consulter le fichier à l'aide d'un visualisateur de fichiers texte tel que less.

Supposons maintenant que vous vouliez savoir le nombre de ces fichiers. Au lieu de compter à la main, vous utilisez le bien nommé wc (Word Count, « compter les mots ») avec l'option -l, qui écrit sur la sortie standard le nombre de lignes du fichier. Une solution est la suivante:

wc -l 0<liste_fichiers

et cela donne le résultat voulu. L'opérateur < est l'opérateur de redirection d'entrée, et de même le descripteur redirigé par défaut est celui de l'entrée standard, donc 0, et la ligne s'écrit simplement:

wc -l <liste_fichiers

Supposons maintenant que vous vouliez consulter cette liste en retirant toutes les « extensions » des fichiers et mettre le résultat dans un autre fichier. Un outil pour se faire est sed, pour Stream EDitor (« éditeur de flux »). Il suffit de rediriger l'entrée standard de sed vers le fichier liste_fichiers et de rediriger sa sortie vers le fichier résultat, par exemple la_liste:

sed -e 's/.gif$//g' <liste_fichiers >la_liste

et voilà votre liste créée, que vous pouvez de même consulter à loisir avec un visualisateur.

Il peut aussi s'avérer utile de rediriger l'erreur standard. Par exemple, vous voulez savoir quels répertoires dans /shared ne vous sont pas accessibles: une solution est de lister récursivement ce répertoire et de rediriger les erreurs vers un fichier, tout en n'affichant pas le canal de sortie standard:

ls -R /shared >/dev/null 2>erreurs

ce qui signifie que la sortie standard sera redirigée (>) vers /dev/null, fichier spécial dans lequel tout ce qu'on écrit est perdu (donc par effet de bord la sortie standard n'est pas affichée) et que le canal d'erreur standard (2) est redirigé (>) vers le fichier erreurs.

Tubes

Les tubes (pipes en anglais) sont en quelque sorte une combinaison des redirections d'entrée et de sortie. Son principe est celui d'un tube même, d'où son nom: un processus envoie des données dans le tube par un bout et un autre processus lit les données par l'autre bout. L'opérateur tube est |. Reprenons l'exemple de la liste des fichiers ci-dessus. Supposons que vous vouliez savoir directement le nombre de fichiers correspondants sans avoir à stocker la liste dans un fichier temporaire, vous utiliserez alors la commande suivante:

ls images/*.gif | wc -l

ce qui signifie que la sortie standard de la commande ls (donc la liste des fichiers) est redirigée vers l'entrée standard de la commande wc. Vous obtenez donc le résultat désiré.

Vous pouvez de même construire directement la liste des fichiers « sans les extensions » avec la commande suivante:

ls images/*.gif | sed -e 's/.gif$//g' >la_liste

ou, si vous voulez consulter directement la liste sans la stocker dans un fichier:

ls images/*.gif | sed -e 's/.gif$//g' | less

Les tubes et les redirections ne sont pas limités au seul texte lisible par les humains. Ainsi, la commande suivante, lancée à partir d'un xterm:

xwd -root | convert -  /mon_bureau.gif

fera une capture d'écran de votre bureau dans le fichier intitulé mon_bureau.gif[6] dans votre répertoire personnel.

Le complètement

Le complètement est une fonctionnalité des plus pratiques, et tous les shells modernes (dont bash) l'incluent. Son but est de faire travailler l'utilisateur le moins possible. Le mieux pour illustrer ce qu'est le complètement est un exemple.

Exemple

Supposons que vous ayez dans votre répertoire personnel un fichier fichier_au_nom_très_long_impossible_à_taper, et vous voulez le consulter. Supposons que vous ayez également dans ce même répertoire un autre fichier appelé fichier_texte. Vous vous trouvez dans votre répertoire personnel. Vous tapez alors la séquence suivante:

$ less fi<TAB>

(c'est-à-dire, tapez less fi suivi d'une pression sur la touche TAB). Le shell aura alors étendu la ligne de commande pour vous:)

$ less fichier_

et aura également marqué la liste des choix possibles (dans sa configuration par défaut, qui peut être personnalisée). Tapez alors la séquence de touches suivante:

less fichier_a<TAB>

et le shell aura étendu la ligne de commande pour obtenir le résultat que vous souhaitiez:

less fichier_au_nom_très_long_impossible_à_taper

Il ne vous reste plus alors qu'à taper sur la touche Entrée pour valider et consulter le fichier.

De façon plus générale

La touche TAB n'est pas le seul moyen d'activer le complètement, bien que ce soit la façon la plus courante de faire. De façon générale, le mot à compléter sera un nom de commande pour le premier mot de la ligne de commande (nsl<TAB> donnera nslookup), et un nom de fichier pour tous les autres, à moins que le mot ne soit précédé d'un caractère « magique » parmi  , @ ou $, auquel cas le shell essaiera de compléter respectivement un nom d'utilisateur, un nom de machine ou une variable d'environnement[7]. Il existe également un caractère magique pour compléter un nom de commande (!) ou un nom de fichier (/).

Les deux autres façons d'activer le complètement sont les séquences Esc-<x> et C-x <x> (Esc pour la touche Échap, C-x voulant dire Control+<x>) où <x> est l'un des caractères magiques déjà mentionnés). Taper Esc-<x> tentera le complètement de façon unique, et en cas d'échec complètera le mot à la plus grande sous-chaîne possible dans la liste des choix. Un bip signifie soit que le choix n'est pas unique, soit qu'il n'y a tout simplement pas de choix correspondant. La séquence C-x <x> affichera la liste des choix possibles sans tenter aucun complètement. La pression sur la touche TAB est équivalente à une pression successive de Esc-<x> et de C-x <x>, le caractère magique dépendant du contexte.

Ainsi, une façon de voir toutes les variables d'environnement définies est de taper sur une ligne vierge la séquence C-x $. Un autre exemple: si on veut voir la page de manuel de la commande nslookup, il suffit de taper man nsl puis Esc-!, et le shell complétera automatiquement en man nslookup.

Lancement et manipulation de processus en arrière-plan: le job control (« contrôle des processus en arrière-plan »)

Vous aurez remarqué que quand vous lancez une commande à partir d'un terminal, vous devez normalement attendre que la commande soit terminée pour que le shell vous rende la main: vous avez lancé la commande au premier plan. Il y a des situations, cependant, où cela n'est pas souhaitable.

Supposons, par exemple, que vous ayez entrepris de copier récursivement un gros répertoire vers un autre. Vous décidez également d'ignorer les erreurs, donc vous redirigez le canal d'erreur vers /dev/null:

cp -R images/ /shared/ 2>/dev/null

Une telle commande peut prendre plusieurs minutes avant de se terminer. Vous disposez alors de deux solutions: la première, brutale, est d'interrompre (de tuer) la commande pour la relancer plus tard, quand vous aurez le temps. Pour ce faire, tapez C-c (Control+'c'): vous reviendrez alors à l'invite.

Mais vous souhaiteriez quand même que la commande s'exécute tout en faisant autre chose. La solution est alors de mettre le processus en arrière-plan. Pour ce faire, tapez C-z pour suspendre le processus:

$ cp -R images/ /shared/ 2>/dev/null
  # Tapez C-z
[1]+  Stopped                 cp -R images/ /shared/ 2>/dev/null
$

et vous revoilà devant le prompt. Le processus est alors suspendu en attente que vous le relanciez (comme l'indique le mot-clé Stopped, « arrêté »). C'est ce que vous voulez faire, bien sûr, mais à l'arrière-plan. Tapez bg (pour BackGround, « arrière-plan »), cela aura l'effet escompté:

$ bg
[1]+ cp -R images/ /shared/ 2>/dev/null &
$

Le processus aura alors repris son exécution en tâche de fond, ce qu'indique le signe & (esperluette) à la fin de la ligne. Vous vous retrouvez alors en face de l'invite et pouvez continuer à travailler. Un processus qui tourne en tâche de fond, ou arrière-plan, est appelé un job.

Vous pouvez bien sûr lancer directement des processus en tâche de fond, justement en ajoutant une '&' à la fin de la commande. Ainsi vous pouvez lancer la copie du répertoire en arrière-plan en écrivant:

cp -R images/ /shared/ 2>/dev/null &

Si vous le souhaitez, vous pouvez également remettre ce processus au premier plan et attendre qu'il se termine en tapant fg (pour ForeGround, « premier plan »). Répétez alors la séquence C-z, bg pour le remettre à l'arrière-plan.

Vous pouvez lancer plusieurs jobs de cette façon: chacune de ces commandes recevra alors un numéro de job. La commande jobs du shell indique la liste de tous les jobs associés au shell courant. Le job précédé d'un signe + désigne le dernier processus mis en tâche de fond. Pour remettre au premier plan un job en particulier, vous pourrez alors taper fg <n><n> désigne le numéro de job, par exemple fg 5.

Notez que vous pouvez également suspendre ou lancer de cette façon des applications plein écran (si elles sont correctement programmées), telles que less ou un éditeur de texte comme VI, et les remettre au premier plan quand vous le voulez.

Un dernier mot

Vous avez pu vous en rendre compte, le shell est très complet, et l'utiliser efficacement est avant tout une question de pratique. Il n'a été fait mention dans ce chapitre relativement long que de quelques-unes des commandes disponibles: Linux-Mandrake comporte des milliers d'utilitaires, et même les utilisateurs les plus expérimentés n'en utilisent qu'une centaine au grand maximum.

Il existe des utilitaires pour tous les goûts et toutes les utilisations: vous avez des utilitaires de manipulation d'images (tels que convert mentionné plus haut, mais aussi le mode batch de GIMP et tous les utilitaires de manipulation de pixmaps), de sons (encodeurs MP3, lecteurs de CD audio), de gravure de CD-ROM, des programmes de courrier électronique, des clients FTP et même des navigateurs web (lynx ou w3m), sans oublier tous les outils d'administration.

Même s'il existe des applications graphiques aux fonctionnalités équivalentes, ce sont le plus souvent des interfaces graphiques faites autour de ces mêmes utilitaires; en plus de cela, les utilitaires en ligne de commande ont l'avantage de pouvoir fonctionner en mode non interactif: vous pouvez lancer une gravure de CD et vous délogguer du système ensuite en étant sûr que la gravure s'effectuera (voir la page de manuel de la commande nohup(1)).


Suivant : L'édition de texte: Emacs et VI
Précédent : Où obtenir de la documentation
Retour

Copyright © 2000 MandrakeSoft