Show 023.html syntax highlighted
<HTML><HEAD><TITLE>Linux-Mandrake: Guide de l'utilisateur et Manuel de référence</TITLE>
<LINK REV=MADE HREF="mailto:info@mandrakesoft.com"></HEAD>
<BODY BGCOLOR="#ffffff"><center><font size="+5"><STRONG><table border="0"><tr><td><STRONG>Linux-Mandrake</STRONG>:</td></tr><tr><td>Guide de l'utilisateur</td></tr><tr><td>et Manuel de référence</td></tr></table></STRONG></font>
<p><font size="+2"><STRONG><table border="0"><tr><td><STRONG>MandrakeSoft</STRONG></td></tr></table></STRONG></font>
<p><STRONG><table border="0"><tr><td> </td></tr><tr><td> </td></tr><tr><td>Janvier 2000</td></tr><tr><td><CODE>http://www.linux-mandrake.com</CODE></td></tr><tr><td></td></tr></table></STRONG></center>
<hr><a href="024.html">Suivant : Installation en mode texte</a><br><a href="022.html">Précédent : Installation d'un logiciel libre</a><br><a href="../">Retour</a><br><hr><a href="000.html#toc"><font size="-1">(Retour à la table des matières)</font></a>
<H1><font size="+1"><a name="276">Chapitre 2 : Les utilitaires en ligne de commande</a></font></H1><hr><p>Le but de ce chapitre est d'introduire un petit nombre d'outils en ligne
de commande qui peuvent s'avérer utiles au quotidien. Bien sûr, vous
pouvez passer ce chapitre si vous avez l'intention de n'utiliser qu'un
environnement graphique, mais un rapide coup d'oeil peut vous faire
changer d'avis <CODE>:)</CODE>
<p>Ce chapitre n'est pas vraiment organisé. Les utilitaires sont listés
comme ils viennent, des plus utilisés aux plus obscurs. Chaque commande
sera illustrée par un exemple, mais il vous est laissé à titre
d'exercice de lui trouver des usages plus utiles.
<H1><a name="277"><CODE>grep</CODE>: <EM>General Regular Expression Parser</EM> (« analyseur syntaxique général d'expressions rationnelles »)</a></H1>
<p>D'accord, le nom n'est pas très intuitif, pas plus que son acronyme, mais
son utilisation est simple: chercher un motif donné en argument dans un
ou plusieurs fichiers. Sa syntaxe est:
<p><font size="0"><PRE>
grep [options] <motif> [un ou plusieurs fichier(s)]
</PRE></font>
<p>Si on a précisé plusieurs noms de fichiers, leur nom apparaît en début
des lignes remplissant les critères du motif, à moins qu'on n'ait
utilisé l'option <CODE>-h</CODE>. L'option <CODE>-l</CODE> a pour effet de
n'afficher que le nom des fichiers dont au moins une ligne remplit les
conditions du motif. Il est parfois utile, lorsque la liste des
arguments est longue, de parcourir les fichiers à l'intérieur d'une
<STRONG>boucle</STRONG> du <EM>shell</EM> et d'utiliser le truc suivant:
<CODE>grep <motif> <nom_de_fichier> /dev/null</CODE>.
<p>Le motif est une expression rationnelle, bien que la plupart du temps il
ne consiste qu'en un simple mot. Les options les plus couramment
utilisées sont les suivantes:
<ul><li><STRONG><CODE>-i</CODE></STRONG>: Rechercher en ignorant la <STRONG>casse</STRONG>
(ou <STRONG>capitalisation</STRONG>).
<li><STRONG><CODE>-v</CODE></STRONG>: Inverser la recherche: trouver les lignes ne
correspondant pas au motif.
<li><STRONG><CODE>-n</CODE></STRONG>: Afficher le numéro de ligne pour chaque ligne
trouvée.
<li><STRONG><CODE>-w</CODE></STRONG>: Dit à <CODE>grep</CODE> que le motif doit correspondre à
un mot entier. Attention, les caractères considérés comme pouvant faire
partie d'un mot dépendent du réglage de la langue.</ul>
<p>Voici un exemple d'utilisation:
<p><font size="0"><PRE>
$ cat victim
Hello dad
Hi daddy
So long dad
# Chercher la chaîne "hi", peu importe la casse
$ grep -i hi victim
Hi daddy
# Chercher "dad" comme un mot entier, et afficher
# le numéro de ligne en face de chaque ligne
# correspondante
$ grep -nw dad victim
1:Hello dad
3:So long dad
# Chercher toutes les lignes ne commençant pas
# par un "H"
$ grep -v "^H" victim
So long dad
$
</PRE></font>
<p>Si vous voulez utiliser <CODE>grep</CODE> dans un tube, vous n'avez pas à
spécifier de nom de fichier, car par défaut, il prend son entrée depuis
l'<STRONG>entrée standard</STRONG>. De même, par défaut, il affiche les résultats
sur la <STRONG>sortie standard</STRONG>, donc vous pouvez sans crainte mettre la
sorte de <CODE>grep</CODE> dans un autre tube. Par exemple:
<p><font size="0"><PRE>
$ cat /usr/doc/HOWTO/Parallel-Processing-HOWTO | \
grep -n thread | less
</PRE></font>
<H1><a name="278"><CODE>find</CODE>: trouver des fichiers en fonction de certains critères</a></H1>
<p><CODE>find</CODE> est un utilitaire <STRONG>Unix</STRONG> de longue date. Son but
est de parcourir récursivement un ou plusieurs répertoires et d'y
trouver des fichiers correspondant à un certain ensemble de critères.
Bien qu'il soit très utile, sa syntaxe est vraiment complexe, et
l'utiliser requiert une certaine habitude. La syntaxe générale est:
<p><font size="+1"><PRE>
find [options] [répertoires] [critère] [action]
</PRE></font>
<p>Si vous ne spécifiez aucun répertoire, <CODE>find</CODE> recherchera dans
le répertoire courant. Si vous ne spécifiez pas de critère, c'est
équivalent à « vrai », et donc tous les fichiers seront trouvés.
Les options, critères et actions sont si nombreux que nous n'en
mentionnerons que quelques-uns ici. Commençons par les options:
<ul><li><STRONG><CODE>-xdev</CODE></STRONG>: Ne pas étendre la recherche aux répertoires se
trouvant sur d'autres systèmes de fichiers.
<li><STRONG><CODE>-mindepth <n></CODE></STRONG>: Descendre d'au moins <CODE><n></CODE>
niveaux en-dessous du répertoire de recherche avant de chercher des
fichiers.
<li><STRONG><CODE>-maxdepth <n></CODE></STRONG>: Rechercher les fichiers se
trouvant au plus <CODE>n</CODE> niveaux en-dessous du répertoire de
recherche.
<li><STRONG><CODE>-follow</CODE></STRONG>: Suivre les liens symboliques s'il pointent vers
des répertoires. Par défaut, <CODE>find</CODE> ne les suivra pas.
<li><STRONG><CODE>-daystart</CODE></STRONG>: Quand il est fait usage de tests relatifs à la
date et l'heure, (voir ci-dessous), prendre le début de la journée
courante comme repère au lieu de la marque par défaut (24 heures avant
l'heure courante).</ul>
<p>Un critère peut être un ou plusieurs tests <STRONG>atomiques</STRONG>; quelques
tests utiles sont:
<ul><li><STRONG><CODE>-type <type></CODE></STRONG>: Rechercher un type de fichiers donné;
<CODE><type></CODE> peut être: <CODE>f</CODE> (fichier régulier), <CODE>d</CODE>
(répertoire), <CODE>l</CODE> (lien symbolique), <CODE>s</CODE>
(<EM>socket</EM>), <CODE>b</CODE> (fichier en mode bloc), <CODE>c</CODE>
(fichier en mode caractère) or <CODE>p</CODE> (tube nommé).
<li><STRONG><CODE>-name <motif></CODE></STRONG>: Trouver les fichiers dont les noms
correspondent au <CODE><motif></CODE> donné. Avec cette option, <CODE><motif></CODE>
est traité comme un <STRONG>motif d'englobement</STRONG> du <EM>shell</EM> (voyez
le chapitre 32.0).
<li><STRONG><CODE>-iname <motif></CODE></STRONG>: Comme <CODE>-name</CODE>, mais
ne tient pas compte de la casse.
<li><STRONG><CODE>-atime <n></CODE>, <CODE>-amin <n></CODE></STRONG>: Trouver
les fichiers dont la dernière date d'accès remonte à <CODE><n></CODE> jours
(<CODE>-atime</CODE>) ou <CODE><n></CODE> minutes (<CODE>-amin</CODE>). Vous pouvez
aussi spécifier <CODE>+<n></CODE> ou <CODE>-<n></CODE>, auquel cas la recherche
sera effectuée sur les fichiers accédés au plus ou au moins <CODE><n></CODE>
jours/minutes auparavant.
<li><STRONG><CODE>-anewer <fichier></CODE></STRONG>: Trouver les fichiers dont la
dernière date d'accès est plus récente que celle du fichier
<CODE><fichier></CODE>
<li><CODE>-ctime <n></CODE>, <CODE>-cmin <n></CODE>,
<CODE>-cnewer <fichier></CODE> Même chose que pour
<CODE>-atime</CODE>, <CODE>-amin</CODE> et <CODE>-anewer</CODE>, mais s'applique à
la dernière date de changement du contenu des fichiers.
<li><STRONG><CODE>-regex <motif></CODE></STRONG>: Comme pour <CODE>-name</CODE>, mais
<CODE>motif</CODE> est traité comme une expression rationnelle.
<li><STRONG><CODE>-iregex <motif></CODE></STRONG>: Comme <CODE>-regex</CODE>, mais
sans tenir compte de la casse.</ul>
<p>Beaucoup d'autres tests existent, référez-vous à la page de manuel pour
plus de détails. Pour combiner ces tests, vous pouvez utiliser:
<ul><li><STRONG><CODE><c1> -a <c2></CODE></STRONG>: Vrai si <CODE><c1></CODE> and
<CODE><c2></CODE> sont vrais tous les deux; <CODE>-a</CODE> est implicite, donc
vous pouvez utiliser <CODE><c1> <c2> <c3> ...</CODE>
si vous voulez que tous les tests <CODE><c1></CODE>, <CODE><c2></CODE>, ... soient
vérifiés.
<li><STRONG><CODE><c1> -o <c2></CODE></STRONG>: Vrai si l'un de
<CODE><c1></CODE> ou <CODE><c2></CODE> est vrai, ou les deux. Notez que
<CODE>-o</CODE> a une <STRONG>priorité</STRONG> moins grande que <CODE>-a</CODE>, donc si
vous voulez, par exemple, que les fichiers correspondant aux critères
<CODE><c1></CODE> ou <CODE><c2></CODE> et qu'ils vérifient obligatoirement le
critère <CODE><c3></CODE>, vous devrez utiliser des parenthèses et écrire
<CODE>( <c1> -o <c2> ) -a <c3></CODE>. Vous
devez <STRONG>échapper</STRONG> (<STRONG>désactiver</STRONG>) les parenthèses, sans quoi
le <EM>shell</EM> les interprétera!
<li><STRONG><CODE>-not <c1></CODE></STRONG>: Inverse le test <CODE><c1></CODE>, donc
<CODE>-not <c1></CODE> est vrai si <CODE><c1></CODE> est faux.</ul>
<p>Enfin, vous pouvez spécifier une action pour chaque fichier trouvé. Les
plus fréquentes sont:
<ul><li><STRONG><CODE>-print</CODE></STRONG>: Ne fait qu'écrire le nom de chaque fichier sur la
sortie standard. C'est l'action par défaut si vous n'en spécifiez
aucune.
<li><STRONG><CODE>-ls</CODE></STRONG>: Affiche l'équivalent d'un <CODE>ls -ilds</CODE> sur
chaque fichier trouvé sur la sortie standard.
<li><STRONG><CODE>-exec <command></CODE></STRONG>: Exécute la commande
<CODE><command></CODE> sur chaque fichier trouvé. La ligne de commande
<CODE><command</CODE>> doit se terminer par un <CODE>;</CODE>, que vous devez
désactiver de telle sorte que le <EM>shell</EM> ne l'interprète pas; la
position du fichier est repérée par <CODE>{}</CODE>.
Regardez les exemples d'utilisation pour comprendre.
<li><STRONG><CODE>-ok <command></CODE></STRONG>: Même chose que <CODE>-exec</CODE> mais
demander confirmation pour chaque commande.</ul>
<p>Toujours là? Alors, maintenant entraînons-nous un peu, car c'est
toujours la meilleure façon de comprendre le monstre. Supposons que vous
vouliez trouver tous les répertoires dans <CODE>/usr/share</CODE>. Vous
taperez alors:
<p><CODE>find /usr/share -type d</CODE>
<p>Supposons que vous ayez un serveur <EM>HTTP</EM>, tous vos fichiers <EM>HTML</EM>
sont dans <CODE>/home/httpd/html</CODE>, qui est aussi votre répertoire
courant. Vous voulez trouver tous les fichiers qui n'ont pas été
modifiés depuis un mois. Comme vous avez des pages de différents
auteurs, certains fichiers ont une extension <CODE>html</CODE> et d'autres
l'extension <CODE>htm</CODE>. Vous voulez lier ces fichiers dans le
répertoire <CODE>/home/httpd/obsolete</CODE>. Vous taperez alors:
<p><CODE>find ( -name "*.htm" -o -name "*.html"
) -a -ctime -30 -exec ln {}
/home/httpd/obsolete ;</CODE><a name="bodynote33" href="026.html#note33">[33]</a>
<p>D'accord, cette exemple est un peu compliqué et requiert quelques
explications. Le critère est:
<p><CODE>( -name "*.htm" -o -name "*.html" ) -a
-ctime -30</CODE>
<p>qui fait ce que l'on veut: il recherche tous les fichiers dont le nom se
termine soit par <CODE>.htm</CODE>, soit par <CODE>.html</CODE>
(<CODE>( -name "*.htm" -o -name "*.html" )</CODE>),
<EM>et</EM> (<CODE>-a</CODE>) qui n'ont pas été modifiés dans les 30
derniers jours, ce qui représente en gros un mois (<CODE>-ctime
-30</CODE>). Notez les parenthèses: elles sont nécessaires ici, parce que
<CODE>-a</CODE> a une priorité plus grande. S'il n'y en avait pas, tous les
fichiers se terminant par <CODE>.htm</CODE> auraient été trouvés, plus
tous les fichiers se terminant par <CODE>.html</CODE> et qui n'ont pas été
modifiés depuis un mois, ce qui n'est pas ce que nous voulons. Notez
également que les parenthèses sont désactivées par rapport au
<EM>shell</EM>: si nous avions mis <CODE>( .. )</CODE> à la place de
<CODE>( .. )</CODE>, le <EM>shell</EM> les aurait
interprétées et essayé d'exécuter <CODE>-name "*.htm" -o -name
"*.html"</CODE> dans un sous-shell... Une autre solution aurait été de mettre
les parenthèses entre doubles apostrophes ou simples apostrophes, mais
une anti-barre oblique (<EM>backslash</EM>) est préférable ici dans la
mesure où nous ne devons isoler qu'un seul caractère.
<p>Et enfin, il y a la commande à exécuter pour chacun des fichiers:
<p><CODE>-exec ln {} /home/httpd/obsolete ;</CODE>
<p>Ici aussi, vous devez désactiver le <CODE>;</CODE> par rapport au
<EM>shell</EM>, car autrement le <EM>shell</EM> l'interprétera comme un
séparateur de commandes. Si vous ne le faites pas, <CODE>find</CODE> se
plaindra qu'il manque un argument à <CODE>-exec</CODE>.
<p>Un dernier exemple: vous avez un gros répertoire nommé
<CODE>/shared/images</CODE>, avec toutes sortes d'images dedans.
Régulièrement, vous utilisez la commande <CODE>touch</CODE> pour mettre à
jour les dates d'un fichier nommé <CODE>stamp</CODE> dans ce répertoire, de
façon à avoir une référence dans le temps. Vous voulez trouver tous les
fichiers <STRONG><EM>JPEG</EM></STRONG> dans ce répertoire qui sont plus récents que le
fichier <CODE>stamp</CODE>, et comme vous avez des images de diverses sources,
ces fichiers ont des extensions <CODE>jpg</CODE>, <CODE>jpeg</CODE>,
<CODE>JPG</CODE> ou <CODE>JPEG</CODE>. Vous voulez aussi éviter de rechercher
dans le répertoire <CODE>old</CODE>. Vous voulez vous faire envoyer la liste
de ces fichiers par courrier électronique, et votre nom d'utilisateur
est <CODE>jean</CODE>:
<p><font size="+1"><PRE>
find /shared/images -cnewer \
/shared/images/stamp \
-a -iregex ".*\.jpe?g" \
-a -not -regex ".*/old/.*" \
| mail jean -s "Nouvelles images"
</PRE></font>
<p>Et voilà! Bien sûr, cette commande n'est pas très utile si vous devez la
taper à chaque fois, et vous voudriez l'exécuter régulièrement. Vous
pouvez le faire:
<H1><a name="279"><CODE>crontab</CODE>: afficher ou éditer votre fichier <CODE>crontab</CODE></a></H1>
<p><CODE>crontab</CODE> est une commande qui vous permet d'exécuter des
commandes à des intervalles de temps réguliers, avec l'avantage
supplémentaire que vous n'avez pas à être connecté au système et que la
sortie de ces commandes vous est envoyée par courrier électronique. Vous
pouvez spécifier les intervalles en minutes, en heures, en jours et même
en mois. <CODE>crontab</CODE> agira différemment en fonction des options:
<ul><li><STRONG><CODE>-l</CODE></STRONG>: Affiche votre fichier <CODE>crontab</CODE> courant.
<li><STRONG><CODE>-e</CODE></STRONG>: Édite votre fichier <CODE>crontab</CODE>.
<li><STRONG><CODE>-r</CODE></STRONG>: Elimine votre fichier <CODE>crontab</CODE> courant.
<li><STRONG><CODE>-u <utilisateur></CODE></STRONG>: Applique l'une des options ci-dessus
à l'utilisateur <CODE><utilisateur></CODE>. Seul <CODE>root</CODE> est
autorisé à faire cela.</ul>
<p>Commençons par éditer un fichier <CODE>crontab</CODE>. Si vous tapez
<CODE>crontab -e</CODE>, vous vous trouverez en face de votre éditeur de
texte favori si vous avez initialisé la variable d'environnement
<CODE>'EDITOR'</CODE> ou <CODE>'VISUAL'</CODE>, autrement <STRONG>VI</STRONG> sera
utilisé. Une ligne dans un fichier <CODE>crontab</CODE> est composée de six
champs. Les cinq premiers sont les intervalles de temps en minutes,
heures, jours dans le mois, mois et jours dans la semaine. Le sixième
champ est la commande à exécuter. Les lignes commençant par un
<CODE>#</CODE> sont considérées comme des commentaires et seront ignorées
par <CODE>crond</CODE> (le programme en charge d'exécution des fichiers
<CODE>crontab</CODE>). Voici un exemple de fichier <CODE>crontab</CODE>:
<blockquote>Note: afin de pouvoir imprimer l'extrait qui suit dans une police de
caractères lisible, il nous a fallu ventiler les lignes les plus
longues. C'est pourquoi certaines portions du texte doivent en réalité
n'occuper qu'une seule ligne. Quand vous verrez le caractère
<CODE>''</CODE> terminer une ligne, cela signifiera que c'est en
réalité la même ligne qui continue. Cette convention fonctionne dans les
fichiers de type <CODE>Makefile</CODE> et dans le <EM>shell</EM>, ainsi que
dans d'autres cadres.</blockquote>
<p><font size="0"><PRE>
# Si vous ne voulez pas recevoir de courrier,
# « décommentez » la ligne suivante
#MAILTO=""
#
# Faire un rapport de toutes les nouvelles images
# à 14h tous les deux jours, en partant de
# l'exemple ci-dessus --- après ceci,
# « retoucher » le fichier "stamp". Le « % » est
# traité comme un retour chariot, cela vous
# permet de mettre plusieurs commandes sur la
# même ligne.
0 14 */2 * * find /shared/images \
-cnewer /shared/images/stamp \
-a -iregex ".*\.jpe?g" \
-a -not -regex \
".*/old/.*"%touch /shared/images/stamp
#
# Jouer une mélodie tous les and à Noël :)
0 0 25 12 * mpg123 $HOME/musiques/joyeux_noel.mp3
#
# Imprimer la liste des courses tous les mardis
# à 17 heures...
0 17 * * 2 lpr $HOME/liste-courses.txt
</PRE></font>
<p>Il y a plusieurs autres moyens de spécifier des intervalles que ceux
mentionnés dans l'exemple. Par exemple, vous pouvez spécifier un
ensemble de valeurs <STRONG>discrètes</STRONG> séparées par des virgules
(<CODE>1,14,23</CODE>) ou un intervalle (<CODE>1-15</CODE>), ou même combiner
les deux (<CODE>1-10,12-20</CODE>), optionnellement avec un pas
(<CODE>1-12,20-27/2</CODE>). Maintenant, il vous reste à trouver des
commandes utiles à y mettre <CODE>:)</CODE>
<H1><a name="280"><CODE>at</CODE>: programmer une commande, mais seulement une fois</a></H1>
<p>Vous pouvez aussi vouloir exécuter une commande à un jour donné, mais
pas régulièrement. Par exemple, vous voulez vous rappeler un
rendez-vous, aujourd'hui à 18 heures. Vous employez <STRONG>X</STRONG>, et vous
aimeriez être prévenu à 17h30, par exemple, que vous devez y aller.
<CODE>at</CODE> est ce qu'il vous faut ici:
<p><font size="0"><PRE>
$ at 5:30pm
# Vous vous retrouvez en face de l'invite de at
at> xmessage "C'est l'heure! rendez-vous à 18h"
# Tapez C-d pour sortir
at> <EOT>
$
</PRE></font>
<p>Vous pouvez spécifier la date de différentes manières:
<ul><li><STRONG><CODE>now +<interval></CODE></STRONG>: Signifie « maintenant », plus
un intervalle optionnel. Aucun intervalle signifie
« maintenant »). La syntaxe pour l'intervalle est
<p><CODE><n> (minutes|hours|days|weeks|months)</CODE>
<p>(« minutes, heures, jours, semaines, mois » --- en
anglais uniquement). Par exemple, vous pouvez spécifier <CODE>now + 1
hour</CODE> (dans une heure), <CODE>now + 3 days</CODE> (dans trois jours) et
ainsi de suite.
<li><STRONG><CODE><heure> <jour></CODE></STRONG>: Spécifier la date en
entier. Le paramètre <CODE><heure></CODE> est obligatoire. <CODE>at</CODE> est
très libéral dans ce qu'il accepte: vous pouvez par exemple taper
<CODE>0100</CODE>, <CODE>04:20</CODE>, <CODE>2am</CODE>, <CODE>0530pm</CODE>,
<CODE>1800</CODE>, ou une des trois valeurs spéciales: <CODE>noon</CODE>
(« midi »), <CODE>teatime</CODE> (« l'heure du
thé, 16h ») ou <CODE>midnight</CODE> (« minuit »). Le paramètre
<CODE><jour></CODE> est optionnel. Vous pouvez aussi le spécifier de
différentes manières: <CODE>12/20/2001</CODE> par exemple, notation
américaine pour le 20 décembre 2001, ou à l'européenne,
<CODE>20.12.2001</CODE>. Vous pouvez ne pas mettre l'année, mais dans ce
cas seule la notation européenne est acceptée: <CODE>20.12</CODE>. Vous
pouvez aussi spécifier le mois par son abréviation en anglais:
<CODE>Dec 20</CODE> ou <CODE>20 Dec</CODE> sont tous les deux valides.</ul>
<p><CODE>at</CODE> accepte aussi différentes options:
<ul><li><STRONG><CODE>-l</CODE></STRONG>: Affiche la liste des commandes déjà programmées; le
premier champ est le numéro de la commande. C'est équivalent à la
commande <CODE>atq</CODE>.
<li><STRONG><CODE>-d <n></CODE></STRONG>: Enlever la commande numéro <CODE><n></CODE> de la
liste. Vous pouvez obtenir les numéros avec <CODE>atq</CODE>. C'est
équivalent à la commande <CODE>atrm <n></CODE>.</ul>
<p>Comme d'habitude, voyez la page de manuel de <CODE>at(1)</CODE> pour
plus d'options.
<H1><a name="281"><CODE>tar</CODE>: <EM>Tape ARchiver</EM> (« archiveur sur bandes »)</a></H1>
<p>Bien que nous ayons déjà vu une utilisation de <CODE>tar</CODE> dans le
chapitre 18.0, nous n'avons pas expliqué son
fonctionnement. C'est ce à quoi va s'employer cette section. De même que
<CODE>find</CODE>, <CODE>tar</CODE> est un utilitaire <STRONG>Unix</STRONG> de longue
date, et sa syntaxe est un peu spéciale:
<p><font size="+2"><PRE>
tar [options] [fichiers...]
</PRE></font>
<p>Voici maintenant une liste d'options. Notez que toutes celles-ci ont une
option longue équivalente, mais vous devrez vous référer à la page de
manuel pour cela car elles ne sont pas listées ici. Et bien sûr, toutes
les options ne sont pas listées non plus <CODE>:)</CODE>
<blockquote>Note: le tiret initial (<CODE>-</CODE>) des options courtes est
maintenant désuet pour la commande <CODE>tar</CODE>, sauf après une option
longue.</blockquote>
<ul><li><STRONG><CODE>c</CODE></STRONG>: Cette option est utilisée dans le but de créer de
nouvelles archives.
<li><STRONG><CODE>x</CODE></STRONG>: Cette option est utilisée pour extraire des fichiers
depuis une archive existante.
<li><STRONG><CODE>t</CODE></STRONG>: Affiche la liste des fichiers d'une archive
existante.
<li><STRONG><CODE>v</CODE></STRONG>: Cette option affichera simplement la liste des
fichiers au fur et à mesure qu'ils sont ajoutés à une archive ou
extraits d'une archive, ou, en conjonction avec l'option <CODE>t</CODE>
ci-dessus, produira un affichage long des fichiers au lieu d'un affichage
court.
<li><STRONG><CODE>f <fichier></CODE></STRONG>: Créer une archive de nom <CODE><fichier></CODE>,
extraire depuis l'archive <CODE><fichier></CODE> ou faire un liste des
fichiers de l'archive <CODE><fichier></CODE>. Si cette option n'est pas
fournie, le fichier par défaut sera <CODE>/dev/rmt0</CODE>, qui est
généralement le fichier spécial associé à un <STRONG><EM>streamer</EM></STRONG>.
Si le paramètre <CODE>fichier</CODE> est un tiret (<CODE>-</CODE>), l'entrée
ou la sortie (selon que vous extrayez depuis une archive ou en créez
une), sera associée à l'entrée standard ou la sortie standard.
<li><STRONG><CODE>z</CODE></STRONG>: Dit à <CODE>tar</CODE> que l'archive à créer devra être
compressée avec <CODE>gzip</CODE>, ou que l'archive depuis laquelle on
extrait est compressée avec <CODE>gzip</CODE>.
<li><STRONG><CODE>y</CODE></STRONG>: Même chose que pour <CODE>z</CODE>, mais le programme
utilisé pour la compression est <CODE>bzip2</CODE>.
<li><STRONG><CODE>p</CODE></STRONG>: Lors de l'extraction des fichiers d'une archive,
préserver tous les attributs de fichiers, y compris la propriété, la
dernière date d'accès et ainsi de suite. Très utile pour les sauvegardes
de systèmes de fichiers.
<li><STRONG><CODE>r</CODE></STRONG>: Ajouter la liste des fichiers donnée sur la liste de
commande à une archive existante. Notez que l'archive à laquelle vous
voulez ajouter des fichiers ne doit <EM>pas</EM> être compressée!
<li><STRONG><CODE>A</CODE></STRONG>: Fusionner les archives données sur la ligne de
commande à celle mentionnée avec l'option <CODE>f</CODE>. De même que pour
l'option <CODE>r</CODE>, les archives ne doivent pas être compressées pour
que cela fonctionne.</ul>
<p>Il y a beaucoup, beaucoup d'autres options, vous vous référerez à la
page de manuel de <CODE>tar(1)</CODE> pour en obtenir une liste
complète. Voyez, par exemple, l'option <CODE>d</CODE>. Maintenant, un peu
de pratique. Supposons que vous vouliez créer une archive de toutes les
images dans le répertoire <CODE>/shared/images</CODE>, compressée avec
<CODE>bzip2</CODE>, de nom <CODE>images.tar.bz2</CODE> et située dans votre
répertoire personnel. Vous taperez alors:
<p><font size="+1"><PRE>
#
# Note: vous devez être dans le répertoire
# contenant les fichiers de l'archive!
#
$ cd /shared
$ tar cyf ~/images.tar.bz2 images/
</PRE></font>
<p>Comme vous pouvez le voir, nous avons utilisé trois options ici:
<CODE>c</CODE> a dit à <CODE>tar</CODE> de créer une archive, <CODE>y</CODE> lui a
dit que nous la voulions compressée avec <CODE>bzip2</CODE>, et <CODE>f
/images.tar.bz2</CODE> lui a dit que l'archive devait être créée dans notre
répertoire personnel, avec le nom <CODE>images.tar.bz2</CODE>. Maintenant, on
peut vouloir vérifier si l'archive est valide. Nous pouvons simplement
le vérifier en affichant la liste de ses fichiers:
<p><font size="+2"><PRE>
#
# Retour à notre répertoire personnel
#
$ cd
$ tar tyvf images.tar.bz2
</PRE></font>
<p>Ici, nous avons dit à <CODE>tar</CODE> d'afficher la liste (<CODE>t</CODE>) des
fichiers de l'archive <CODE>images.tar.bz2</CODE> (<CODE>f images.tar.bz2</CODE>),
en ayant averti que cette archive était compressée avec <CODE>bzip2</CODE>
(<CODE>y</CODE>), et que nous voulions un format d'affichage long
(<CODE>v</CODE>). Maintenant, supposons que vous ayez effacé le répertoire
des images. Heureusement, votre archive est intacte, et maintenant vous
voulez l'extraire à sa place originelle, dans <CODE>/shared</CODE>. Mais comme
vous ne voulez pas casser votre commande <CODE>find</CODE> pour trouver les
nouvelles images, vous devez préserver les attributs de tous les
fichiers:
<p><font size="0"><PRE>
#
# Rendez-vous dans le répertoire où vous voulez
# extraire
#
$ cd /shared
$ tar yxpf ~/images.tar.bz2
</PRE></font>
<p>Et voilà le travail!
<p>Maintenant, supposons que vous vouliez seulement extraire le répertoire
<CODE>images/cars</CODE> de l'archive. Vous pouvez alors taper ceci:
<p><font size="+2"><PRE>
$ tar yxf ~/images.tar.bz2 images/cars
</PRE></font>
<p>Au cas où cela vous inquiéterait, n'en faites rien: non; si vous essayez
d'archiver des fichiers spéciaux, <CODE>tar</CODE> les prendra tels qu'ils
sont, des fichiers spéciaux, et n'ira pas chercher leur contenu. Donc
oui, vous pouvez mettre sans risque <CODE>/dev/mem</CODE> dans une archive
<CODE>:)</CODE> Oh, et il gère aussi les liens correctement, donc ne vous en
inquiétez pas non plus. Pour les liens symboliques, regardez également
l'option <CODE>h</CODE> dans la page de manuel.
<H1><a name="282"><CODE>bzip2</CODE> et <CODE>gzip</CODE>: programmes de compression de données</a></H1>
<p>Vous avez vu que nous avons déjà parlé de ces deux programmes quand nous
avons évoqué <CODE>tar</CODE>. Contrairement à <STRONG>WinZip</STRONG> sous
<STRONG>Windows</STRONG>, l'archivage et la compression sont faits en utilisant
deux programmes séparés --- <CODE>tar</CODE> pour l'archivage, et
les deux programmes que nous allons maintenant introduire pour la
compression, <CODE>bzip2</CODE> et <CODE>gzip</CODE>.
<p>En premier lieu, <CODE>bzip2</CODE> a été écrit en tant que remplacement
pour <CODE>gzip</CODE>. Ses possibilités de compression sont en général
meilleures, mais d'un autre côté il consomme plus de mémoire. La raison
pour laquelle <CODE>gzip</CODE> est encore là est qu'il est encore beaucoup
plus répandu que <CODE>bzip2</CODE>. Peut-être qu'un jour <CODE>bzip2</CODE>
remplacera complètement <CODE>gzip</CODE>, mais peut-être pas.
<p>Les deux commandes ont une syntaxe similaire:
<p><font size="+2"><PRE>
gzip [options] [fichier(s)]
</PRE></font>
<p>Si aucun nom de fichier n'est donné, <CODE>gzip</CODE> comme
<CODE>bzip2</CODE> attendra des données sur l'entrée standard et enverra le
résultat sur la sortie standard. Donc les deux programmes sont
utilisables avec des tubes. Les deux commandes ont aussi un ensemble
d'options similaires:
<ul><li><STRONG><CODE>-1</CODE>, ..., <CODE>-9</CODE></STRONG>: Régler la capacité de compression.
Plus le nombre est haut, plus la compression sera élevée, mais mieux
signifie aussi plus lent: on n'a rien sans rien.
<li><STRONG><CODE>-d</CODE></STRONG>: Décompresser un ou des fichier(s). C'est équivalent à
utiliser <CODE>gunzip</CODE> ou <CODE>bunzip2</CODE>.
<li><STRONG><CODE>-c</CODE></STRONG>: Envoyer le résultat de la compression/décompression
des fichiers donnés en paramètre sur la sortie standard.</ul>
<p>Attention! Par défaut, <CODE>gzip</CODE> et <CODE>bzip2</CODE> effaceront le
ou les fichier(s) qu'ils ont compressés (ou décompressés) si vous
n'utilisez pas l'option <CODE>-c</CODE>. Vous pouvez l'éviter avec
<CODE>bzip2</CODE> en utilisant l'option <CODE>-k</CODE>, mais <CODE>gzip</CODE>
n'a aucune option de la sorte!
<p>Quelques exemples, maintenant. Supposons que vous vouliez compresser
tous les fichiers se terminant par <CODE>.txt</CODE> dans le répertoire
courant avec <CODE>bzip2</CODE>, vous utiliserez alors:
<p><font size="+2"><PRE>
$ bzip2 -9 *.txt
</PRE></font>
<p>Supposons que vous vouliez partager votre archive d'images avec
quelqu'un, mais il ne dispose pas de <CODE>bzip2</CODE>, uniquement de
<CODE>gzip</CODE>. Vous n'avez pas besoin de décompresser l'archive et de
la recompresser, vous pouvez juste la décompresser sur la sortie
standard, utiliser un tube, compresser depuis l'entrée standard et
rediriger le résultat vers la nouvelle archive:
<p><font size="0"><PRE>
bzip2 -dc images.tar.bz2 | gzip -9 >images.tar.gz
</PRE></font>
<p>Et voilà le travail. Vous pourriez avoir tapé <CODE>bzcat</CODE> au lieu de
<CODE>bzip2 -dc</CODE>. Il existe un équivalent pour <CODE>gzip</CODE> mais
son nom est <CODE>zcat</CODE>, et non pas <CODE>gzcat</CODE>. Vous disposez
aussi de <CODE>bzless</CODE> (resp. <CODE>zless</CODE>) si vous voulez
directement visualiser des fichiers compressés sans avoir à les
décompresser avant. Comme exercice, essayez de trouver la commande que
vous auriez à taper pour voir des fichiers sans les décompresser, et
sans utiliser <CODE>bzless</CODE> or <CODE>zless :)</CODE>
<H1><a name="283">Beaucoup, beaucoup plus...</a></H1>
<p>Il existe tellement de commandes que si quelqu'un faisait un livre sur
la totalité, vous auriez une encyclopédie en face de vous. Ce chapitre
n'a même pas traité un dixième de pourcent, mais vous pouvez déjà faire
beaucoup avec ce qui a été dit ici. Quelques pages de manuel que vous
pourrez regarder si vous le souhaitez: <CODE>sort(1)</CODE>,
<CODE>sed(1)</CODE>, <CODE>zip(1)</CODE> (oui, c'est bien ce que vous
pensez, vous pouvez extraire/fabriquer des archives <EM>ZIP</EM> sous
<STRONG>Linux</STRONG>), <CODE>convert(1)</CODE>, et ainsi de suite.
L'expérimentation reste le meilleur moyen de se familiariser avec ces
outils, et vous leur trouverez probablement beaucoup d'utilisations
auquelles vous n'auriez pas pensé au premier coup d'oeil. Amusez-vous
bien <CODE>:)</CODE>
<hr><a href="024.html">Suivant : Installation en mode texte</a><br><a href="022.html">Précédent : Installation d'un logiciel libre</a><br><a href="../">Retour</a><br><hr>Copyright © 2000 <a href="http://www.mandrakesoft.com/">MandrakeSoft</a></BODY></HTML>
See more files for this project here