Vous êtes sur la page 1sur 11

Université Catholique de l'Afrique de l'Ouest

Unité universitaire du Togo

Module Initiation à Unix et aux


environnements GNU/Linux

Par Arnaud AMELINA

Année académique 2008 – 2009


5.7 Manipulations élémentaires
Dans les pages qui suivent sont développées les opérations élémentaires sur les fichiers et les
répertoires. Il est primordial d’en connaître le fonctionnement interne (au niveau du système de
fichiers) en termes de manipulation sur les inodes et les blocs de données.

Dans chaque page est présenté un diagramme de l’arborescence. Le premier est le suivant.

5.7.1 Copie d’un élément

• La copie d’une entrée de l’arborescence s’effectue avec la commande cp (copy).

• Pour un fichier, un nouvel inode est créé et les blocs de données dupliqués.

La commande cp accepte deux syntaxes. La première forme permet, avec deux noms de fichiers en
arguments (cp fic1 fic2), de dupliquer le premier fichier pour créer le deuxième. Cette commande
crée une nouvelle entrée dans le répertoire, un nouvel inode, et duplique les blocs de données. La
seconde forme accepte deux arguments ou plus dont le dernier est un nom de répertoire (cp
fic1 ... rep), ce qui permet de copier tous les arguments précédents (des fichiers) dans ce répertoire
en leur donnant le même nom relatif. Si on se trouve dans le répertoire de destination avant de faire
la copie, on peut nommer le répertoire courant grâce à son autoréférence (le point, « . »).

Dans l’arborescence, l’opération de copie fait apparaître de nouvelles entrées. Dans notre exemple,
comme indiqué dans la figure suivante, la nouvelle entrée est créée dans le même répertoire. La
copie des blocs de données se voit notamment par des numéros d’inodes différents.

Il est intéressant d’utiliser les options –l et –i de la commande ls pour constater les différences entre
un original et sa copie au niveau des attributs. En particulier, la comparaison montre que les
numéros d’inode (premier champ) sont différents.

5.7.2 Renommage ou déplacement d’un élément

• Le renommage et le déplacement d’une entrée de l’arborescence s’effectue avec la


commande mv (move).

• Le renommage consiste simplement à modifier le nom de l’entrée dans le contenu du


répertoire.
• Le déplacement consiste à supprimer l’entrée du répertoire d’origine et à insérer une
nouvelle entrée dans le répertoire destination.
• Les blocs de données ne sont en aucun cas déplacés.
Renommer un fichier correspond en réalité à une modification d’entrée(s) de répertoire(s) et peut se
traduire par un déplacement. D’ailleurs, la commande s’appelle mv (move). Cette commande
accepte les deux mêmes syntaxes que cp, c.-à-d. soit deux arguments pour renommer le premier
fichier par le second, soit deux arguments ou plus avec en dernier un nom de répertoire, ce qui
revient à déplacer le(s) premier(s) argument(s) sur le répertoire donné en dernier avec les mêmes
noms relatifs. De la même manière que pour cp, si on se trouve dans le répertoire de destination
avant de faire le déplacement, on peut donner le nom du répertoire courant grâce à son
autoréférence (point, « . »). Cette commande mv permet aussi de renommer des répertoires.

Dans l’arborescence, l’opération de déplacement/renommage ne fait pas apparaître de nouvelles


entrées. Dans notre exemple, comme indiqué dans la figure suivante, l’entrée est déplacée dans un
autre répertoire et renommée. La non-copie des blocs de données se voit notamment par le numéro
d’inode qui ne change pas.

La commande ls –li permet de montrer que le numéro d’inode n’a pas changé, ce qui confirme que
ni l’inode, ni les blocs de données sur disque n’ont été modifiés.
5.7.3 Concept de lien physique

• Un lien dit physique est une relation entre un répertoire et un fichier : plusieurs liens sur une
entrée signifie donc plusieurs repérages dans l’arborescence du même inode et du même
contenu.
• Il est possible de créer un nouveau lien sur une entrée déjà existante avec la commande ln
(link).

• Une nouvelle entrée dans le répertoire R2 est créée.


• L’inode 1953 est accessible à partir de R1 et de R2 par les noms fbis et lien, respectivement.

Une entrée d’un répertoire permettant l’accès à un élément via son inode s’appelle un lien
(référence ou chemin d’accès) et Unix permet la création de liens multiples sur un même élément.
Chaque création d’un lien (avec la commande ln) consiste à ajouter une entrée dans un répertoire
avec le même numéro d’inode, et un autre nom ou le même nom (possible uniquement si répertoires
différents). Dans l’inode, le compteur de lien qui vaut un à la création du fichier est incrémenté
d’une unité à chaque nouveau lien.

Dans l’arborescence, l’opération de création d’un lien physique fait apparaître une nouvelle entrée.
Dans notre exemple, comme indiqué dans la figure suivante, la nouvelle entrée est créée dans un
autre répertoire. La non-copie des blocs de données se voit notamment par les numéros d’inode
identiques.
Il y a plusieurs raisons d’utiliser des liens. Un premier usage permet d’utiliser un nom local donc
plus court pour référencer un élément. Ici, le lien joue le rôle d’alias et il évite une frappe longue, ce
qui diminue le risque d’erreur. Les liens servent aussi à définir différents noms logiques pour un
même élément. Par exemple, un administrateur qui représente ses partitions par des noms logiques
n’a que des liens à modifier lorsqu’il veut changer un disque et toutes ses procédures (démarrage,
sauvegarde...) continuent à être opérationnelles si elles utilisent les noms logiques. Ce type de lien
présente deux limitations. Tout d’abord, on ne peut pas établir de liens entre systèmes de fichiers
différents, chacun ayant une gestion séparée des numéros d’inodes. Ensuite, on ne peut pas non plus
établir un lien physique sur un répertoire. La version BSD a introduit la notion de lien symbolique,
en vue de supprimer ces deux limitations.

5.7.4 Suppression d’une entrée dans l’arborescence

• Supprimer une entrée d’un répertoire correspond à la suppression d’un lien.


• La suppression d’une entrée s’effectue avec la commande rm (remove)

• Il reste un lien pour accéder à l’inode 1953, les blocs ne sont donc pas libérés.

• La suppression du dernier lien provoque la libération du bloc inode et des blocs de données.
La suppression d’un élément de l’arborescence, avec la commande rm (remove), est en fait la mise
à zéro du numéro d’inode, c.-à-d. la suppression d’un lien, la décrémentation du nombre de liens et
dans le cas où ce lien est le dernier, la libération des blocs de données et de l’inode. Par conséquent,
un fichier ordinaire existe tant qu’il subsiste au moins un lien physique sur celui-ci, qu’il s’agisse de
l’entrée initiale ou d’un lien établi ensuite.

Dans l’arborescence, l’opération de suppression d’un lien physique fait disparaître des entrées. Dans
notre exemple, comme indiqué dans la figure suivante, les deux entrées sont supprimées, libérant
ainsi l’inode qui n’est plus référencé et les blocs de données.

La commande rm possède l’option –i (rm –i) très utile pour des utilisateurs débutants : elle permet
d’éviter des suppressions effectuées par erreur, de frappe par exemple. Cette option oblige
l’utilisateur à confirmer la suppression, permettant ainsi à l’utilisateur de renoncer à la suppression
s’il le souhaite.

5.7.5 Concept de lien symbolique

• Un lien physique utilisant un numéro d’inode, il se limite à la même partition.


• Pour traverser les limites des partitions, Unix introduit des liens dits symboliques.
• La création d’un lien symbolique s’effectue avec l’option –s de la commande ln.

• Un nouvel inode est créé dans la partition d’origine.


• Cet inode contient le nom (absolu ou relatif) de l’élément pointé, au lieu d’un numéro
d’inode.
Berkeley a introduit le lien symbolique comme une extension du lien physique (dit hard). Un lien
symbolique est un élément de l’arborescence dont le contenu est le nom du fichier sur lequel il
pointe. Il dispose d’un inode mais certains attributs ne sont pas significatifs, en particulier les droits
d’accès car les contrôles portent sur le fichier pointé et non pas sur le lien, et la taille équivaut au
nombre de caractères du nom du fichier pointé. Les deux limitations citées dans la page de cours
précédente n’existent plus. On peut même établir un lien sur un fichier qui n’existe pas, le test
d’existence n’étant réalisé que lors de l’accès.

La commande ln –s crée un nouvel inode qui contient le nom de l’élément de l’arborescence pointé.
Ainsi, ce « lien indirect » peut « traverser » les partitions. Le nom de l’élément pointé peut être
absolu ou relatif.
Dans l’arborescence, l’opération de création d’un lien symbolique fait apparaître une nouvelle
entrée. Dans notre exemple, comme indiqué dans la figure suivante, la nouvelle entrée est créée
avec un nouvel inode, sans création de nouveaux blocs de données.
5.8 Droits d’accès
• À tout élément de l’arborescence sont associés trois droits d’accès :
• En lecture : r pour read
• En écriture : w pour write
• En exécution : x pour execute
• Pour trois catégories d’utilisateurs
• Le propriétaire : u pour user
• Le groupe14 : g pour group
• Les autres : o pour others
• Par exemple : rwx r–x r–– s’interprète comme ceci :
• Lecture, écriture et exécution autorisées pour le propriétaire
• Lecture et exécution autorisées pour le groupe
• Lecture seule autorisée pour les autres
Parmi les informations contenues dans l’inode de tout élément de l’arborescence, se trouvent les
droits d’accès dont les deux principes de base sont la simplicité et la confiance accordée aux
utilisateurs.
La protection d’un élément de l’arborescence repose sur trois droits d’accès qui contrôlent les trois
opérations de lecture (droit r pour read), d’écriture (droit w pour write) et d’exécution (droit x pour
execute). Ces trois droits (rwx) sont appliqués à trois catégories d’utilisateurs qui sont le
propriétaire (u pour user), (les membres de) son groupe d’appartenance (g pour group) et les autres
utilisateurs (o pour other). Les identifiants des deux premières catégories sont donnés par la
commande id. Les tirets (« – ») dans les droits indiquent que ces droits ne sont pas accordés.
Le système de fichiers distingue trois catégories d’utilisateurs mais sans aucune hiérarchie entre
elles. Ainsi, le contrôle des accès s’effectue en commençant par la recherche selon un ordre
déterminé de la catégorie (propriétaire, groupe et les autres), et ensuite, il se poursuit par la
vérification du droit concerné. Les droits d’accès pour une catégorie n’interagissent pas avec ceux
d’une autre catégorie. Par exemple, si un fichier possède le droit d’exécution pour les catégories o et
g mais pas pour le propriétaire, alors le propriétaire se voit refuser une demande d’exécution alors
que tous les autres peuvent exécuter ce fichier.
Tout système d’exploitation a également besoin de comptes spécialisés, avec des droits importants,
pour des tâches d’administration. Sous Unix, il existe un compte root dit compte du super-utilisateur
(ou administrateur), caractérisé par son numéro d’utilisateur (l’UID zéro) qui lui confère les pleins
pouvoirs. Pour toute action avec cette identité, le système ne contrôle pas les droits d’accès et
autorise l’opération.

5.8.1 Modification des droits d’accès

• Les droits sont modifiables avec la commande chmod (change mode) :


• Méthode 1 : valeur numérique calculée sur le poids de r, w et x pour chaque
catégorie :
r = 4, w = 2 et x = 1
• Par exemple :
• chmod 741 fichier rwx r– – – –x
• chmod 600 fichier rw– – – – – – –
• Méthode 2 : valeur littérale :
• Catégories : u, g, o ou tous (a = all = ugo)
• Opérations : ajout (+), retrait (–) ou affectation (=)
• Droits : r, w, x et d’autres (t, s...)
• Par exemple : (fichier avec les droits rw– – – – – – –)
• chmod g+r fichier rw– r– – – – –
• chmod ug+x fichier rwx r–x – – –
• chmod a=r fichier r– – r– – r– –
• chmod u+wx fichier rwx r– – r– –
• chmod go-r fichier rwx – – – – – –
La commande chmod (chmod droits fichier...) permet de modifier les droits d’accès qui peuvent être
donnés sous une forme numérique absolue, ou sous une forme littérale relative ou absolue. La
modification des droits d’un fichier n’est autorisée qu’à son propriétaire et bien sûr au super-
utilisateur.
Une valeur numérique est composée de trois chiffres indiquant dans l’ordre, les droits du
propriétaire, ceux du groupe et ceux des autres. Chaque chiffre est obtenu par addition des valeurs
des droits à positionner en sachant que le droit r (lecture) vaut quatre, le droit w (écriture) deux et le
droit x (exécution) un.
La valeur littérale est composée de trois caractères précisant dans l’ordre la catégorie concernée,
l’opération à effectuer et le droit à modifier. La catégorie peut prendre une ou plusieurs valeurs
parmi les lettres u pour le propriétaire, g pour le groupe, o pour les autres ou a pour l’ensemble (a
équivaut à ugo et c’est la valeur par défaut). L’opération peut prendre une valeur parmi les
caractères + pour l’ajout, – pour le retrait ou = pour l’affectation qui correspond au positionnement
du droit indiqué et au retrait des autres. Le droit peut prendre une ou plusieurs valeurs parmi les
lettres r pour la lecture, w pour l’écriture ou x pour l’exécution. Le droit peut être omis si on
souhaite supprimer tous les droits.

5.8.2 Droits d’accès : cas particuliers

• Toute opération sur une entrée est contrôlée à partir des droits r, w et x.
• La création, le renommage, le déplacement et la suppression, d’une entrée dans un répertoire
sont contrôlées par le droit w des répertoires.
• Pour la création, il faut avoir le droit de modifier le contenu du répertoire pour
ajouter une entrée.
• Pour le renommage et le déplacement, il faut avoir le droit de modifier le contenu du
répertoire pour modifier le nom d’une entrée ou/et ajouter une entrée.
• Pour la suppression, il faut avoir le droit de mettre le numéro d’inode à zéro.
• Pour un répertoire, le droit x autorise la traversée et le positionnement dans celui-ci.
• Pour garder confidentiel le contenu d’un répertoire, un utilisateur enlève le droit r
pour les autres ou le groupe ou lui-même.
• Pour empêcher de se déplacer dans une partie de son arborescence, un utilisateur
enlève le droit x au répertoire à la racine de cette arborescence.
• Pour un fichier spécial, le droit x n’a pas de signification.
Toutes les opérations sur un élément de l’arborescence sont contrôlées à partir des droits r, w et x.
Aussi, pour toute opération autre qu’une lecture, une écriture ou une exécution, il faut examiner à
quoi elle correspond exactement. La création d’un fichier qui correspond à l’écriture d’une entrée
dans un répertoire est contrôlée par le droit d’écriture dans ce répertoire. Le renommage ou le
déplacement d’un fichier sont aussi contrôlés par le droit d’écriture et de traversée dans les
répertoires. En outre, la suppression d’un fichier étant réalisée par la mise à zéro du numéro d’inode
dans le répertoire, c’est encore le droit d’écriture du répertoire qui s’applique. Un utilisateur peut
donc avoir le droit de supprimer un fichier même s’il n’a pas le droit de le lire, de le modifier ou de
l’exécuter.
D’autre part, le droit x d’un répertoire autorise la traversée et le positionnement sous celui-ci. Un
utilisateur peut donc avoir accès à un fichier sans avoir le droit de lire le contenu du répertoire qui le
référence ni des répertoires parents dans l’arborescence. C’est une manière de protéger par le secret
des données tout en donnant accès à certains utilisateurs avertis.

5.8.3 Masque de création pour les droits d’accès

• Les droits par défaut à la création d’une entrée sont affichables avec la commande umask
(user mask).
• umask affiche les droits à retirer dans un masque.
• En standard, les entrées sont créés avec les droits rwx r–x r–x.
• Dans ce cas, la commande umask donne la valeur 0022 :
• Le premier 0 indique que les chiffres sont en octal (base 8).
• Le second 0 indique qu’aucun droit pour l’utilisateur n’est retiré, donc rwx.
• Le 2 indique que le droit w (2) est retiré pour le groupe et les autres, donc r–x.
• Bien sûr, les utilitaires, par exemple l’éditeur de texte emacs, peuvent restreindre encore les
droits, par exemple en enlevant le droit x à un fichier de texte.
• Il est possible de modifier ces droits par défaut à la création en appelant la commande umask
avec en argument le nouveau masque :
• Entre les valeurs 022 et 077.
• Bien sûr, l’action est valable pour les éléments créés ensuite, sans effet rétroactif sur les
fichiers déjà créés.
Jusqu’à présent, nous n’avons pas indiqué comment sont calculés les droits à la création d’une
entrée. Les droits d’accès des éléments créés (fichiers ou répertoires) dépendent du mode de
création : par exemple, un fichier texte créé avec un éditeur de texte n’a pas en général le droit x
alors qu’un exécutable obtenu après compilation et édition de liens a le droit x. Ils dépendent aussi
de la fonction/commande umask du shell qui permet de retirer automatiquement des droits.
La fonction umask affiche le masque utilisé pour fixer les droits des fichiers lors de leur création.
La valeur numérique de ce masque représente les droits retirés des droits par défaut. Elle est
obtenue à partir de poids attribués aux droits qui sont quatre pour r, deux pour w et un pour x. Ainsi,
avec un masque de 022, le droit w est systématiquement retiré au groupe et aux autres, ce qui
correspond à la protection minimale que chacun doit avoir, 077 étant la protection maximale. Cette
fonction permet également de modifier ce masque. Pour cela, il suffit de donner en argument la
nouvelle valeur soit de façon numérique, soit de façon symbolique.
La valeur de la fonction umask est prise en compte par la commande chmod lorsque la modification
s’applique par défaut aux trois catégories.