1. Introduction

Rappel des commandes rencontrées et de leur usage basique :

commande rôle usage
man lire les pages de manuel man nomdecommande
apropos trouver des pages de manuel apropos mot-clef
who qui est connecté who [-H]
ls afficher le contenu d’un dossier ls [chemin]
cd se déplacer dans l’arborescence cd [chemin]
mkdir créer un dossier mkdir [-p] nomdossier
pwd afficher le dossier courant pwd
rmdir supprimer un dossier rmdir nomdossier
rm supprimer un fichier rm [-r] fichier
mv déplacer ou renommer mv source... dest
cp copier cp source... dest
touch créer un fichier (ou changer son timestamp) touch fichier
cat afficher le contenu d’un fichier cat [fichier]

2. Droits

Rappels :

hainry@backus17:~$ ls -l /home/profs/ehainry
drwxrwxrwx 3 ehainry profs  4096 Sept 21 10:21 autorise
-rw-rw-rw- 1 ehainry profs    63 Sept 21 10:21 autre
-rw-r--r-- 1 ehainry profs    64 Sept 21 10:21 essai
drwxr-x--- 5 ehainry profs  4096 Sept 21 10:21 interdit
drwxr-xr-x 5 ehainry profs  4096 Sept 21 10:21 lecture

Les colonnes représentent respectivement les droits, le nombre de liens, le login du propriétaire, le groupe du propriétaire, la taille du fichier, la date de création et enfin le nom.

Analysons les droits sur interdit.

d
Le premier caractère indique le type du fichier. d signifie qu’il s’agit d’un dossier. - que c’est un fichier régulier. Nous verrons d’autres types prochainement.
rwx
Les trois caractères suivants représentent les droits accordés au propriétaire (ici ehainry). Ils représentent respectivement les droits de lecture (read), d’écriture (write) et d’exécution (execute).
r-x
Les trois caractères suivants représentent les droits accordés au groupe (ici profs). Les membres du groupe ont ici droit de lecture et d’exécution mais pas d’écriture (le - représente l’absence du droit).
---
Les trois derniers caractères représentent les droits accordés aux personnes qui n’appartiennent pas aux groupes (cela inclut dans notre exemple les élèves par exemple).

Sur un fichier, le droit d’écriture permet de modifier le contenu du fichier, le droit de lecture permet d’afficher le contenu du fichier. Le droit d’exécution permet l’exécution (voir les fichiers dans /usr/bin).

Sur un dossier, le droit de lecture permet de connaître la liste des fichiers contenus, le droit d’exécution (exploration) permet d’aller dans le dossier en question, le droit d’écriture permet de modifier la liste des fichiers, c’est-à-dire de créer ou supprimer des fichiers dans ce dossier.

2.1. Les modes octal et symbolique

En lisant les parties SYNOPSIS et DESCRIPTION de la page de man de chmod, on apprend qu’il y a deux modes différents pour changer les droits d’un fichier ou dossier avec chmod : le mode octal et le mode symbolique.

Le mode symbolique

Dans le mode symbolique, on cherche à exprimer les droits à modifier sous la forme : 1. À qui s’adresse le changement ; 2. S’agit-il d’un ajout ou d’une suppression de droits ; 3. Quels droits sont concernés.

Cela se réalise en mettant un u (user), g (group), o (other) ou un a (all), puis un + ou un - et enfin une combinaison de r, w et x.

Par exemple

chmod a-w nomdefichier

retire le droit d’écriture à tout le monde (propriétaire, groupe et autres) sur le fichier nomdefichier. Notons que l’on peut réaliser plusieurs changements en une seule fois en les séparant par des virgules. Par exemple chmod u+rw,g-w,o-rw ff.

Le mode octal

Le mode octal décrit sous forme numérique les droits que l’on veut voir appliquer au fichier. Par exemple, supposons que l’on veuille donner les droits rwxr--r-x au fichier nomfichier.

Premièrement, on remplace les - par des 0 et les lettres par des 1. On obtient donc dans notre exemple 111100101.

Deuxièmement, on convertit ce nombre binaire en octal. Dans l’exemple, on trouve 745. Notons que le premier chiffre correspond aux droits pour le propriétaire, le deuxième chiffre aux droits du groupe et le troisième chiffre aux droits des autres car 3 chiffres binaires correspondent exactement à un chiffre octal.

Questions

  1. Donnez deux façons de mettre les droits -r-----r-- à un fichier.
  2. Créez un dossier upload dans votre «home» dans lequel vos camarades (membres du même groupe que vous) peuvent écrire mais dont ils ne pourront pas lire les fichiers, et sur lequel les autes utilisateurs n’auront aucun droit.
  3. Créez un dossier partage dans lequel les membres du groupe profs pourront lire les fichiers mais les autres élèves n’auront aucun droit.
  4. Dans le répertoire partage, créez un fichier que les profs peuvent modifier. Peuvent-ils le supprimer ?
  5. Déposez un fichier dans le dossier upload de vos voisins. Peuvent-ils le supprimer ?
  6. (Optionnel) Proposez une façon de déposer dans le dossier upload de vos voisins un dossier que ceux-ci ne pourront supprimer.

Il est important de se rappeler que le droit de supprimer un fichier ne dépend pas des droits de ce fichier mais uniquement des droits sur le dossier le contenant.

2.2. umask et les droits par défaut (Optionnel)

Les fichiers et dossiers que vous créez le sont avec des droits par défaut, droits que l’on peut ensuite changer avec chmod. Ces droits par défaut correspondent au umask. Cette commande affiche ou modifie le masque des permissions. L’umask est le complémentaire à 777 du mode octal des droits des fichiers par défaut. Ainsi un umask de 022 correspond à des droits par défaut de 755.

Questions

  1. Ouvrez plusieurs fenêtres de terminal. Changez l’umask dans un des terminaux. L’umask a-t-il changé dans les autres fenêtres ?
  2. Changez l’umask dans un terminal et lancez un terminal depuis ce terminal (xterm & ou rxvt &). Quel est l’umask dans ce nouveau terminal ?
  3. Changez l’umask de façon à ce que les fichiers que vous créez vous octroient tous les droits possibles mais n’en offre à personne d’autre.

3. Inodes et liens

Les fichiers et dossiers sont identifiés sur le disque dur par une adresse sous forme d’un numéro. Ce nombre est nommé inoeud (inode en anglais). Pour connaître cet inoeud, on peut utiliser l’option -i de la commande ls.

Utilisons la commande suivante : ls -il, exemple de résultat

301241 -rw-rw-rw- 1 hainry profs 36 sep 28 17:07 autre
Inode    droits   n proprio grp taille  date     nom de fichier

Où n représente le nombre de liens pointant vers le fichier. En effet, un fichier est écrit sur le disque dur au lieu pointé par l’inoeud et plusieurs noms de fichier peuvent le désigner. Ces différents noms sont des liens vers le fichier. S’il y a plusieurs liens vers un contenu, l’inoeud sera le même pour tous ces fichiers qui sont en nombre n. Notons que quand nous faisons ce que nous appelions précédemment supprimer un fichier, nous ne supprimons en réalité qu’un lien vers ce fichier, tant que le nombre de liens est supérieur à 1, le contenu est toujours acessible.

La commande ln permet de créer des liens. Lire le manuel de la commande ln. Il est possible de créer des liens physiques (ou liens durs : hard links en anglais) qui sont les liens qui nous intéressent ici mais aussi des liens symboliques (symlinks).

3.1. Introduction aux liens symboliques et physiques

  1. Créer un dossier liens et s’y placer.

  2. Créer un fichier a. Écrire quelque chose dedans. Quel est son inode ? Combien de liens pointent vers son contenu ?

  3. Créer un fichier b lien vers le fichier a. Quel est son inode ? Combien de liens pointent vers son contenu ?

  4. La commande du (disk usage) permet de connaître la taille totale occupée par un dossier. Les fichiers a et b occupent combien de place à eux deux ?

  5. Créer un lien symbolique c vers a.

  6. Aller dans un autre dossier (par exemple ~/Desktop). Faire un lien symbolique vers a en utilisant un chemin relatif.

  7. Supprimer a. Quel est le contenu de b ? Quid de c .?

    Les liens physiques ne peuvent pas être créés pour des dossiers, uniquement pour des fichiers. De plus, on ne peut créer de lien physique pour un fichier que sur la partition où ce fichier est. Notons enfin que certains systèmes de fichiers ne permettent pas la création de liens physiques.

    Les liens symboliques par contre peuvent aller d’une partition vers une autre, ils peuvent également pointer vers un dossier.

3.2. Liens symboliques et liens physiques

Le tableau suivant présente quelques titres de films en français, anglais et en version originale, ainsi que la langue de la version originale.

Titre en vo Titre en vf Titre en anglais Langue originale Réalisateur
Lola Rennt Cours Lola, cours Run Lola run allemand Tom Tykwer
Le fabuleux destin d’Amélie Poulain Le fabuleux destin d’Amélie Poulain Amelie from Montmartre français Jean-Pierre Jeunet
The hangover Very bad trip The hangover anglais Todd Philips
Il buono, il brutto, il cattivo Le bon, la brute et le truand The good, the bad and the ugly italien Sergio Leone
Shichinin no samurai Les sept samouraïs The seven samurai japonais Akira Kurosawa
North by Northwest La mort aux trousses North by Northwest anglais Alfred Hitchcock
M M le maudit M allemand Fritz Lang
Wo hu cang long Tigre et dragon Crouching tiger, hidden dragon chinois Ang Lee
  1. Créer, dans un dossier films, pour chaque film une fiche (un fichier texte) portant pour nom son titre original La fiche de chaque film pourra être de la forme suivante :

    Lola Rennt (Cours Lola cours)
    film allemand de Tom Tykwer

    La création des fiches pourra être réalisée à l’aide d’un éditeur de texte (nano, gedit ou leafpad) ou bien avec echo par exemple avec une commande similaire à

    echo "Lola rennt (Cours Lola, cours)
    film allemand de Tom Tykwer" > Lola_rennt

    Pour plus d’informations sur cette ligne de commande, attendre le TP sur les entrées sorties et redirections

  2. À l’aide de la commande ln, créer des liens pour que les différents noms de chaque film soient présents dans le dossier films. Vous devez obtenir une arborescence contenant :

    .
    |-- Amelie_from_Montmartre
    |-- Cours_Lola_cours
    |-- Le_fabuleux_destin_dAmelie_Poulain
    |-- Lola_rennt
    `-- Run_Lola_Run
  3. Quels sont les inodes des différents fichiers ?

  4. Combien y a-t-il de liens pour le fichier Lola_rennt ? Pour les autres fichiers ?

  5. Comparer les contenus de Lola_rennt, de Cours_Lola_cours et de Run_Lola_run à l’aide de cat.

  6. Créer des dossiers original, francais, anglais dans lesquels vous déplacerez les fichiers dont le nom est dans la langue en question. Tous les films sont-ils représentés dans tous les dossiers ? L’arborescence à obtenir ressemblera à :

    .
    |-- anglais
    |   |-- ....
    |   `-- Run_Lola_run
    |-- francais
    |   |-- ....
    |   `-- Cours_Lola_cours
    `-- original
        |-- ....
        `-- Lola_rennt
  7. Comparer les contenus de Lola_rennt, de Cours_Lola_cours et de Run_Lola_run à l’aide de cat.

  8. Combien y a-t-il de liens pour le fichier Lola_rennt ? Pour les autres fichiers ?

  9. Modifier Very_bad_trip pour qu’il ne soit plus un film anglais mais américain. Quel est le contenu de The hangover ?

  10. Ajouter à tous les films le siècle dans lequel ils ont été tournés (vingtième pour tous sauf the hangover) à l’aide d’une commande de la forme

    echo "XXe siècle" >> original/Lola_rennt

    Combien de commandes sont nécessaires ? anglais/M a-t-il la même date que original/M ?

  11. Dans le dossier original, créer un lien vers le dossier français en utilisant un chemin relatif. Quelle sorte de lien choisir ?

  12. Supprimer le dossier francais. Les contenus des fichiers sont-ils toujours accessibles ? Peut-on connaître le titres en vf de tous les films ?

  13. Créer un lien symbolique Amelie dans ~ qui pointe vers films/original/Le_fabuleux_destin_dAmélie_Poulain.

  14. Créer un dossier vo dans ~. Y ajouter des liens symboliques qui pointent vers les fichiers du dossier original.

  15. Comparer les contenus de vo/Le_fabuleux_destin_dAmélie_Poulain, Amelie, films/original/Le_fabuleux_destin_dAmélie_Poulain.

  16. Modifier Amelie de façon à ce qu’il pointe vers vo/Le_fabuleux_destin_dAmélie_Poulain.

  17. Quels sont les inodes des fichiers et dossiers créés ?

Épilogue

À retenir :

  • Droits liés au propriétaire, au groupe et aux autres.
  • Représentation octale des droits.
  • Le droit de supprimer un fichier dépend du droit d’écriture sur le dossier où est ce fichier.
  • La possibilité de supprimer dépend du droit de supprimer son contenu et du droit d’écriture sur le dossier le contenant.
  • Lien physique = nouveau nom pour le même fichier. Uniquement possible sur une même partition. Impossible (en général) pour les dossiers.
  • Lien symbolique = raccourci dans l’arborescence. Peut être cassé. Possible d’une partition à une autre, peut pointer vers un dossier.
  • Si chemin relatif pour un lien symbolique, ce chemin doit être valide relativement au dossier où sera créé le lien.
  • Droits sur les liens symboliques (lrwxrwxrwx) immuables (et sans grande signification).