Système de fichiers

Notions

Les répertoires sont appelés directories 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 :

/users  
/bin   
/usr/local/bin

On désigne les fichiers (et les répertoires) contenus dans un répertoire par :

nom de répertoire/nom de fichier

Par exemple : /bin/sh est le fichier sh contenu dans le répertoire /bin.

Les répertoires sont organisés en arbre, c'est-à-dire qu'ils sont tous contenus dans un répertoire appelé la racine, et désigné par "/". Chaque répertoire contient deux répertoires spéciaux :

Exemples : /users/92/. est le même répertoire que /users/92, /users/92/.. est le même répertoire que /users.

Chaque utilisateur a un home-directory, ou répertoire personnel. C'est l'endroit ou il range ses fichiers. Sur les machines de la salle S, le répertoire personnel a pour nom /users/année/groupe/nom-de-login.

Exemples : /users/92/maths/vous, /users/formel/doligez.

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 : ~leroy.

Noms de fichiers

Un nom de fichier qui commence par / est dit absolu. Il est interprété en partant de la racine, et en descendant dans l'arbre. Un nom de fichier qui ne commence pas par / est relatif. Il est interprété en partant du répertoire courant. 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.

Exemples : /users/formel/doligez/foo est un nom (ou chemin) absolu. bar est un nom relatif. Il désigne un fichier appelé bar et situé dans le répertoire courant. Le fichier exact dont il s'agit dépend donc de votre répertoire courant.

Remarque : Le seul caractère spécial dans les noms de fichiers est le slash /. Un nom de fichier peut avoir jusqu'à 255 caractères, et contenir un nombre quelconque de points.

Commandes pour manipuler le système de fichiers

pwd

Affiche le répertoire courant. Exemple :

chaland ~ $ pwd
/users/formel/doligez

cd

Change le répertoire courant. Si on ne lui donne pas d'argument, on retourne dans le répertoire personnel. Exemple :

chaland ~ $ pwd
/users/formel/doligez
chaland ~ $ cd ..
chaland /users/formel/ $ cd
chaland ~ $ pwd
/users/formel/doligez

mkdir

Crée un nouveau répertoire, (presque) vide. Il ne contient que . et ...

rmdir

Supprime un répertoire vide. Si le répertoire contient autre chose que . et .. ça ne marche pas.

mv

Renomme un fichier, mais peut aussi le déplacer d'un répertoire à un autre. Exemple :

chaland ~ $ mkdir foo
chaland ~ $ nano bar
chaland ~ $ mv bar foo/bar2
chaland ~ $ cd foo
chaland ~/foo $ pwd
/users/formel/doligez/foo
chaland ~/foo $ ls
bar2

ls

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. ls ne liste pas les fichiers dont le nom commence par . C'est pourquoi . et .. n'apparaissent pas ci-dessus.

Raccourcis pour les noms de fichiers

Il est parfois ennuyeux d'avoir à taper un nom complet de fichier comme nabuchodonosor. Il est encore plus ennuyeux d'avoir à taper une liste de fichier pour les donner en arguments à une commande, comme : cc -o foo bar.c gee.c buz.c gog.c. Pour éviter ces problèmes, on peut utiliser des jokers (wildcards en anglais).

Une étoile * dans un nom de fichier est interprétée par le shell comme « n'importe quelle séquence de caractères ». Exemple : cc -o foo *.c.

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 . et qui finissent par .c Ensuite, il remplace *.c 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 : cc -o foo bar.c buz.c foo.c gee.c gog.c.

On a aussi le ?, qui remplace un (et exactement un) caractère quelconque. Par exemple, *.? liste tous les fichiers sont l'extension n'a qu'une seule lettre.

La forme [abcd] remplace un caractère quelconque parmi a, b, c, d. Enfin, [^abcd] remplace un caractère quelconque qui ne se trouve pas parmi a, b, c, d.

Exemple : echo /users/* affiche la même chose que ls /users (La commande echo se contente d'afficher ses arguments.)

Attention :

Interlude : comment effacer un fichier nommé ?* ? On ne peut pas taper rm ?* car le shell remplace ?* par la liste de tous les fichiers du répertoire courant. On peut taper rm -i * qui supprime tous les fichiers, mais en demandant confirmation à chaque fichier. On répond no à toutes les questions sauf rm: remove ?*?. Autre méthode : utiliser les mécanismes de quotation (voir ci-dessous).

Auteurs : Roberto Di Cosmo, Xavier Leroy; Marc Espie. Mise à jour d'Émilia Robin et de Nicolas George.