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 :
.
désigne le répertoire lui-même...
désigne le père du répertoire.
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
.
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.
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.
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 :
mv *.c *.bak
, car le shell va
passer à
mv
les arguments foo.c bar.c foo.bak bar.bak
, et
mv
ne sait pas quel fichier remplacer.
rm * ~
, le shell remplace
l'étoile par la liste des fichiers présents, et ils seront tous effacés. Si
vous tapez rm *~
, seuls les fichiers dont le nom finit par un
tilde seront effacés.
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).