Cette fiche reprend les notions vues lors du CTP n°2. Vous retrouverez synthétisées sur cette page les différentes commandes utilisées, leur intérêt et comment nous avons pu les utiliser lors des manipulations sur ordinateur.
Table des matières
<aside> <img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Le système de fichiers Linux
Le système de fichiers Linux est une arborescence ou une hiérarchie de fichiers et de répertoires. Le répertoire racine est / et tous les autres répertoires sont des sous-répertoires de celui-ci. Les répertoires sont séparés par des / et les fichiers sont des noms de fichiers.
Quand vous lancez un shell (i.e. ouvrez un terminal), celui-ci se trouve dans un répertoire. Ce répertoire est appelé votre répertoire courant ou répertoire de travail.
Un système Linux typique comporte des dizaines de milliers de répertoires système et de fichiers. La plupart de ces répertoires et fichiers sont cachés et ne sont pas visibles par défaut. Ces fichiers et répertoires cachés sont utilisés par le système d'exploitation pour stocker des informations de configuration et d'autres informations système.
Les sous-répertoires de la racine sont généralement réservés aux fichiers système. Les répertoires /home et /tmp sont utilisés pour stocker des fichiers temporaires et des fichiers personnels.
À moins d'être un administrateur système, vous n'avez pas besoin de vous soucier de la plupart des fichiers et répertoires système. Toutefois il est important de comprendre comment les répertoires et les fichiers sont organisés afin de pouvoir naviguer dans le système de fichiers et de pouvoir trouver les fichiers dont vous avez besoin.
Le tableau suivant décrit le contenu des principaux répertoires du système de fichiers Linux.
| Répertoire | Description |
|---|---|
/ |
Répertoire racine. Tous les autres répertoires sont des sous-répertoires de celui-ci. |
/bin |
Contient les programmes essentiels au fonctionnement du système. |
/boot |
Contient les fichiers nécessaires au démarrage du système. |
/dev |
Contient les fichiers représentant les périphériques. |
/etc |
Contient les fichiers de configuration du système. |
/home |
Contient les répertoires personnels des utilisateurs. |
/lib |
Contient les bibliothèques partagées et les modules du noyau. |
/media |
Contient les points de montage des périphériques amovibles. |
/mnt |
Contient les points de montage des systèmes de fichiers temporaires. |
/opt |
Contient les logiciels additionnels. |
/proc |
Contient les informations sur les processus et le système. |
/root |
Répertoire personnel de l'administrateur. |
/run |
Contient les fichiers d'exécution des applications. |
/sbin |
Contient les programmes essentiels au fonctionnement du système. |
/srv |
Contient les données des services fournis par le système. |
/sys |
Contient les informations sur les périphériques. |
/tmp |
Contient les fichiers temporaires. |
/usr |
Contient les programmes, les bibliothèques et les fichiers de configuration. |
/var |
Contient les fichiers variables comme les logs, les mails, les bases de données, etc. |
/lost+found |
Contient les fichiers récupérés lors d'un crash du système. |
| </aside> |
<aside>
<img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Commande id et fichier /etc/passwd
En entrant la commande id dans le Shell, on obtient un affichage de cette forme :
$ id
uid=1000(debian) gid=1000(debian) groups=1000(debian),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(netdev),114(lpadmin),117(scanner)
Cette commande affiche les informations de l’utilisateur connecté : l’identifiant de l’utilisateur (uid) suivi du nom d’utilisateur, l’identifiant du groupe de l’utilisateur (gid) suivi de son nom et les identifiants des groupes supplémentaires de l’utilisateur (groups).
En rajoutant l’argument root après la commande id, alors on affiche les informations du super-utilisateur root : ce dernier possède un UID spécial (0) et a la possibilité de réaliser toutes les actions et modifications possibles sur le système.
Intéressons-nous désormais au fichier /etc/passwd en affichant son contenu via la commande cat : ce dernier stocke et répertorie tous les attributs utilisateur de base. Chaque ligne représente un utilisateur et est de la forme suivante : Nom**:**MotdePasse**:**UserID**:**PrincipleGroup**:**Gecos**:**HomeDirectory**:**Shell
/etc/passwd
</aside><aside> <img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Protection des fichiers
Un système Linux peut permettre à de nombreux utilisateurs d'accéder aux fichiers et aux répertoires. Pour protéger les fichiers et les répertoires, Linux utilise un système de permissions. Les permissions sont des droits d'accès aux fichiers et aux répertoires. Les permissions sont associées à des utilisateurs et à des groupes. Les utilisateurs sont des personnes qui ont un compte sur le système.
Pour les fichiers normaux, les permissions sont associées à trois catégories d'utilisateurs : le propriétaire du fichier (généralement celui qui a crée le fichier), le groupe propriétaire du fichier et les autres utilisateurs.
Les catégories de permissions pour un fichier sont les suivantes :
r: permet de lire le contenu du fichier.w: permet de modifier le contenu du fichier.x: permet d'exécuter le fichier (si c'est un programme ou un script).L'option -l de la commande ls affiche les méta-données associées à un fichier, son nom, sa taille, son propriétaire, son groupe, ... et en particulier ses permissions, par exemple :
$ ls -l fichier
-rw-r--r-- 1 user group 0 2019-09-09 10:00 fichier
La chaîne -rw-r--r-- représente les permissions associées au fichier. Le premier caractère désigne le type du fichier, les trois suivants représentent les permissions du propriétaire, les trois suivants celles du groupe propriétaire et les trois derniers celles des autres utilisateurs. Les permissions sont représentées par les caractères r, w et x pour les permissions respectivement en lecture, écriture et exécution. Si la permission n'est pas accordée, le caractère - est utilisé à la place.
Les permissions peuvent être représentées par des chiffres (représentation en octal) ou des lettres (représentation symbolique).
Le tableau suivant donne la correspondance entre les deux représentations :
| Chiffre | Lettre | Description |
|---|---|---|
| 0 | --- |
Aucune permission |
| 1 | --x |
Exécution |
| 2 | -w- |
Écriture |
| 3 | -wx |
Écriture et exécution |
| 4 | r-- |
Lecture |
| 5 | r-x |
Lecture et exécution |
| 6 | rw- |
Lecture et écriture |
| 7 | rwx |
Lecture, écriture et exécution |
<aside> <img src="/icons/compose_green.svg" alt="/icons/compose_green.svg" width="40px" /> Exemple
C'est-à-dire que pour la chaîne -rw-r--r-- les permissions sont les suivantes :
| Utilisateur | Groupe | Autres | |
|---|---|---|---|
| symbolique | rw- |
r-- |
r-- |
| binaire | 110 | 100 | 100 |
| octale | 6 | 4 | 4 |
| </aside> |
</aside>
<aside> <img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Permissions associées aux répertoires
Un répertoire est une table de noms de fichiers associés à un numéro d'index appelé numéro d'inode qui permet de connaître les informations (contenues dans l'inode) concernant ce fichier (taille, permissions, horodatage, où trouver le contenu du fichier, ...).
Dans un répertoire, les permissions ne sont pas associées aux fichiers mais au répertoire lui-même. Les permissions associées à un répertoire sont :
r: permet de lister le contenu du répertoire.w: permet de modifier le contenu du répertoire (créer ou supprimer des fichiers).x: permet d'ouvrir le répertoire (avec la commande cd par exemple).En retirant certaines permissions, alors on ne pourra pas appliquer certaines commandes élémentaires sur les répertoires (cd, ls, cat…)
<aside> <img src="/icons/compose_green.svg" alt="/icons/compose_green.svg" width="40px" /> Exemple
On crée un répertoire dir1 ainsi que deux fichiers vides test1 et test2 dans ce dernier :
$ mkdir dir1
$ touch dir1/file1
$ mkdir dir1/dir2
On retire toutes les permissions sauf r à dir1 :
$ chmod a=r dir1
Dès lors que j’essaye de l’ouvrir ou de changer de répertoire courant pour celui-ci, alors on obtient :
$ cd dir1
bash: cd: dir1: Permission denied
</aside>
</aside>
<aside> <img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Interpréter les permissions associées à un fichier / répertoire
Imaginons que l’on a un répertoire exo2 et un fichier fichier_exo2 dans notre répertoire courant. Affichons les permissions associées :
$ ls -ld exo2
drwxr-xr-x 2 debian debian 4096 Sep 14 01:46 exo2
$ ls -ld fichier_exo2
-rw-r--r-- 1 debian debian 0 Sep 14 01:46 fichier_exo2
Première distinction que l’on peut remarquer, lorsque l’on observe les permissions d’un répertoire alors la première lettre qui apparaît dans la chaîne associée aux permissions est un d, si l’on regarde un fichier alors on a simplement un - à l’affichage pour la première lettre.
Ensuite, on va chercher à interpréter le reste des lettres par paquets de 3, on a donc isolé 3 paquets de 3 lettres : chaque paquet possède au mieux les trois lettres rwx toujours positionnées dans cet ordre. Une fois cela fait, on peut interpréter aisément les permissions selon les informations fournies dans la partie Protection des fichiers sans oublier que l’on peut utiliser la représentation octale : chaque groupe de 3 lettres forme un nombre binaire (1 s’il y a une lettres, 0 sinon) que l’on peut convertir en octal pour obtenir un chiffre simple, donnant à la fin un nombre à 3 chiffres pour résumer toutes les permissions associées à un fichier.
<aside> <img src="/icons/compose_green.svg" alt="/icons/compose_green.svg" width="40px" /> Exemple
</aside>
</aside>
<aside> <img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Modifier des permissions associées à un fichier / répertoire
</aside>
<aside> <img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Permissions par défaut
</aside>