Il existe trois types de fichier, le fichier qu'on pourrait qualifié de normal, le répertoire ou catalogue (en anglais directory) et les fichiers spéciaux.
Un fichier normal contient des données, ce fichier peut être lisible, c'est à dire contenir des informations compréhensibles écrites en claire, ce fichier peut être aussi totalement illisible. Concrètement un fichier texte qui comme son nom l'indique contient du texte est lisible, alors qu'un exécutable ne l'est pas, si vous cherchez à l'éditer vous ne verrez rien de compréhensible, dans ce dernier cas, on dit aussi qu'on a affaire à un fichier binaire.
Un répertoire peut être considéré comme un classeur, dans lequel on met des fichiers, c'est un élément d'organisation de l'espace du disque dur. Les fichiers ayant les mêmes " affinités " peuvent ranger sous un même répertoire, de même on peut trouver des sous répertoires dans un répertoire, qui eux mêmes contiennent des fichiers et d'autres sous répertoires. Ce système hiérarchique fait penser à un arbre, d'où le terme d'arborescence.
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| /-| |-------| | | | | |----------olivier----linux | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Il existe un " ancêtre " à tous les répertoires, c'est la racine ou le / (slash) sur le shéma. Tout répertoire, qui n'est pas la racine elle même, possède un répertoire qui le contient (appelé répertoire père) et peut posséder des sous-répertoires (répertoires fils) et des fichiers .
Quand on crée un répertoire, le système crée automatiquement deux " fichiers " sous le répertoire, le premier est un " . ", qui représente le répertoire lui-même, le deuxième est un " .. " qui représente le répertoire père.
Le troisième type de fichier est le fichier dit spécial, qu'on a abordé brièvement auparavant, rappelons que l'on doit passer par eux si on veut dialoguer avec un périphérique matériel.
Tout fichier, qu'elle que soit son type, doit pouvoir être identifié, c'est pourquoi on les nomme avec un nom en rapport avec le fichier. Ce nom comporte au maximum 255 caractères, sachant qu'il existe une distinction entre les lettres minuscules et majuscules, et que certains caractères sont interdits, ce sont par exemple le /, les parenthèses (), l'espace ou *.
Ce fichier est rangé dans un répertoire du système de fichiers, on doit pouvoir y accéder, en suivant un chemin dans l'arborescence.
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| /-| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Pour indiquer le chemin du fichier (HOW-TOppp dans notre exemple), on part de la racine (/), on indique le premier répertoire traversé, puis les autres, en séparant chacun des répertoires d'un /. Ainsi donc pour notre fichier le chemin d'accès est :
/home/olivier/linux
En indiquant /home/olivier/linux/HOW-TOppp le fichier est parfaitement identifié, en effet on sait où le trouver puisqu'on a son chemin, et le nom du fichier HOW-TOppp.
A noter qu'on peut avoir des fichiers portant le même nom dans le système de fichiers dés lors qu'ils n'ont pas le même chemin, et donc qu'ils ne se trouvent pas au même endroit.
On dit que le chemin du fichier est absolu parce qu'à la vue de son chemin d'accès, en partant de la racine, on sait exactement où se trouve le fichier.
Un chemin est dit relatif, quand il n'est pas nécessaire, d'indiquer le chemin complet, de l'endroit où on se trouve dans l'arborescence il suffit de rajouter le chemin par rapport à ce même endroit.
En admettant qu'on se trouve sous /home/olivier, si l'on veut accéder à notre fichier HOW-TOppp, le chemin relatif au répertoire courant est ./linux, le point représentant le répertoire courant comme on l'a vu auparavant. Ce qui donne en chemin absolu /home/olivier/linux.
La commande pour se déplacer dans l'arborescence est cd. Si l'on est au niveau de la racine, pour aller à notre répertoire /home/olivier/linux on doit taper :
cd /home/olivier/linux
On a tapé un chemin absolu, on se trouve maintenant sous /home/olivier/linux, si l'on veut aller sous /home/olivier, on doit taper :
cd ..
En effet .. représente le répertoire père, /home/olivier étant le répertoire père de /home/oliver/linux, en tapant cette commande, on se retrouve à l'endroit désiré.
Si vous voulez connaître ou vous vous trouvez, vous disposez de la commande pwd, ainsi si vous tapez pwd juste après la séquence de commandes précédentes, vous obtenez :
/home/olivier
La commande ls permet de visualiser le contenu de répertoires, vous voyez les noms des fichiers présents sous le répertoire.
|--------- lib ----- X11 | | | |------- X11R5 |-------------usr | | | | | |------------src --- samba | | | |----- Xaw |-------| /-| |-------| | | | | |----------olivier----linux----HOW-TOppp | | | |-----Readme | | | | | |-------temp |-------------home | | |----------marcel---- mail | |------- doc
Si vous allez sous /home/olivier/linux (commande cd /home/olivier/linux), si vous voulez visualiser les fichiers contenus, vous tapez ls, vous obtenez :
HOW-TOppp Readme
La commande ls peut être utilisée avec des options, si précédemment vous aviez tapez ls -l, vous auriez obtenu:
-rw-rw-rw- 1 olivier users 17356 Dec 3 12:11 HOW-TOppp -rw-r--r-- 1 olivier users 7432 Nov 21 02:21 Readme
La signification des champs est la suivante:
-rw-rw-rw- type de fichier et ses caractéristiques de protection
1 le nombre de lien
olivier le nom du propriétaire
users le groupe d'utilisateurs auquel appartient le propriétaire
17356 la taille du fichier (en octets)
Dec 3 le jour de dernière modification
12 :11 l'heure de dernière modification
HOW-TOppp le nom du fichier
Pour avoir ces informations uniquement d'un fichier, vous taperez :
ls -l nom-du-fichier
A noter que sur beaucoup de système la commande ll est équivalent à ls -l.
Pour gérer les répertoires, vous disposez des commandes suivantes :
mkdir nom-de-répertoire Création d'un répertoire
rmdir nom-de-répertoire Suppression d'un répertoire vide
mv répertoire répertoire-d'accueil déplacement d'un répertoire
mv répertoire nouveau-nom Changement de nom d'un répertoire
Pour gérer les fichiers vous disposez des commandes suivantes:
touch mon-fichier création d'un fichier vide,
more mon-fichier visualisation d'un fichier page à page,
rm mon-fichier suppression d'un fichier,
mv mon-fichier répertoire d'accueil déplacement d'un fichier,
mv mon-fichier nouveau-nom changement de nom d'un fichier,
cp nom-fichier répertoire-d'accueil/autre-nom copie de fichier,
file mon-fichier
pour savoir si on a un fichier binaire (exécutable) ou
un fichier texte. On obtient pour un fichier texte, comme sortie mon-fichier
: ascii text.
Dans l'arborescence UNIX en tapant la commande ls -l on peut rencontrer cette syntaxe un peu particulière.
lrwxrwxrwx 1 root root 14 Aug 1 01:58 Mail -> ../../bin/mail*
Ca signifie que le fichier Mail pointe vers le fichier mail qui se trouve dans le répertoire /bin, en d'autres termes Mail est un lien vers le fichier mail.
Un lien est créé pour pouvoir accèder au même fichier à différents endroits de l'arborescence. Sous Windows on retrouve à peu près l'équivalent avec la notion de raccourci.
La commande ln (pour link) sert à créer des liens. Par exemple:
ln -s /home/olivier/linux/readme /tmp/lisezmoi
Le fichier source est readme sous /home/olivier/linux, le lien créé est lisezmoi sous /tmp. En faisant un man ln, vous découvrirez qu'il existe des liens hards et softs, sans rentrer dans les détails, je vous conseille dans un premier temps de vous limiter aux liens softs (option -s) car les liens hards ne permettents pas de visualiser directement le lien (la petite flèche -> quand on tape ls -l).
Sous un système UNIX, un fichier quel que soit son type est identifié par un numéro appelé numéro d'inode, qu'on pourrait traduire en français par "i-noeud". Ainsi derrière la façade du shell, un répertoire n'est qu'un fichier, identifié aussi par un inode, contenant une liste d'inode représentant chacun un fichier.
La différence entre un lien hard et symbolique se trouve au niveau de l'inode, un lien hard n'a pas d'inode propre, il a l'inode du fichier vers lequel il pointe. Par contre un lien symbolique possède sa propre inode. A noter que vous ne pouvez pas créer de liens hards entre deux partitions de disque différente, vous n'avez pas cette contrainte avec les liens symboliques.
Pour connaître le numéro d'inode d'un fichier, vous pouvez taper:
ls -i mon-fichier
Si vous êtes à la recherche d'un fichier qui commence par la lettre a, en faisant ls, vous voudriez voir que les fichiers commençant par a. De même si vous voulez appliquer une commande à certains fichiers mais pas à d'autres. C'est le but des métacaractères, ils vous permettent de faire une sélection de fichiers suivant certains critères.
Le métacaractère le plus fréquemment utilisé est *, il remplace une chaîne de longueur non définie. Avec le critère *, vous sélectionnez tous les fichiers. Par le critère a*, vous sélectionnez tous les fichiers commençant par a.
ls a*
Va lister que les fichiers commençant par a. De même *a opère une sélection des noms de fichiers se terminant par a. Le critère *a* va faire une sélection sur les noms de fichiers qui ont le caractère a dans leur nom, quelque soit sa place.
Le métacaractère ? remplace un caractère unique. Avec le critère a??, vous sélectionnez les fichiers dont le nom commence par a, mais qui contiennent au total trois caractères, exactement.
Les métacaractères [ ] représente une série de caractères. Le critère [aA]* permet la sélection des fichiers dont le nom commence par un a ou A (minuscule ou majuscule). Le critère [a-d]* fait la sélection des fichiers dont le nom commence par a jusqu'à d. Le critère *[de] fait la sélection des fichiers dont le nom se termine par d ou e.
Vous voyez donc que les caractères [],* et ? sont des caractères spéciaux, qu'on ne peut utiliser comme des simples caractères, parce qu'ils sont interprétés par le shell, comme des métacaractères. Vous pouvez cependant inhiber leur fonctionnement. En tapant :
ls mon-fichier?
Le shell va interpréter le ? comme un métacaractère et afficher tous les fichiers qui commencent par mon-fichier et qui se termine par un caractère unique quelconque. Si vous ne voulez pas que le ? soit interprété vous devez taper.
ls mon-fichier\ ?