Système de fichiers
Présentation des concepts et commandes relatifs au système de fichiers : la base incontournable pour comprendre la suite.
La commande ls liste les entrées du répertoire courant :
$ ls
Bureau Documents Images Modèles Musique Public Téléchargements Vidéos
1. Arborescence standard Unix
Voici à quoi ressemble l’arborescence de répertoires typique d’un système Unix :
/
├── bin
├── boot
├── dev
├── etc
├── home
│ ├── linus
│ ├── ken
│ ├── richard
│ └── jacquelin
├── lib
├── mnt
├── root
├── sbin
├── tmp
├── usr
│ ├── bin
│ ├── lib
│ ├── local
│ │ ├── bin
│ │ ├── etc
│ │ ├── lib
│ │ ├── sbin
│ ├── sbin
│ └── tmp
└── var
├── lib
├── log
└── tmp
L’arborescence ci-dessus peut être un assemblage de plusieurs partitions. Cet assemblage est invisible à ce niveau de représentation.
2. Répertoire courant
Le répertoire courant est le répertoire dans lequel on se trouve à l’instant présent.
On le consulte avec pwd (print working directory) et on le modifie avec cd (change directory).
$ pwd # indique le répertoire courant
/home/jacquelin
$ ls
Bureau Documents Images Modèles Musique Public Téléchargements Vidéos
$ cd / # change de répertoire courant
$ pwd
/
$ ls
boot bin etc dev lib home mnt root sbin tmp usr var
$ cd # on revient chez soi
$ pwd
/home/jacquelin
$ ls
Bureau Documents Images Modèles Musique Public Téléchargements Vidéos
| Si l’on ouvre plusieurs instances de terminal, alors chacune d’elles possède son répertoire courant. |
3. Nommage des entrées
Une entrée peut être identifiée de façon absolue, ou bien relativement au répertoire courant.
3.1. Nom absolu
Le nom absolu d’une entrée la référence depuis la racine du système de fichiers.
Ce nom énumére les répertoires qui mènent à elle depuis /.
Le nom absolu commence donc toujours par /.
Par exemple :
/etc
/etc/passwd
/etc/absent
/usr/include
/var/log/wtmp
3.2. Nom relatif
Le nom relatif d’une entrée la référence par rapport au répertoire courant.
Par exemple, si le répertoire courant est /etc, alors l’entrée /etc/passwd peut simplement être référencée passwd.
. symbolise le répertoire courant,
.. le répertoire parent du répertoire courant,
et ~ le répertoire personnel de l’utilisateur (son homedir).
Par exemple, si le répertoire courant est /usr/bin, alors :
-
gccsignifie/usr/bin/gcc -
.signifie/usr/bin -
..signifie/usr
De même, si le répertoire courant est /usr, alors :
-
bin/gccsignifie/usr/bin/gcc -
.signifie/usr -
..signifie/ -
../libsignifie/lib
3.3. Nom générique
Dans le nom d’une entrée, le caractère * représente n’importe quelle suite de caractères.
Par exemple, /etc/a* représente toutes les entrées du répertoire /etc dont le nom commence par a.
De même, le caractère ? représente n’importe quel caractère unique.
Par exemple, abcd? représente toutes les entrées
dont le nom comporte 5 caractères commençant par abcd.
4. Gestion des entrées
cp (copy), mv (move) et rm (remove) respectivement copie, renomme/déplace et efface des entrées.
Exemple :
$ cp src dst # copie d'un fichier (1)
$ cp src dst/ # copie d'un fichier dans un répertoire (2)
$ cp src1 src2 dst/ # copie de 2 fichiers dans un répertoire
$ cp -r src/ dst/ # copie d'une arborescence
| 1 | le fichier créé est dst |
| 2 | le fichier créé est dst/src |
$ mv src dst # renomme une entrée
$ mv src dst/ # déplace src dans dst/
$ mv src1 src2 dst/ # déplace src1 et src2 dans dst/
$ rm f1 f2 f3 # efface 3 fichiers
$ rm -r dir/ # efface une arborescence
$ rm -r * # efface (presque) tout le contenu du répertoire courant
Ce qui est effacé est immédiatement et irrémédiablement perdu (pas de corbeille).
Donc bien réfléchir avant de faire rm, et encore plus avant rm -r.
|
4.1. Fichiers
-
cataffiche le contenu d’un ou plusieurs fichiers -
more(commande historique) etlessaffichent le contenu de fichiers page par page
4.2. Répertoires
-
mkdir(make directory) etrmdir(remove directory) respectivement créent et effacent des répertoires -
du(disk usage) liste les répertoires d’une arborescence et leurs tailles
4.3. Liens symboliques (symlink)
Un lien symbolique est une entrée qui pointe vers une autre entrée.
Il est créé avec la commande ln (link) et l’option -s :
# /tmp/passwd n'existe pas
$ ll /tmp/passwd
ls: cannot access '/tmp/passwd': No such file or directory
# création d'un lien nommé /tmp/passwd vers /etc/passwd
$ ln -s /etc/passwd /tmp
# /tmp/passwd existe maintenant
$ ll /tmp/passwd
lrwxrwxrwx 1 jaclin jaclin 11 20 nov. 17:50 /tmp/passwd -> /etc/passwd
5. La commande find
La commande find effectue des recherches multi-critères sur le système de fichiers.
C’est une commande indispensable, ne serait-ce que pour retrouver des fichiers perdus.
Quelques exemples :
-
rechercher les entrées dont le nom contient
bash(dans le homedir) :$ find ~ -name '*bash*' -
rechercher les entrées nommées
libsur tout le filesystem :$ find / -name libCette commande affiche un message d’erreur à chaque fois qu’un accès est refusé, ce qui est désagréable pour voir le résultat. Pour faire disparaitre ces messages d’erreur :
$ find / -name lib 2>/dev/null -
rechercher les fichiers de
bill:$ find / -type f -user bill 2>/dev/null -
rechercher les répertoires modifiés il y a moins d’une heure sur son espace personnel :
$ find ~ -type d -mtime -1 -
effacer tous les fichiers
*.bakde son espace personnel :$ find ~ -name '*.bak' -delete -
recopier tous les fichiers
*.jpgsitués sous/usrdans~/Images:$ find /usr -name '*.jpg' -exec cp {} ~/Images/ \;
6. Attributs
ls -l (alias ll) visualise les attributs d’une entrée :
$ ll ~/.bashrc
-rw-r--r-- 1 linus users 619 1 janv. 22:12 /home/linus/.bashrc
Le champ :
-
#3 (ici
linus) est le propriétaire -
#4 (ici
users) est le groupe -
#5 (ici
619) est la taille (en nombre de caractères) -
#6 (ici
1 janv. 22:12) est le moment de la dernière modification
Le champ #1 (les 10 premiers caractères, ici -rw-r—r--) précise le type de l’entrée (le premier caractère)
et son mode (les 9 caractères suivants).
6.1. Type d’entrée
Chaque entrée possède un type,
que l’on peut identifier via le premier caractère de la ligne renvoyée par la commande ls -l,
et dont les correspondances pour les types usuels sont :
-
un
-pour un fichier standard :
$ ls -l ~/.bashrc
-rw-r--r-- 1 jaclin jaclin 619 1 janv. 22:12 /home/jaclin/.bashrc
-
un
dpour un répertoire (directory) :
$ ls -ld /tmp
drwxrwxrwt 50 root root 1360 8 avril 09:40 /tmp
-
un
lpour un lien symbolique :
$ ls -ld /bin
lrwxrwxrwx 1 root root 7 17 juil. 2024 /bin -> usr/bin
6.2. Le mode
Le mode d’une entrée contrôle son accès.
Il fixe ce que l’on peut faire de cette entrée
(lire son contenu, le modifier, etc.)
et qui peut
le faire.
Il est représenté par les 9 caractères suivant le type sur la ligne renvoyée par ll.
Par exemple :
$ ll ~/.bashrc
-rw-r--r-- 1 jaclin jaclin 619 1 janv. 22:12 .bashrc
le mode du fichier .bashrc est rw-r--r--.
Les autorisations sont définis indépendamment pour le propriétaire, le groupe et tous les autres utilisateurs. Plus précisément, sur ces 9 caractères,
-
les 3 premiers spécifient les permissions accordées au propriétaire,
-
les 3 suivantes les permissions accordées à son groupe, et
-
les 3 derniers les permissions accordées aux autres.
Parmi ces 9 caractères :
-
un
r(read) signifie que la lecture est autorisée, -
un
w(write) signifie que l’écriture est autorisée, -
pour un fichier, un
xsignifie que le fichier est exécutable, et pour un répertoire, que le répertoire est traversable, -
un
-signifie que la permission n’est pas accordée.
Exemples :
-
r--r--r--indique que l’entrée est lisible par tout le monde et modifiable par personne -
rw-r-----indique que l’entrée est lisible par son propriétaire et son groupe, et que le propriétaire peut la modifier -
rwxr-xr-xindique que l’entrée est lisible et exécutable (ou traversable) par tout le monde, et modifiable par son propriétaire.
En interne, le mode est un entier de 3 chiffres compris entre 0 et 7. Exprimé en binaire, chaque chiffre vaut 1 si la permission est accordée, 0 sinon. Par exemple :
-
rwxcorrespond à 111 donc 7 -
---correspond à 000 donc 0 -
rw-correspond à 110 donc 6 -
r-xcorrespond à 101 donc 5
Ainsi :
-
rwxr-x---correspond à 750 -
rw-r--r--correspond à 644 -
rwxrwxrwxcorrespond à 777
La commande chmod (change mode) permet de modifier le mode.
Exemple :
# on crée 2 fichiers et 1 répertoire
$ touch /tmp/mon_fichier /tmp/mon_script # crée 2 fichiers vides
$ mkdir /tmp/mon_dossier
# on modifie le mode du répertoire
$ ll -d /tmp/mon_dossier
rwxr-xr-x 2 jaclin jaclin 40 13 févr. 17:57 /tmp/mon_dossier/
$ chmod 750 /tmp/mon_dossier
$ ll -d /tmp/mon_dossier
-rwxr-x--- 1 jaclin jaclin 0 13 févr. 17:57 /tmp/mon_dossier
# on modifie le mode de mon_fichier
$ ll /tmp/mon_fichier
-rw-r--r-- 1 jaclin jaclin 0 13 févr. 17:57 /tmp/mon_fichier
$ chmod 640 /tmp/mon_fichier
$ ll /tmp/mon_fichier
-rw-r----- 1 jaclin jaclin 0 13 févr. 17:57 /tmp/mon_fichier
# pour mon_script, on ajoute le droit `x` à tous
$ ll /tmp/mon_script
-rw-r--r-- 1 jaclin jaclin 0 13 févr. 17:57 /tmp/mon_script
$ chmod +x /tmp/mon_script # ajout du droit d'exécution à tous
$ ll /tmp/mon_script
-rwxr-xr-x 1 jaclin jaclin 0 13 févr. 17:57 /tmp/mon_script
- Résumé
-
-
commandes à retenir :
cdetpwd---lsetcat---cp,mvetrm---mkdiretrmdir -
autres commandes utiles :
ll,less,find,chmodetln
-