20653ddee5
Last-change: ignore this commit
835 lines
24 KiB
XML
835 lines
24 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> : 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 « Rapport de maîtrise », 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 :
|
||
</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 :
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">brick ~ $</span> cat > 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é « toto ». En fait, cette commande sert essentiellement à
|
||
modifier la date de dernière modification d'un fichier.
|
||
</p>
|
||
|
||
<div class="ens">
|
||
<strong>Application :</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> :
|
||
</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 : <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>). :
|
||
</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) :
|
||
</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 ; <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> :
|
||
</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 « visionneuse » en
|
||
français). Le nom « pager » 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 :
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">brick ~ $</span> less toto.txt
|
||
</pre>
|
||
|
||
<p class="continue">
|
||
Voici un tableau des commandes utiles de <code>less</code> :
|
||
</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 « mot » 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 : 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 :
|
||
</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 « mot » 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 :
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">brick ~ $</span> head point_de_lendemain.txt
|
||
J'aimais éperdumment la comtesse de ... ; j'avais vingt ans, et
|
||
j'étais ingénu ; elle me trompa, je me fâchai, elle me
|
||
quitta. J'étais ingénu, je la regrettai ; j'avais vingt ans, elle
|
||
me pardonna : 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 :
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">brick ~ $</span> head -2 point_de_lendemain.txt
|
||
J'aimais éperdumment la comtesse de ... ; j'avais vingt ans, et
|
||
j'étais ingénu ; elle me trompa, je me fâchai, elle me
|
||
<span class="prompt">brick ~ $</span>
|
||
</pre>
|
||
|
||
<p>
|
||
« Mais à quoi est-ce que ça peut bien servir ? », 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> :
|
||
</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> :
|
||
</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 ». Elle me serra la main, et
|
||
me quitta.
|
||
</pre>
|
||
|
||
<p>
|
||
Cette commande devient très intéressante avec l'option
|
||
<code>-f</code> : 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 :
|
||
</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> :
|
||
</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 :
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">brick ~ $</span> cp www www2
|
||
cp: www: is a directory
|
||
</pre>
|
||
|
||
<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>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> :
|
||
</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> :
|
||
</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 : <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> :
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">brick ~ $</span> mv cv.html www
|
||
</pre>
|
||
|
||
<p class="continue">
|
||
Autre exemple :
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">brick ~ $</span> mv fichier ..
|
||
</pre>
|
||
|
||
<p class="continue">
|
||
déplace un fichier dans le répertoire père — 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 OS. C'est la
|
||
commande <code>rm</code> (comme <i lang="en">remove</i>) qui efface un
|
||
fichier :
|
||
</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 :
|
||
</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> :
|
||
</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 : observez donc
|
||
la plus grande prudence en utilisant <code>rm</code>.
|
||
</p>
|
||
|
||
<div class="encadre">
|
||
<strong>Remarque</strong> : à 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> :
|
||
</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 :
|
||
</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 :
|
||
</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> :
|
||
</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 ? La commande
|
||
<code>rm</code> semble devenir subitement inefficace ! 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 ("), et <code>rm</code> l'efface sans problème :
|
||
</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 :
|
||
</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 : utiliser l'option
|
||
<code>--</code> :
|
||
</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 :
|
||
</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>) :
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">brick ~ $</span> cat fichier1 fichier2 > 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 :
|
||
</p>
|
||
|
||
<pre>
|
||
<span class="prompt">brick ~ $</span> cat fichier2 >> fichier1</pre>
|
||
|
||
<p class="continue">
|
||
<code>fichier2</code> est placé « au bout » 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> :
|
||
</p>
|
||
|
||
<div class="illustration">
|
||
<table class="tableau">
|
||
<tr>
|
||
<td>
|
||
<p class="continue"><strong>(1)</strong> État de départ :</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 :
|
||
</p>
|
||
|
||
<pre>
|
||
mv chrono evolution
|
||
mv evolution ..</pre>
|
||
|
||
<p>
|
||
Ou, en une seule ligne de commande :
|
||
</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 :
|
||
</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 : 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 : Émilia Robin (2002), Marie-Lan Nguyen (2004).
|
||
Dernière modification : le <date value="$Date: 2007-07-17 10:03:10 $" />.
|
||
</div>
|
||
|
||
</body>
|
||
</html>
|