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.
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
".
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
.
" et "..
"Il existe deux répertoires très particuliers dans tous les répertoires (ils sont créés avec le répertoire):
.
' , qui représente le répertoire courant...
' , qui représente le répertoire parent./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 ??
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)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)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
/
(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)/
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)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
)
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...
Pour créer un directory, on utilise la commande mkdir
:
ordi:~ > mkdir nouveaudir # crée un répertoire de nom "nouveaudir"
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).
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):
man ascii
et man iso_8859-1
).
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.
* ? # { }
...
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
:
Pour la plupart des commandes agissant sur des fichiers, il est possible de traiter plusieurs fichiers simultanément grace à des caractères spéciaux:
Ainsi
*.txt
représente tous les fichiers qui se terminent
par .txt
comme
fichier.txt toto1.txt toto2.txt test.txt
toto*
représente tous les fichiers qui commencent par
toto
comme
toto1.txt toto2.txt totobis toto2.F
toto?
représente tous les fichiers qui commencent par
toto
et ont un (seul) caractère ensuite, comme
toto1 toto2 toton
*t*
représente tous les fichiers contenant le caractère
t
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.
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 !
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 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.