Réorganisation du fichier :
o on organise par opération (lire un fichier, renommer un fichier, etc.) plutôt que par commande. o ajout d'exemples o ajout de commandes (touch) et d'options (tail -f, rm -R, rm -f, rm --)
This commit is contained in:
parent
668178d736
commit
cbeb660993
1 changed files with 542 additions and 173 deletions
|
@ -8,49 +8,120 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<h1>Manipuler les fichiers (<em>files</em>)</h1>
|
<h1>Manipuler les fichiers</h1>
|
||||||
|
|
||||||
<h2><a name="comment">Comment un fichier est-il créé ?</a></h2>
|
<h2><a name="comment">Créer un fichier</a></h2>
|
||||||
|
|
||||||
|
<h3>Généralités</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Un fichier est un paquet d'informations : du texte, de la musique, une
|
Un <dfn>fichier</dfn> est un <em>paquet d'informations</em> : ce peut
|
||||||
image... Chaque objet que vous manipulez en informatique (une page
|
être aussi bien du texte, que de la musique ou une image. Chaque objet
|
||||||
Web, la musique de Casimir, vos photos de vacances, un logiciel...)
|
que vous manipulez en informatique (une page Web, la musique de
|
||||||
correspond à un fichier. Quand vous écrivez un texte avec Word et que
|
Casimir, vos photos de vacances, un logiciel, etc.) correspond à un
|
||||||
vous le sauvegardez sous le nom « Rapport de maîtrise », vous créez un
|
fichier.
|
||||||
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>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Une des opérations les plus courantes consiste à écrire du texte. Pour cela,
|
Quand vous écrivez un texte avec OpenOffice.org et que vous le
|
||||||
voir le cours sur les <a href="editeurs/">éditeurs de texte</a>.
|
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>
|
</p>
|
||||||
|
|
||||||
<h2><a name="nom">Quel nom donner à ses fichiers ?</a></h2>
|
<h3>Créer un fichier texte</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Les noms de fichiers s'écrivent avec des caractères alphanumériques (lettres
|
Une des opérations les plus courantes consiste à écrire du texte. Pour
|
||||||
et chiffres). On peut utiliser des majuscules et des minuscules, mais elles
|
cela, voir le cours sur les <a href="editeurs/">éditeurs de
|
||||||
ne sont pas interchangeables : <code>document</code> et
|
texte</a>. Quand on vous demande de créer un fichier, généralement il
|
||||||
<code>Document</code> sont deux fichiers distincts.
|
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>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Il est préférable d'éviter les espaces dans les noms de fichiers (les
|
Il est préférable d'éviter les espaces dans les noms de fichiers. On
|
||||||
remplacer par underscore <code>_</code>, tiret <code>-</code>, virgule
|
peut les remplacer par un <i lang="en">underscore</i> (<code>_</code>)
|
||||||
<code>,</code> ou point <code>.</code>). Il vaut mieux éviter les caractères
|
ou un tiret (<code>-</code>). :
|
||||||
accentués, et proscrire le reste (ponctuations diverses, signes bizarres). Il
|
</p>
|
||||||
faut aussi éviter de faire commencer un fichier par un <code>.</code> (par
|
|
||||||
exemple <code>.document</code>), et de faire des noms trop longs (même si en
|
<pre>
|
||||||
théorie vous avez droit à 255 caractères).
|
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>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Certains fichiers ont des suffixes conventionnels qui les identifient auprès
|
Certains fichiers ont des suffixes conventionnels qui les identifient
|
||||||
des utilisateurs et de certains programmes (liste non exhaustive de suffixes
|
auprès des utilisateurs et de certains programmes (liste non
|
||||||
et d'outils) :
|
exhaustive de suffixes et d'outils) :
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<table class="tableau">
|
<table class="tableau">
|
||||||
|
@ -132,11 +203,46 @@ et toutes les pages Web un suffixe <code>.html</code> (par exemple ce document
|
||||||
s'appelle <code>fichiers.html</code>).
|
s'appelle <code>fichiers.html</code>).
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2><a name="less"><code>less <em>fichier</em></code></a></h2>
|
<h2><a name="less">Lire un fichier</a></h2>
|
||||||
|
|
||||||
|
<h3>Lire un fichier avec <code>cat</code></h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Permet lire un fichier sans l'éditer (c'est-à-dire ouvrir un document afin de
|
Pour pouvoir consulter un fichier (sans l'éditer), le plus simple est
|
||||||
pouvoir le modifier). Les commandes de base sont :
|
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>
|
</p>
|
||||||
|
|
||||||
<table class="tableau">
|
<table class="tableau">
|
||||||
|
@ -185,25 +291,15 @@ tout le texte. Pour aller
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<h2><a name="more">Remarques sur <code>more</code> et <code>cat</code></a></h2>
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<strong><code>cat</code></strong> a pour fonction première d'afficher un
|
<strong><code>more</code></strong> (en savoir <em> davantage</em> sur
|
||||||
fichier. Il est rapide et pratique pour un fichier très court, mais nous ne
|
un fichier) est une commande standard sur tous les systèmes Unix
|
||||||
vous le conseillons pas pour regarder un fichier un peu conséquent :
|
(alors que <code>less</code> n'est pas installé
|
||||||
<code>cat</code> affiche le contenu du fichier d'un seul coup (si le texte
|
partout). <code>less</code> (installé à l'École) est cependant plus
|
||||||
fait plus de 10-15 lignes, on ne voit rien). D'autre part, il ne permet aucune
|
performant : les mots recherchés apparaissent sur fond noir au lieu
|
||||||
recherche.
|
d'être juste placés en haut de l'écran, le défilement du texte est
|
||||||
</p>
|
plus précis. Si vous n'avez que <code>more</code> à disposition, vous
|
||||||
|
pouvez utiliser les commandes suivantes :
|
||||||
<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>
|
</p>
|
||||||
|
|
||||||
<table class="tableau">
|
<table class="tableau">
|
||||||
|
@ -229,65 +325,253 @@ qu'avec <code>less</code> ).</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<h3>Afficher le début d'un fichier</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>
|
<h2>Manipuler les fichiers</h2>
|
||||||
|
|
||||||
<h3><a name="cp"><code>cp <em>nom1</em> <em>nom2</em></code> (<em>copy</em>)</a></h3>
|
<h3>Copier un fichier</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Permet de recopier le fichier <code>nom1</code>dans un fichier
|
<dfn>Copier un fichier</dfn>, c'est prendre un fichier déjà existant
|
||||||
<code>nom2</code>. Ils seront donc identiques.
|
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>
|
</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>
|
<p>
|
||||||
&icone.note;
|
<dfn>Renommer un fichier</dfn>, c'est lui donner un nouveau nom, sans
|
||||||
<a href="exercices/cp_mv.html">Exercices sur cp</a>.
|
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>
|
</p>
|
||||||
|
|
||||||
<h3><a name="mv"><code>mv <em>nom1</em> <em>nom2</em></code> (<em>move</em>,
|
<pre>
|
||||||
déplacer et renommer)</a></h3>
|
<span class="prompt">brick ~ $</span> mv dissert.tex dissertation.tex
|
||||||
|
</pre>
|
||||||
<h4>Renommer</h4>
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<code>mv truc chose</code> :
|
La même commande sert également, avec la même syntaxe, pour les
|
||||||
renomme le fichier ou le répertoire <code>truc</code> en <code>chose</code>.
|
répertoires. Ainsi, si vous voulez renommer votre répertoire
|
||||||
|
<code>boulot</code> en répertoire <code>magistere</code> :
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h4>Déplacer</h4>
|
<pre>
|
||||||
|
<span class="prompt">brick ~ $</span> mv boulot magistere
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<h3>Déplacer un fichier</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<code>mv truc chose/</code> :
|
C'est toujours la commande <code>mv</code> que l'on utilise. La
|
||||||
déplace le fichier <code>truc</code> dans le répertoire <code>chose/</code>.
|
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>
|
</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>
|
<p>
|
||||||
<code>mv fichier ..</code> :
|
Sous Unix, <dfn>effacer un fichier</dfn>, c'est le détruire de façon
|
||||||
déplace un fichier dans le répertoire père (pour ce terme, voir dans le
|
<strong>irréversible</strong>. Pas de concept de poubelle dans
|
||||||
tableau qui illustre <a href="repertoires.html#cd"><code>cd</code></a>).
|
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>
|
</p>
|
||||||
|
|
||||||
<p>
|
<pre>
|
||||||
&icone.note;
|
<span class="prompt">brick ~ $</span> rm fichier
|
||||||
<a href="exercices/cp_mv.html">Exercices sur mv</a>.
|
</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>
|
</p>
|
||||||
|
|
||||||
<h3><a name="rm"><code>rm <em>fichier</em></code> (<em>remove</em>)</a></h3>
|
<div class="encadre">
|
||||||
|
<strong>Remarque</strong> : à l'ENS, les partitions utilisateurs sont
|
||||||
<p>
|
sauvegardées toutes les nuits par le SPI. Si donc vous effacez un
|
||||||
À ne jamais confondre avec <code>mv</code> ... Cette commande détruit le
|
fichier accidentellement et qu'il avait plus d'un ou deux jours, vous
|
||||||
fichier, de façon irréversible. Avec la config conscrits, confirmation est
|
pouvez envoyer un courrier électronique au <a
|
||||||
demandée (option <code>-i</code> de <code>rm</code>). Ce n'est pas le cas
|
href="http://www.spi.ens.fr/">SPI</a> pour demander qu'on vous le
|
||||||
pour toutes les configurations : observez donc la plus grande prudence
|
récupère.
|
||||||
avec cette commande...
|
</div>
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<strong>Remarques</strong> : 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 SPI pour demander qu'on vous le récupère
|
|
||||||
(<code>spi@clipper</code>).
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Il existe aussi <a href="&url.tuteurs;logiciels/rcs/">RCS</a>, qui
|
Il existe aussi <a href="&url.tuteurs;logiciels/rcs/">RCS</a>, qui
|
||||||
|
@ -295,13 +579,177 @@ enregistre des copies de sauvegarde de vos fichiers, et permet de g
|
||||||
les différentes versions de votre travail.
|
les différentes versions de votre travail.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3>Exemple</h3>
|
<h4>Effacer plusieurs fichiers en même temps</h4>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
On veut renommer le fichier
|
Nettoyage de printemps sur votre compte, vous voulez supprimer
|
||||||
<code>chrono</code> du sous-répertoire <code>ancienne/</code> en
|
plusieurs fichiers en même temps. Il suffit tout simplement de les
|
||||||
<code>evolution</code>, et le mettre dans le répertoire
|
indiquer à la suite à <code>rm</code> :
|
||||||
<code>histoire/</code>. Dans cet exemple, nous sommes dans
|
</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> :
|
<code>histoire/ancienne/</code> :
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
@ -374,92 +822,13 @@ mv chrono evolution</pre></td>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Il y a donc rarement une seule façon de manipuler ses fichiers, c'est une
|
Il y a donc rarement une seule façon de manipuler ses fichiers, c'est
|
||||||
question d'aisance et de rapidité.
|
une question d'aisance et de rapidité.
|
||||||
</p>
|
|
||||||
|
|
||||||
|
|
||||||
<h2><a name="cat"><code>cat</code></a></h2>
|
|
||||||
|
|
||||||
<h3>Afficher un fichier</h3>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
C'est pratique pour lire un fichier court, inutilisable sinon (voir les <a
|
|
||||||
href="#more">remarques à propos de more et de cat</a>). Dans cet usage,
|
|
||||||
<code>cat</code> sert surtout lorsque vous programmez.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h3>Concaténer des fichiers</h3>
|
|
||||||
|
|
||||||
<pre>cat <em>fichier1</em> <em>fichier2</em> > <em>fichier3 </em></pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Les fichiers 1 et 2 sont concaténés (placés bout à à bout) et le résultat est
|
|
||||||
mis dans un <code>fichier3</code> créé automatiquement. Le <em>shell</em>
|
|
||||||
refuse d'écraser un fichier existant.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
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>cat fichier2 >> fichier1</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<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>
|
|
||||||
|
|
||||||
<h3>Écrire</h3>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<code>cat</code> peut faire office d'éditeur minimaliste; tapez la commande
|
|
||||||
suivante, et quelques mots :
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
<span class="prompt">corvette ~ $</span> cat > notes
|
|
||||||
Faire les courses
|
|
||||||
Passer à la bibliothèque
|
|
||||||
...
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Et finissez par <code>^D</code>. Le fichier <code>notes</code> contient les
|
|
||||||
quelques lignes que vous avez saisies.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2><a name="head"><code>head <em>fichier</em></code> et <code>tail
|
|
||||||
<em>fichier</em></code></a></h2>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Par défaut, ces commandes montrent les dix premières (<code>head</code>) ou
|
|
||||||
les dix dernières (<code>tail</code>) lignes d'un fichier.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
On peut utiliser l'option <code>-<em>nombre</em></code> pour spécifier le
|
|
||||||
nombre de lignes que l'on veut faire apparaître :
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<pre>head -24 mon-fichier</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
affiche les 24 premières lignes du fichier.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="metainformation">
|
<div class="metainformation">
|
||||||
Auteur : Émilia Robin.
|
Auteur : Émilia Robin (2002), Marie-Lan Nguyen (2004).
|
||||||
Dernière modification le 2002-11-22.
|
Dernière modification : le <date value="$Date: 2004-03-14 15:00:56 $" />.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
Loading…
Add table
Reference in a new issue