tuteurs.ens.fr/unix/systemes_fichiers.tml

252 lines
7.3 KiB
XML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
"tuteurs://DTD/tml.dtd">
<html>
<head>
<title>Systèmes de fichiers</title>
</head>
<body>
<h1>Système de fichiers</h1>
<h2>Notions</h2>
<p>
Les répertoires sont appelés <em>directories</em> en anglais. Un répertoire
est une boîte qui peut contenir des fichiers et d'autres répertoires (comme
les catalogues de MS-DOS, ou les dossiers du Macintosh). Des exemples de
répertoires :
</p>
<pre>
/users
/bin
/usr/local/bin
</pre>
<p>
On désigne les fichiers (et les répertoires) contenus dans un répertoire
par :
</p>
<pre><em>nom de répertoire</em>/<em>nom de fichier</em></pre>
<p>
Par exemple : <code>/bin/sh</code> est le fichier <code>sh</code> contenu
dans le répertoire <code>/bin</code>.
</p>
<p>
Les répertoires sont organisés en arbre, c'est-à-dire qu'ils sont tous
contenus dans un répertoire appelé la <em>racine</em>, et désigné par "/".
Chaque répertoire contient deux répertoires spéciaux :
</p>
<ul>
<li><code>.</code> désigne le répertoire lui-même.</li>
<li><code>..</code> désigne le père du répertoire.</li>
</ul>
<p>
Exemples :
<code>/users/92/.</code> est le même répertoire que <code>/users/92</code>,
<code>/users/92/..</code> est le même répertoire que <code>/users</code>.
</p>
<p>
Chaque utilisateur a un <em>home-directory</em>, ou <em>répertoire
personnel</em>. C'est l'endroit ou il range ses fichiers. Sur les machines
de la salle S, le répertoire personnel a pour nom
<code>/users/<em>année</em>/<em>groupe</em>/<em>nom-de-login</em></code>.
</p>
<p>Exemples :
<code>/users/92/maths/<em>vous</em></code>,
<code>/users/formel/doligez</code>.
</p>
<p>
On peut aussi désigner le répertoire personneld'un autre utilisateur par le
nom de login de l'utilisateur précédé d'un tilde (le caractère tilde).
Exemple : <code>~leroy</code>.
</p>
<h3>Noms de fichiers</h3>
<p>
Un nom de fichier qui commence par <code>/</code> est dit <em>absolu</em>.
Il est interprété en partant de la racine, et en descendant dans l'arbre.
Un nom de fichier qui ne commence pas par <code>/</code> est
<em>relatif</em>. Il est interprété en partant du <em>répertoire
courant</em>. Le répertoire courant est initialement (au moment où vous vous
connectez) votre répertoire personnel ; le répertoire courant est le
répertoire dans lequel vous vous trouvez.
</p>
<p>
Exemples :
<code>/users/formel/doligez/foo</code> est un nom (ou chemin) absolu.
<code>bar</code> est un nom relatif. Il désigne un fichier appelé
<code>bar</code> et situé dans le répertoire courant. Le fichier exact dont
il s'agit dépend donc de votre répertoire courant.
</p>
<p>
Remarque :
Le seul caractère spécial dans les noms de fichiers est le slash
<code>/</code>. Un nom de fichier peut avoir jusqu'à 255 caractères, et
contenir un nombre quelconque de points.
</p>
<h3>Commandes pour manipuler le système de fichiers</h3>
<h4><code>pwd</code></h4>
<p>
Affiche le répertoire courant.
Exemple :
</p>
<pre><span class="prompt">chaland ~ $</span> pwd
/users/formel/doligez</pre>
<h4><code>cd</code></h4>
<p>
Change le répertoire courant. Si on ne lui donne pas d'argument, on
retourne dans le répertoire personnel. Exemple :
</p>
<pre>
<span class="prompt">chaland ~ $</span> pwd
/users/formel/doligez
<span class="prompt">chaland ~ $</span> cd ..
<span class="prompt">chaland /users/formel/ $</span> cd
<span class="prompt">chaland ~ $</span> pwd
/users/formel/doligez</pre>
<h4><code>mkdir</code></h4>
<p>
Crée un nouveau répertoire, (presque) vide. Il ne contient que
<code>.</code> et <code>..</code>.
</p>
<h4><code>rmdir</code></h4>
<p>
Supprime un répertoire vide. Si le répertoire contient autre
chose que <code>.</code> et <code>..</code> ça ne marche pas.
</p>
<h4><code>mv</code></h4>
<p>
Renomme un fichier, mais peut aussi le déplacer d'un répertoire à
un autre. Exemple :
</p>
<pre>
<span class="prompt">chaland ~ $</span> mkdir foo
<span class="prompt">chaland ~ $</span> nano bar
<span class="prompt">chaland ~ $</span> mv bar foo/bar2
<span class="prompt">chaland ~ $</span> cd foo
<span class="prompt">chaland ~/foo $</span> pwd
/users/formel/doligez/foo
<span class="prompt">chaland ~/foo $</span> ls
bar2</pre>
<h4><code>ls</code></h4>
<p>
Liste les fichiers et les répertoires qu'on lui donne en arguments,
ou le répertoire courant si on ne lui donne pas d'argument. <code>ls</code>
ne liste pas les fichiers dont le nom commence par <code>.</code> C'est
pourquoi <code>.</code> et <code>..</code> n'apparaissent pas ci-dessus.
</p>
<h2>Raccourcis pour les noms de fichiers</h2>
<p>
Il est parfois ennuyeux d'avoir à taper un nom complet de fichier comme
<code>nabuchodonosor</code>. Il est encore plus ennuyeux d'avoir à taper une
liste de fichier pour les donner en arguments à une commande, comme :
<code>cc -o foo bar.c gee.c buz.c gog.c</code>. Pour éviter ces problèmes,
on peut utiliser des <em>jokers</em> (<em>wildcards</em> en anglais).
</p>
<p>
Une étoile <code>*</code> dans un nom de fichier est interprétée par le shell
comme « n'importe quelle séquence de caractères ».
Exemple : <code>cc -o foo *.c</code>.
</p>
<p>
Pour interpréter l'étoile, le shell va faire la liste de tous les noms de
fichiers du répertoire courant qui ne commencent pas par <code>.</code> et
qui finissent par <code>.c</code> Ensuite, il remplace <code>*.c</code> par
cette liste (triée par ordre alphabétique) dans la ligne de commande, et
exécute le résultat, c'est-à-dire par exemple : <code>cc -o foo bar.c buz.c
foo.c gee.c gog.c</code>.
</p>
<p>
On a aussi le <code>?</code>, qui remplace un (et exactement un) caractère
quelconque. Par exemple, <code>*.?</code> liste tous les fichiers sont
l'extension n'a qu'une seule lettre.
</p>
<p>
La forme <code>[abcd]</code> remplace un caractère quelconque parmi
<code>a</code>, <code>b</code>, <code>c</code>, <code>d</code>. Enfin,
<code>[^abcd]</code> remplace un caractère quelconque qui ne se trouve pas
parmi <code>a</code>, <code>b</code>, <code>c</code>, <code>d</code>.
</p>
<p>
Exemple : <code>echo /users/*</code>
affiche la même chose que
<code>ls /users</code>
(La commande <code>echo</code> se contente d'afficher ses arguments.)
</p>
<p>
Attention :
</p>
<ul>
<li>C'est le shell qui fait le remplacement des arguments contenant un
joker. On ne peut donc pas faire <code>mv *.c *.bak</code>, car le shell va
passer à
<code>mv</code> les arguments <code>foo.c bar.c foo.bak bar.bak</code>, et
<code>mv</code> ne sait pas quel fichier remplacer.
</li>
<li>Attention aux espaces. Si vous tapez <code>rm * ~</code>, le shell remplace
l'étoile par la liste des fichiers présents, et ils seront tous effacés. Si
vous tapez <code>rm *~</code>, seuls les fichiers dont le nom finit par un
tilde seront effacés.
</li>
</ul>
<p>
Interlude : comment effacer un fichier nommé <code>?*</code> ? On ne peut
pas taper <code>rm ?*</code> car le shell remplace <code>?*</code> par la
liste de tous les fichiers du répertoire courant. On peut taper <code>rm -i
*</code> qui supprime tous les fichiers, mais en demandant confirmation à
chaque fichier. On répond <code>no</code> à toutes les questions sauf
<code>rm: remove ?*?</code>. Autre méthode : utiliser les mécanismes de
quotation (voir ci-dessous).
</p>
<div class="metainformation">
Auteurs : Roberto Di Cosmo, Xavier Leroy; Marc Espie.
Mise à jour d'Émilia Robin et de Nicolas George.
Dernière modification le 2002-11-23.
</div>
</body>
</html>