Système de fichiers

Les données, qu'elles soient des programmes, ou des résultats de calcul etc... sont stockées en mémoire de masse (en général le disque dur), sous formes de fichiers.

Répertoires (ou directory)

Organisation en arbre

Afin de pouvoir classer ces fichiers, selon leur fonction, leur utilisateur ou autre, le disque est "divisé" en répertoires (en anglais "directory"). Un répertoire peut contenir un nombre arbitraire de fichiers, et aussi d'autres répertoires (qui à leur tour peuvent contenir fichiers et répertoires, etc.). Les répertoires créent donc une structure arborescente (il y a des répertoires à la racine du disque, qui peuvent contenir des sous-répertoires, qui peuvent contenir des sous-répertoires, etc.). Cela permet d'organiser ses données comme on le fait avec des lettres, rangées dans des dossiers, rangés dans des classeurs, rangés dans des tiroirs, rangés dans des armoires, etc... (la "racine" étant le bureau ou le bâtiment qui contient tout). Chaque utilisateur possède un répertoire qui lui est propre pour ranger ses petites affaires, et dont le nom est en général le même que le "login". Il peut (et doit) y créer de nouveaux répertoires (sous-directory) pour maintenir un peu d'ordre dans des listes de fichiers qui deviennent vite foisonnantes. Le choix des noms des répertoires peut grandement aider à retrouver ses fichier. A tout moment, il faut savoir quel est le répertoire courant (celui dans lequel on est en train de travailler). En cas d'oubli, on peut le retrouver grâce à la commande :

ordi:~ > pwd # pour Present Working Directory

La réponse doit ressembler à "/home/login".

Se déplacer dans l'arborescence des fichiers

On utilise la commande cd pour changer le répertoire courant, en donnant par exemple le nom d'un sous-répertoire. Exemple:

ordi:~ > pwd
/home/login
ordi:~ > mkdir TD2 # crée un répertoire "TD2"
ordi:~ > cd TD2    # entre dans "TD2"
ordi:~ > pwd       # on vérifie...
/home/login/TD2

Si on essaie de se déplacer dans un répertoire qui n'existe pas, l'ordinateur affiche une erreur et ne change pas le répertoire courant:

ordi:~ > cd nexistepas
cd: no such file or directory: nexistepas

Répertoires spéciaux: "." et ".."

Il existe deux répertoires très particuliers dans tous les répertoires (ils sont créés avec le répertoire):

Par exemple, si le répertoire courant est /home/p7phyl/toto, alors . est le répertoire /home/p7phyl/toto et .. est le répertoire /home/p7phyl.

En particulier cd . ne fait rien, et cd .. remonte au répertoire parent (si on n'est pas déjà à la racine).

ordi:~ > pwd
/home/login
ordi:~ > cd .
ordi:~ > pwd
/home/login
ordi:~ > cd ..
ordi:~ > pwd
/home
On peut enchaîner des changements avec le caractère '/'
ordi:~ > cd login/TD2
ordi:~ > pwd
/home/login/TD2
Un peu plus compliqué...
ordi:~ > cd ../../login/../login/TD2/..
ordi:~ > pwd  # Qu'affichera cette commande ??

Formes d'adresses de fichiers/répertoires

On accède aux fichiers et/ou aux répertoires par leur nom. Selon où on se trouve et où se trouve le fichier, il faut inclure plus ou moins d'information sur son emplacement:

nomfich (nom simple)
Ceci suppose que "nomfich" est situé dans le répertoire courant. L'adresse est relative au directory dont le nom est obtenu par pwd.
nomrep/nomfich (adresse relative)
Dans ce cas le fichier de nom "nomfich" est situé dans le répertoire "nomrep", qui lui est à chercher dans le répertoire courant. L'adresse est donc relative au répertoire dont le nom est obtenu par pwd. Autres exemples:

repA/repB/nomfich

../repC/nomfich

Vous voyez que si on indique un chemin avec plusieurs changement de répertoire, les différents répertoires sont séparés par le caractère / (en anglais "slash"). Le double point (..) est un nom spécial pour remonter au répertoire parent (remonter la branche vers le tronc, dans l'image de l'arbre), comme pour la commande cd.
/repA/repB/nomfich (adresse absolue)
Le / au tout début indique qu'on part de la racine de l'arborescence des fichiers. L'adresse se lit comme ceci: fichier de nom "nomfich", rangé dans le répertoire de nom "repB", rangé à son tour dans le répertoire de nom "repA", qu'on trouve à la racine ("/") de l'arbre des fichiers. L'adresse indique le chemin complet à suivre pour trouver le fichier.
protocole://ordinateur/repA/repB/nomfich (adresse universelle)
Cette forme, qu'on appelle Uniform Resource Locator (URL) en Anglais, est la plus générale: elle indique quel "protocole" réseau utiliser pour demander à un "ordinateur" sur internet le fichier "nomfich" se trouvant dans "repB" qui à son tour se trouve dans "repA". Les commandes UNIX de base ne comprennent en général pas cette forme, mais les navigateurs la comprennent. Les protocoles les plus courants sont le HTTP, le FTP et le SSH, mais il en existe une floppée d'autres (SAMBA, RTSP, MMS,...).

Les exemples ci-dessus parlent d'adresses de fichiers, mais il en va de même pour les répertoires. Où qu'on soit, un cd /home/login/TD2 nous placera donc dans le répertoire TD2. De même, partant de /home/login/TD2, un cd ../TD3 remontera d'un niveau (dans /home/login) pour redescendre aussitôt dans TD3 (pwd nous indiquera alors /home/login/TD3)

Liste des fichiers et répertoires

Pour obtenir la liste des fichiers présents dans le directory courant, utilisez la commande ls (liste). Avec l'option -l (liste longue), la commande ls -l affiche des informations relatives aux fichiers telles que la taille du fichier, sa date de création etc...

Créer un répertoire

Pour créer un directory, on utilise la commande mkdir:

ordi:~ > mkdir nouveaudir # crée un répertoire de nom "nouveaudir"

Supprimer fichiers et répertoires

La commande pour supprimer un fichier est rm nomdufichier, celle pour supprimer un répertoire vide est rmdir nomdudirectory. Avant de pouvoir effacer un répertoire, il faut donc l'avoir vidé de tout son contenu (fichiers et sous-répertoires).

Fichiers

Toutes les informations stockées sur le disque dur sont dans des fichiers. On peut distinguer plusieurs types de fichiers (même si pour l'ordinateur, tout fichier n'est qu'une suite de nombres):

Fichiers texte
Ces fichiers sont modifiables à l'aide d'un éditeur de texte (emacs, nedit, kwrite,...). Le code source d'un programme (C, Fortran, shell, PostScript, ...) fait partie de cette catégorie. La correspondance entre les caractères du texte qu'on tape au clavier et les nombres que l'ordinateur écrit sur le disque dur s'appelle le codage (presque partout, le A majuscule correspond par exemple au numéro 65; voir man ascii et man iso_8859-1).
Fichiers executables/binaires
Ce sont des fichiers qui contiennent des instructions que l'ordinateur peut comprendre directement. C'est le cas du résultat de la compilation d'un programme en C. Ces fichiers sont en général complètement illisibles pour un humain (voir p.ex. avec less /bin/sh). On peut les executer en tapant le nom du fichier en adressage relatif (p.ex. ./mon_prog) ou absolu (p.ex. /home/login/TD2/mon_prog) dans un shell.
Fichiers images, son, video, présentations, PDF, ...
Les autres fichiers représentent des données selon un codage adapté. Pour ouvrir ces fichiers, il faut un programme spécialisé. Si le format est documenté et son utilisation pas trop restreinte légalement (brevets,...), on a souvent plusieurs choix comme pour les fichiers texte. C'est le cas pour beaucoup de formats d'image et de son. Dans le cas de formats secrets ou brevetés, il faut nécessairement le programme de l'inventeur du format.

Les noms de fichier

Les noms de fichier peuvent contenir les caractères accessibles au clavier, sauf '/'. Mieux vaut n'utiliser que des lettres et les chiffres, car certains autres caractères comme * ? # { } ... ont des significations spéciales pour le shell (voir plus bas), qui risque de mal interprêter vos commandes.

Comme pour les directories, un choix judicieux des noms de fichiers permet de s'y retrouver plus facilement. De plus, il est souvent utile d'ajouter une "extension" à un nom de fichier, qui indique le type du fichier. L'extension consiste en un point suivi de quelques (1-4) caractères. Voici quelques exemples d'extensions pour un fichier que l'on appellera nomfichier :

nomfichier.txt
un fichier texte (texte)
nomfichier.ps
un fichier PostScript (langage graphique pour imprimantes) (texte, visualisé avec gv ou ghostview)
nomfichier.c
un fichier source en langage C (texte)
nomfichier.f
un fichier source en langage FORTRAN 77 (texte)
nomfichier.java
un fichier source en langage Java (texte)
nomfichier.jpg
un fichier image au format JPG (binaire, visualisé avec kview ou gimp)
nomfichier.ogg
un fichier son au format OGG (binaire, écouter avec xmms)
nomfichier.html
un fichier au format HTML (langage pour les pages WEB) (texte, visualisé avec mozilla)
nomfichier.gz
un fichier compressé avec gzip (binaire, décompresser avec gunzip)
nomfichier.tar
un fichier archivé avec tar (binaire)
nomfichier.o
un fichier objet (binaire)
Nota bene: personne ne vous oblige à utiliser des extensions; vous avez même parfaitement le droit de nommer un fichier source en langage C "nomfichier.jpg". Mais utiliser les extensions est une bonne idée si on veut savoir de quoi il s'agit en retombant sur les fichiers quelques semaines plus tard. De plus, les systèmes opérationnels usités (Linux, MacOS, M$-Windows) vous proposent des programmes adaptés si vous avez utilisé une extension courante.

Caractères spéciaux

Pour la plupart des commandes agissant sur des fichiers, il est possible de traiter plusieurs fichiers simultanément grace à des caractères spéciaux:

?
représente n'importe quel caractère
*
représente n'importe quelle suite de caractères
[abcd]
représente n'importe quel caractère parmis ceux entre crochets
[^abcd]
représente n'importe quel caractère excepté ceux entre crochets

Ainsi

Le shell interprète ces caractères spéciaux et passe à la commande la liste des fichiers trouvés. Par exemple

ordi:~ > ls toto*

est remplacé par

ordi:~ > ls toto1 toto2 toton

Vous pouvez tester tout cela avec la commande ls nomfichier. Certaines commandes n'acceptent qu'un nombre limité d'arguments et ne fonctionnent donc pas avec ce type de caractères spéciaux.

Commandes sur les fichiers

Copier un fichier

Pour copier un fichier, on utilise la commande cp (pour copy). Sa syntaxe est

ordi:~ > cp source destination

"source" doit être un nom de fichier valable, avec son chemin s'il n'est pas dans le répertoire courant. "destination" doit être soit un nom de fichier, soit un répertoire. Dans ce dernier cas, le nom du fichier est le même que le nom du fichier source. Sinon le fichier est également renommé au passage. Si le fichier "destination" existe déjà, il sera détruit !

Déplacer un fichier

La commande pour déplacer un fichier est mv (pour move). Il s'utilise exactement de la même manière que cp, la différence étant que le "source" n'existe plus à la fin.

ordi:~ > mv source destination

Renommer un fichier

Renommer un fichier n'est qu'un cas particulier où on utilise mv avec un autre nom pour la destination que pour la source. Il n'y a donc pas de nouvelle commande.

Auteur(s) : O. Ronsin, A. Daerr. Dernière modification : Tue Nov 21 01:36:52 2006. [validate XHTML]