tuteurs.ens.fr/unix/fichiers.tml
meles 26abda08cc Bap: Grosses modifications en série sur tout le site :
1) insertion de balises <date value="$Date$"/>
2) remplacement des espaces insécables par des &nbsp;
3) insertion d'espaces insécables autour des guillemets français
2007-07-13 08:40:16 +00:00

835 lines
25 KiB
XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
"tuteurs://DTD/tml.dtd">
<html>
<head>
<title>Fichiers</title>
</head>
<body>
<h1>Manipuler les fichiers</h1>
<h2><a name="comment">Créer un fichier</a></h2>
<h3>Généralités</h3>
<p>
Un <dfn>fichier</dfn> est un <em>paquet d'informations</em>&nbsp;: ce peut
être aussi bien du texte, que de la musique ou une image. Chaque objet
que vous manipulez en informatique (une page Web, la musique de
Casimir, vos photos de vacances, un logiciel, etc.) correspond à un
fichier.
</p>
<p>
Quand vous écrivez un texte avec OpenOffice.org et que vous le
sauvegardez sous le nom «&nbsp;Rapport&nbsp;de&nbsp;maîtrise&nbsp;», vous créez un fichier
à ce nom, écrit sur le disque dur. Chaque fois que vous écrivez
quelque chose sur le disque, vous créez un ou plusieurs fichiers.
</p>
<h3>Créer un fichier texte</h3>
<p>
Une des opérations les plus courantes consiste à écrire du texte. Pour
cela, voir le cours sur les <a href="editeurs/">éditeurs de
texte</a>. Quand on vous demande de créer un fichier, généralement il
faut utiliser un éditeur de texte. Ainsi, pour créer le fichier
<code>index.html</code> (accueil d'une page Web), utilisez l'éditeur
<a href="editeurs/nedit.html">NEdit</a> et tapez&nbsp;:
</p>
<pre>
<span class="prompt">brick ~/www/ $</span> nedit index.html
</pre>
<p>
Si vous êtes pressé, la commande <code>cat</code> peut faire office
d'éditeur minimaliste. Tapez la commande suivante, et quelques mots&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> cat &gt; notes
Faire les courses
Passer à la bibliothèque
</pre>
<p class="continue">
Et finissez par <code>Ctrl+D</code>. Le fichier <code>notes</code>
contient les quelques lignes que vous avez saisies.
</p>
<h3>Créer un fichier vide</h3>
<p>
On peut aussi créer un fichier à l'aide de la commande
<code>touch</code>. <code>touch toto</code> crée un fichier vide
appelé «&nbsp;toto&nbsp;». En fait, cette commande sert essentiellement à
modifier la date de dernière modification d'un fichier.
</p>
<div class="ens">
<strong>Application&nbsp;:</strong> vous avez une page Web sur le serveur
des élèves et que vous ne voulez pas qu'à chaque virgule modifiée, on
voie votre page dans la liste des <a
href="http://www.eleves.ens.fr/home/index-time.html.fr">pages
récemment modifiées</a>. Créez alors dans votre répertoire
<code>www</code> un fichier vide appelé <code>.last_modified</code>&nbsp;:
</div>
<pre>
<span class="prompt">brick ~/www/ $</span> touch .last_modified
</pre>
<p class="continue">
Votre page, désormais, ne figurera dans la liste des récentes
modifications qu'après un nouveau <code>touch</code> du fichier
<code>.last_modified</code>.
</p>
<h2><a name="nom">Nommer ses fichiers</a></h2>
<p>
Les noms de fichiers s'écrivent avec des caractères
<dfn>alphanumériques</dfn> (lettres et chiffres). On peut utiliser
des majuscules et des minuscules, mais elles ne sont pas
interchangeables&nbsp;: <code>document</code> et <code>Document</code> sont
deux fichiers distincts.
</p>
<p>
Il est préférable d'éviter les espaces dans les noms de fichiers. On
peut les remplacer par un <i lang="en">underscore</i> (<code>_</code>)
ou un tiret (<code>-</code>).&nbsp;:
</p>
<pre>
banque-de-france.tex
banque_centrale.dvi
</pre>
<p class="continue">
Il vaut mieux éviter les caractères accentués, et proscrire le reste
(ponctuations diverses, signes bizarres). Il faut aussi éviter de
faire commencer un fichier par un <code>.</code> (par exemple
<code>.document</code>). Il est également sage d'éviter de donner des
noms trop longs (même si en théorie vous avez droit à 255 caractères).
</p>
<p>
Certains fichiers ont des suffixes conventionnels qui les identifient
auprès des utilisateurs et de certains programmes (liste non
exhaustive de suffixes et d'outils)&nbsp;:
</p>
<table class="tableau">
<tr>
<th>Suffixe</th>
<th>Nature</th>
<th>Logiciel à utiliser</th>
</tr>
<tr>
<td><code>.tex</code></td>
<td>Fichier source pour LaTeX</td>
<td><a href="editeurs/">Éditeur de texte</a></td>
</tr>
<tr>
<td><code>.dvi</code></td>
<td>Résultat de la compilation LaTeX</td>
<td><a href="&url.tuteurs;logiciels/latex/xdvi.html"><code>xdvi</code></a></td>
</tr>
<tr>
<td><code>.aux</code>, <code>.log</code>, <code>.toc</code>, <code>.mp</code>, etc.</td>
<td>Fichiers produits automatiquement par la compilation LaTeX</td>
<td>À regarder avec <a href="#less"><code>less</code></a></td>
</tr>
<tr>
<td><code>.ps</code>, <code>.eps</code></td>
<td>Fichiers PostScript</td>
<td><a href="http://www.spi.ens.fr/install/ghostview.html"><code>gv</code></a> (Ghostview)</td>
</tr>
<tr>
<td><code>.txt</code></td>
<td>Fichier texte</td>
<td><a href="editeurs/">Éditeur</a> si vous voulez le
modifier, <a href="#less"><code>less</code></a> si vous voulez juste
le lire.</td>
</tr>
<tr>
<td><code>.html</code>, <code>.shtml</code>, <code>.htm</code></td>
<td>Pages Web</td>
<td><a href="&url.tuteurs;internet/web/lynx.html">Navigateur</a>
(<code>netscape</code>, <code>links</code>...)</td>
</tr>
<tr>
<td><code>.au</code>, <code>.ogg</code>, <code>.mp2</code>, <code>.mp3</code></td>
<td>Son</td>
<td>Les fichiers <code>.au</code> s'écoutent avec <code>play</code>, les
<code>.ogg</code> avec <code>ogg123</code>, les <code>.mp2</code> avec
<code>maplay</code> , les <code>.mp3</code> avec <code>mpg123</code>. </td>
</tr>
<tr>
<td><code>.tiff</code>, <code>.png</code>, <code>.jpg</code>,
<code>.gif</code>, <code>.ppm</code>...</td>
<td>Images</td>
<td><a href="http://www.spi.ens.fr/install/xv.html"><code>xv</code></a>
pour les regarder&nbsp;; <code>gimp</code> pour les modifier</td>
</tr>
<tr>
<td><code>.mov</code>, <code>.avi</code></td>
<td>Séquences animées</td>
<td><a href="http://www.spi.ens.fr/install/xanim.html"><code>xanim</code></a></td>
</tr>
<tr>
<td><code>.pdf</code></td>
<td>Portable Document Format</td>
<td><a href="http://www.spi.ens.fr/install/acrobat.html"><code>acroread</code></a> (Acrobat Reader)</td>
</tr>
<tr>
<td><code>.gz</code>, <code>.tgz</code>, <code>.tar</code>,
<code>.tar.gz</code>, <code>.Z</code>, <code>.tar.Z</code>,
<code>.zip</code>, <code>.zoo</code>, <code>.lha</code>, <code>.lzx</code>,
<code>.z</code>, <code>.uu</code>, <code>.shar</code></td>
<td>Divers formats d'archives plus ou moins compressés</td>
<td>Consultez la page sur la <a href="archives.html">compression</a></td>
</tr>
</table>
<p>
De façon générale, tous les fichiers LaTeX ont un suffixe <code>.tex</code>,
et toutes les pages Web un suffixe <code>.html</code> (par exemple ce document
s'appelle <code>fichiers.html</code>).
</p>
<h2><a name="less">Lire un fichier</a></h2>
<h3><a name="cat">Lire un fichier avec <code>cat</code></a></h3>
<p>
Pour pouvoir consulter un fichier (sans l'éditer), le plus simple est
la commande <code>cat</code>&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> cat <kbd>fichier</kbd>
</pre>
<p class="continue">
Le problème est que <code>cat</code> affiche l'intégralité du fichier
que vous lui demandez. Si le fichier est plus long que la taille de
votre écran (ce qui arrive quand même souvent), vous verrez défiler
très vite à l'écran le contenu de votre fichier, sans pouvoir
l'arrêter ou le ralentir. Pas très pratique...
</p>
<h3>Les <i lang="en">pagers</i> <code>more</code> et
<code>less</code></h3>
<p>
Mieux vaut alors utiliser ce qu'en anglais on appelle un <i
lang="en">pager</i> (parfois traduit par «&nbsp;visionneuse&nbsp;» en
français). Le nom «&nbsp;pager&nbsp;» vient du fait qu'il affiche un fichier
page par page et non tout d'un coup comme le fait
<code>cat</code>. Sur les Unix un minimum récents, la commande qui
fait cela est <code>less</code>. Pour lire le fichier
<code>toto.txt</code>, tapez simplement&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> less toto.txt
</pre>
<p class="continue">
Voici un tableau des commandes utiles de <code>less</code>&nbsp;:
</p>
<table class="tableau">
<tr>
<td><code>h</code></td>
<td>afficher une aide.</td>
</tr>
<tr>
<td><code>SPC</code></td><td>faire défiler le texte page par page</td>
</tr>
<tr>
<td><code>d, ^D</code> (<em>down</em>)</td><td>descendre d'un demi-écran</td>
</tr>
<tr>
<td><code>f, ^F</code> (<em>forward</em>)</td><td>descendre d'un écran</td>
</tr>
<tr>
<td><code>p, ^P</code> (<em>previous</em>)</td><td>remonter d'un demi-écran</td>
</tr>
<tr>
<td><code>b, ^B</code> (<em>back</em>)</td><td>remonter d'un écran</td>
</tr>
<tr>
<td><code>j</code></td><td>descendre d'une ligne</td>
</tr>
<tr>
<td><code>k</code></td><td>remonter d'une ligne</td>
</tr>
<tr>
<td><code>G</code></td><td>aller à la fin du texte</td>
</tr>
<tr>
<td><code><em>nombre</em>G</code></td>
<td>aller à la ligne de numéro <em>nombre</em> (par exemple, <code>1G</code>
place à la première ligne du fichier).</td>
</tr>
<tr>
<td><code>/mot</code></td>
<td>chercher le «&nbsp;mot&nbsp;» dans le texte. Il sera signalé en inverse dans
tout le texte. Pour aller à la prochaine occurence du mot, taper
<code>n</code>, pour aller à la précédente occurence, taper
<code>N</code>.</td>
</tr>
<tr>
<td><code>q</code> </td><td>quitter</td>
</tr>
</table>
<p>
<strong><code>more</code></strong> (en savoir <em> davantage</em> sur
un fichier) est une commande standard sur tous les systèmes Unix
(alors que <code>less</code> n'est pas installé
partout). <code>less</code> (installé à l'École) est cependant plus
performant&nbsp;: les mots recherchés apparaissent sur fond noir au lieu
d'être juste placés en haut de l'écran, le défilement du texte est
plus précis. Si vous n'avez que <code>more</code> à disposition, vous
pouvez utiliser les commandes suivantes&nbsp;:
</p>
<table class="tableau">
<tr>
<td><code>h</code></td><td>afficher une aide</td>
</tr>
<tr>
<td><code>d</code> (<em> down</em>)</td><td>descendre d'un demi-écran</td>
</tr>
<tr>
<td><code>f</code> (<em> forward</em>)</td><td>descendre d'un écran</td>
</tr>
<tr>
<td><code>b</code> (<em> back</em>)</td><td>remonter d'un demi-écran</td>
</tr>
<tr>
<td><code>/mot</code></td>
<td>chercher le «&nbsp;mot&nbsp;» dans le texte (le résultat est beaucoup moins clair
qu'avec <code>less</code> ).</td>
</tr>
<tr>
<td><code>q</code></td><td>quitter</td>
</tr>
</table>
<h3><a name="head">Afficher le début d'un fichier</a></h3>
<p>
On utilise la commande <code>head</code> pour afficher le début d'un
fichier&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> head point_de_lendemain.txt
J'aimais éperdumment la comtesse de ...&nbsp;; j'avais vingt ans, et
j'étais ingénu&nbsp;; elle me trompa, je me fâchai, elle me
quitta. J'étais ingénu, je la regrettai&nbsp;; j'avais vingt ans, elle
me pardonna&nbsp;: et comme j'avais vingt ans, que j'étais ingénu,
toujours trompé, mais plus quitté, je me croyais l'amant le mieux
(...)
</pre>
<p class="continue">
Par défaut, <code>head</code> affiche les 10 premières lignes. Pour
lui spécifier un nombre de lignes précis, utilisez l'option
<code>-n</code>, <var>n</var> étant le nombre de votre choix&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> head -2 point_de_lendemain.txt
J'aimais éperdumment la comtesse de ...&nbsp;; j'avais vingt ans, et
j'étais ingénu&nbsp;; elle me trompa, je me fâchai, elle me
<span class="prompt">brick ~ $</span>
</pre>
<p>
«&nbsp;Mais à quoi est-ce que ça peut bien servir&nbsp;?&nbsp;», vous direz-vous. Là,
comme ça, c'est vrai que l'utilité est limitée. Mais en combinaison
avec d'autres commandes, c'est très utile. Un exemple tiré de notre
page sur la <a href="place_disque.html">place disque</a>&nbsp;:
</p>
<pre>
<span class="prompt">clipper ~ $</span> du -ak | sort -nr | head -10
98280 .
22007 ./www
1658 ./Mail
9637 ./www/hist
5005 ./www/hist/maitrise
4910 ./histoire
3941 ./Mail/archives
3757 ./www/philo/
3274 ./www/philo/cours
3112 ./www/philo/cours/hegel
2841 ./prive
</pre>
<p class="continue">
Nous avons ici les 10 fichiers ou répertoires les plus gros de notre
compte. Toutes les explications sur cette suite de commandes se
trouvent dans nitre page sur la <a href="place_disque.html">place
disque</a>.
</p>
<h3>Afficher la fin d'un fichier</h3>
<p>
Cette fois, c'est la commande <code>tail</code> qu'on utilise, avec
les mêmes options que <code>head</code>&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> tail -3 point_de_lendemain.txt
sensible. Adieu, encore une fois. Vous êtes charmant... Ne me
brouillez pas avec la Comtesse&nbsp;&#187;. Elle me serra la main, et
me quitta.
</pre>
<p>
Cette commande devient très intéressante avec l'option
<code>-f</code>&nbsp;: celle-ci dit à <code>tail</code> de ne pas s'arrêter
à la fin du fichier, mais de continuer à afficher les nouvelles
informations qui seraient ajoutées au fichier. Une applications
typique est la surveillance des fichiers de logs (journaux où le
système, ou certains programmes, consignent des informations sur leur
travail).
</p>
<h4>Application</h4>
<p>
Vous êtes en train de rédiger votre <a
href="&url.tuteurs;internet/web/htaccess.html"><code>.htaccess</code></a>
(fichier de configuration du serveur Web, Apache) et vous voulez
regarder en temps réel les messages d'erreur du serveur.
</p>
<div class="ens">
Ces messages d'erreur, à l'ENS, sont dans
<code>~webmaster/logs/access_log.curr</code>, il faut donc surveiller
les messages d'erreur sui arrivent au fur et à mesure que vous faites
vos essais. Tapez dans l'une de vos fenêtres la commande suivante&nbsp;:
</div>
<pre>
<span class="prompt">clipper ~ $</span> tail -f ~webmaster/logs/access_log.curr | grep monlogin
</pre>
<p class="continue">
et vous verrez s'afficher, au fur et à mesure et en temps réel, toutes
les erreurs qui contiennent votre login, donc vos pages. Pour arrêter
<code>tail</code> quand vous en avez assez, tapez <code>Ctrl+C</code>.
</p>
<h2>Manipuler les fichiers</h2>
<h3>Copier un fichier</h3>
<p>
<dfn>Copier un fichier</dfn>, c'est prendre un fichier déjà existant
et en créer une copie rigoureusement identique sous un nom
différent. On utilise pour cela la commande <code>cp</code> (comme <i
lang="en">cp</i>). Pour copier <code>toto.txt</code> en
<code>toto2.txt</code>&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> cp toto.txt toto2.txt
</pre>
<p class="continue">
Notez qu'on ne peut pas se servir de <code>cp</code> pour copier un
répertoire. Ainsi, si vous essayez de copier votre répertoire
<code>www</code>, <code>cp</code> va se plaindre&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> cp www www2
cp: www: is a directory
</pre>
<div class="encadre">
<strong>S'exercer&nbsp;:</strong> pour vérifier que vous avez bien compris,
faites les <a href="exercices/cp_mv.html">exercices sur <code>cp</code></a>.
</div>
<h3><a name="mv">Renommer un fichier</a> ou un répertoire</h3>
<p>
<dfn>Renommer un fichier</dfn>, c'est lui donner un nouveau nom, sans
rien modifier d'autre. On utilise pour cela la commande
<code>mv</code> (comme <i lang="en">move</i>). Pour renommer
<code>dissert.tex</code> en <code>dissertation.tex</code>&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> mv dissert.tex dissertation.tex
</pre>
<p>
La même commande sert également, avec la même syntaxe, pour les
répertoires. Ainsi, si vous voulez renommer votre répertoire
<code>boulot</code> en répertoire <code>magistere</code>&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> mv boulot magistere
</pre>
<h3>Déplacer un fichier</h3>
<p>
C'est toujours la commande <code>mv</code> que l'on utilise. La
syntaxe est la suivante&nbsp;: <code>mv fichier
nouvel_endroit</code>. Ainsi, vous voulez déplacez le fichier
<code>cv.html</code>, situé à la racine de votre compte, dans votre
répertoire <code>www</code>&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> mv cv.html www
</pre>
<p class="continue">
Autre exemple&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> mv fichier ..
</pre>
<p class="continue">
déplace un fichier dans le répertoire père &mdash;&nbsp;si vous ne
comprenez pas ce terme, reportez-vous au tableau qui illustre la
commande <a href="repertoires.html#cd"><code>cd</code></a> dans la
page sur les <a href="repertoires.html">répertoires</a>.
</p>
<div class="encadre">
<strong>S'exercer :</strong> pour vérifier que vous avez bien compris,
faites les <a href="exercices/cp_mv.html">exercices sur
<code>mv</code></a>. </div>
<h3><a name="rm">Effacer un fichier</a></h3>
<p>
Sous Unix, <dfn>effacer un fichier</dfn>, c'est le détruire de façon
<strong>irréversible</strong>. Pas de concept de poubelle dans
laquelle on peut fouiller, comme sous Windows ou Mac&nbsp;OS. C'est la
commande <code>rm</code> (comme <i lang="en">remove</i>) qui efface un
fichier&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> rm fichier
</pre>
<div class="ens">
Dans les configs conscrits, depuis un certain temps, <code>rm</code>
vous demande de confirmer l'ordre d'effacement&nbsp;:
</div>
<pre>
<span class="prompt">brick ~ $</span> rm fichier
rm: remove fichier (yes/no)?
</pre>
<div class="ens">
En effet, le <code>rm</code> que vous utilisez fait en fait <code>rm
-i</code>, comme vous le montrera la commande <code>which</code>&nbsp;:
</div>
<pre>
<span class="prompt">brick ~ $</span> which rm
rm: aliased to nocorrect rm -i
</pre>
<p class="continue">
Cette précaution évite le fameux doigt qui glisse et autres erreurs
qui effacent par mégarde des fichiers importants. Mais cette
précaution n'existe pas pour toutes les configurations&nbsp;: observez donc
la plus grande prudence en utilisant <code>rm</code>.
</p>
<div class="encadre">
<strong>Remarque</strong>&nbsp;: à l'ENS, les partitions utilisateurs sont
sauvegardées toutes les nuits par le SPI. Si donc vous effacez un
fichier accidentellement et qu'il avait plus d'un ou deux jours, vous
pouvez envoyer un courrier électronique au <a
href="http://www.spi.ens.fr/">SPI</a> pour demander qu'on vous le
récupère.
</div>
<p>
Il existe aussi <a href="&url.tuteurs;logiciels/rcs/">RCS</a>, qui
enregistre des copies de sauvegarde de vos fichiers, et permet de gérer
les différentes versions de votre travail.
</p>
<h4>Effacer plusieurs fichiers en même temps</h4>
<p>
Nettoyage de printemps sur votre compte, vous voulez supprimer
plusieurs fichiers en même temps. Il suffit tout simplement de les
indiquer à la suite à <code>rm</code>&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> rm article_vn.tex article_leveque.tex article_leveque2.tex
</pre>
<h4>Effacer un répertoire et son contenu</h4>
<p>
La commande pour effacer un répertoire est <code>rmdir</code>
(cf. notre <a href="repertoires.html">page sur les répertoires</a>),
mais elle ne marche que si le répertoire est vide. La commande
<code>rm</code> ne peut pas effacer directement un répertoire&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> rm www
rm: www is a directory
</pre>
<p class="continue">
Pour effacer un répertoire <em>et son contenu</em>, utilisez l'option
<code>-R</code> (comme <i lang="en">recursive</i> de
<code>rm</code>. Pour effacer votre répertoire <code>toto/</code> et
les fichiers qu'il contient, tapez&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> rm -R toto
</pre>
<div class="ens">
À l'ENS, parce que <code>rm</code> est en fait <code>rm -i</code>,
<code>rm</code> vous demandera confirmation pour chacun des fichiers
contenus dans le répertoire <code>toto/</code>&nbsp;:
</div>
<pre>
<span class="prompt">brick ~ $</span> rm -R toto
rm: examine files in directory toto (yes/no)? yes
rm: remove toto/titi (yes/no)? y
rm: remove toto/tata (yes/no)?
(...)
</pre>
<p class="continue">
Si vous trouvez fastidieux de devoir répondre oui à chaque fois, vous
pouvez utiliser en plus l'option <code>-f</code> (comme <i
lang="en">force</i>) de <code>rm</code>. Cette option supplante
l'option <code>-i</code> et <strong>efface irrémédiablement sans
demander confirmation</strong>. Faites donc très attention avec.
</p>
<h4>Effacer des fichiers au nom exotique</h4>
<p>
Comment effacer des fichiers qui comment par des caractères bizarres,
ou qui comportent des espaces dans leur nom&nbsp;? La commande
<code>rm</code> semble devenir subitement inefficace&nbsp;! Essayons
d'abord avec un fichier avec des espaces :
</p>
<pre>
<span class="prompt">brick ~ $</span> rm siècle de périclès.doc
rm: siècle: No such file or directory
rm: de: No such file or directory
rm: périclès.doc: No such file or directory
</pre>
<p class="continue">
En fait, <code>rm</code> croit que vous voulez effacer d'abord un
fichier appelé <code>siècle</code>, puis un autre appelé
<code>de</code>, etc. La solution est de mettre le nom du fichier
entre guillemets (&quot;), et <code>rm</code> l'efface sans problème&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> rm "siècle de périclès.doc"
remove siècle de périclès.doc? y
<span class="prompt">brick ~ $</span>
</pre>
<p>
Essayons maintenant avec un fichier commençant par un caractère
bizarre, par exemple un tiret&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> rm -bla
rm: illegal option -- b
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file
<span class="prompt">brick ~ $</span> rm "-bla"
rm: illegal option -- b
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file
</pre>
<p class="continue">
Pas bien brillant... La commande <code>rm</code> croit à cause du
tiret initial qu'il s'agit d'options. Or il n'y a pas d'option
<code>-b</code> pour <code>rm</code>. Solution&nbsp;: utiliser l'option
<code>--</code>&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> rm -- -bla
remove -bla?
</pre>
<p class="continue">
Une autre solution consiste à donner à <code>rm</code> un chemin,
absolu ou relatif. Avec un chemin relatif, par exemple&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> rm ./-bla
remove -bla?
</pre>
<h3>Concaténer des fichiers</h3>
<p>
<dfn>Concaténer des fichiers</dfn>, c'est les placer bout à bout. On
utilise la commande <code>cat</code> (comme <i
lang="en">concatenate</i>)&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> cat fichier1 fichier2 &gt; fichier3
</pre>
<p class="continue">
Les fichiers 1 et 2 placés bout à bout et le résultat est mis dans un
<code>fichier3</code> créé automatiquement. Le <i lang="en">shell</i>
refuse d'écraser un fichier existant.
</p>
<p class="continue">
Dans <code>fichier3</code> apparaît d'abord <code>fichier1</code> puis
<code>fichier2</code>. Concaténer deux fichiers de la sorte ne les
détruit pas (il existe à la fois <code>fichier1</code>,
<code>fichier2</code> et <code>fichier3</code>).
</p>
<p>
On peut aussi placer deux fichiers bout à bout sans créer de troisième
fichier. La syntaxe est alors la suivante&nbsp;:
</p>
<pre>
<span class="prompt">brick ~ $</span> cat fichier2 &gt;&gt; fichier1</pre>
<p class="continue">
<code>fichier2</code> est placé «&nbsp;au bout&nbsp;» de <code>fichier1</code>.
<code>fichier2</code> reste inchangé, <code>fichier1</code> contient
désormais son propre texte suivi du texte de <code>fichier2</code>.
</p>
<h2>Récapitulons (exemple)</h2>
<p>
On veut renommer le fichier <code>chrono</code> du sous-répertoire
<code>ancienne/</code> en <code>evolution</code>, et le mettre dans le
répertoire <code>histoire/</code>. Dans cet exemple, nous sommes dans
<code>histoire/ancienne/</code>&nbsp;:
</p>
<div class="illustration">
<table class="tableau">
<tr>
<td>
<p class="continue"><strong>(1)</strong> État de départ&nbsp;:</p>
<img src="fichiers_ex1.png" alt="[histoire (ancienne (chrono, empire.tex))]"/>
</td>
<td>
<p class="continue"><strong>(2)</strong> <code>cp chrono evolution</code></p>
<img src="fichiers_ex2.png" alt="[histoire (ancienne (chrono, empire.tex, evolution))]"/>
</td>
</tr>
<tr>
<td>
<p class="continue"><strong>(3)</strong> <code>mv evolution ..</code></p>
<img src="fichiers_ex3.png" alt="[histoire (ancienne (chrono, empire.tex), evolution)]"/>
</td>
<td>
<p class="continue"><strong>(4)</strong> <code>rm chrono</code></p>
<img src="fichiers_ex4.png" alt="[histoire (ancienne (empire.tex), evolution)]"/>
</td>
</tr>
</table>
</div>
<p>
On peut aussi faire plus rapidement&nbsp;:
</p>
<pre>
mv chrono evolution
mv evolution ..</pre>
<p>
Ou, en une seule ligne de commande&nbsp;:
</p>
<pre>
mv chrono ../evolution</pre>
<p>
La même série d'opérations est possible depuis <code>histoire/</code>; elle se
fera avec la suite de commandes suivantes&nbsp;:
</p>
<table class="tableau">
<tr>
<td><pre>cp ancienne/chrono evolution
rm ancienne/chrono</pre>
</td>
<td>On recopie le fichier <code>chrono</code> du sous-répertoire
<code>ancienne/</code> en un second fichier <code>evolution</code> placé dans
le répertoire courant&nbsp;: on se retrouve directement dans l'état 3.
Ensuite, on efface le fichier <code>chrono</code> qui est toujours dans le
répertoire <code>ancienne/</code>.</td>
</tr>
<tr>
<td><pre>mv ancienne/chrono ..
mv chrono evolution</pre></td>
<td>D'abord on déplace le fichier, ensuite on le renomme.</td>
</tr>
<tr>
<td>
<pre>mv ancienne/chrono evolution</pre></td>
<td> En une seule ligne, on déplace le fichier et on le renomme.</td>
</tr>
</table>
<p>
Il y a donc rarement une seule façon de manipuler ses fichiers, c'est
une question d'aisance et de rapidité.
</p>
<div class="metainformation">
Auteur&nbsp;: Émilia Robin (2002), Marie-Lan Nguyen (2004).
Dernière modification&nbsp;: le <date value="$Date: 2007-07-13 08:41:21 $" />.
</div>
</body>
</html>