Supposons que Johnny crée un fichier VIDE. Il est appelé foobar.py
. Lorsque Johnny autorise son exécution, il s'exécute chmod 755 foobar.py
. Le fichier contient désormais les métadonnées de
-rw-r--r-- 1 johnny staff 0 Dec 27 22:53 foobar.py
Où sont stockées toutes ces métadonnées dans ce fichier? La taille du fichier est 0, alors comment conserve-t-il les métadonnées lors de leur transfert vers un autre lecteur?
Réponses:
Il n'est pas stocké dans ce fichier. Il est stocké dans le système de fichiers et tous les paramètres sont copiés manuellement un par un (bien que certains ne puissent pas être copiés du tout).
Autrement dit, la plupart des systèmes d'exploitation n'ont pas vraiment d'appel "copier le fichier avec les métadonnées". Le programme de copie de fichiers crée simplement un nouveau fichier nommé
foobar.py
, copie l'intégralité des 0 octets de données, puis utilise utime () ou SetFileTime () pour que son heure de modification soit identique à celle de l'original. De même, les autorisations de fichier seraient "copiées" en les redéfinissant à l'aide de chmod () ou en copiant l'attribut ACL POSIX.Certaines métadonnées ne sont pas copiées. La définition de la propriété nécessite des privilèges root, donc les copies des fichiers de quelqu'un d'autre vous appartiennent et occupent votre quota de disque. Le ctime (temps de changement d'attribut) est impossible à définir manuellement sur Unixes; btime (heure de naissance / création) n'est généralement pas copié non plus.
Comparez
cp -a foo bar
(qui copie les métadonnées) etcp foo bar
(qui ne le fait pas):la source
Il diffère généralement du système de fichiers au système de fichiers où les métadonnées sont stockées. Sur la famille ext2 de systèmes de fichiers, les métadonnées que vous avez mentionnées (propriétaire, groupe, autorisations, heure) sont stockées dans l' inode . L'inode stocke également (pointe vers) les blocs que le fichier occupe sur le disque. L'inode ne stocke pas le nom de fichier.
Vous pouvez accéder à ces données avec l'
stat
appel système (man 2 stat
) et utiliser l'stat
outil pour l'imprimer (man stat
). Une description détaillée des champs inode peut être trouvéelinux/include/linux/fs.h
dans la source du noyau.Il existe d'autres types de métadonnées (par exemple les autorisations ACL ) qui sont stockées à différents endroits.
Les métadonnées ne sont pas copiées par défaut lorsque vous copiez le fichier. Au lieu de cela, un nouveau fichier avec des valeurs de métadonnées par défaut est créé. Il existe différentes options pour
cp
(-p
,--preserve
) qui demandentcp
de copier également les métadonnées, en lisant les anciennes métadonnées avecstat
et en modifiant les nouvelles métadonnées en conséquence.la source
Selon le système de fichiers, les zones sont réservées (semi-) statiquement ou dynamiquement pour contenir des métadonnées telles que les autorisations, la taille et d'autres (parfois le nom du fichier aussi).
Sous Unix, les métadonnées sont stockées dans l' inode contrôlant la zone de données où réside le fichier ( tandis que les noms de fichier et les numéros d'inode associés sont stockés dans une entrée de répertoire ).
Dans certains répertoires de systèmes de fichiers, les entrées sont des fichiers comme les autres, mais cachées à la vue. FAT et FAT32 sont de tels systèmes de fichiers (le répertoire racine de FAT est "spécial" cependant). Lorsque vous créez un fichier, vous ajoutez / modifiez une entrée dans le fichier qui décrit le dossier dans lequel se trouve le fichier. Chaque entrée est suffisamment grande pour stocker la taille du fichier, le nom et la date, et rien d'autre (les noms longs occupant plusieurs entrées; la taille d'entrée par défaut de 32 octets peut contenir un seul nom dans l'ancien format de 8 + 3 caractères. Tout cela, bien sûr , en supposant que ma mémoire fonctionne). Le système ext est similaire, mais l'entrée de répertoire est de taille dynamique et ne contient que le nom et le pointeur d'inode; toutes les autres informations sont dans l'inode. De cette façon, deux entrées peuvent pointer vers le même fichier, ce qui est utile pour gérer les fichiers en double.
Dans certains systèmes de fichiers, les inodes peuvent être suffisamment volumineux pour contenir une petite quantité de données en plus des métadonnées, de sorte que si le fichier peut y tenir, il n'occupe pas d'espace disque supplémentaire. Vous créez un fichier de 45 octets et l'espace disque libre ne change pas du tout; ces octets sont stockés à l' intérieur de l'inode. Je pense que la famille ext * prend en charge cela (et NTFS aussi). Cela permet de gérer un grand nombre de très petits fichiers.
Dans encore d'autres systèmes de fichiers, il y a ce qui équivaut à un système de fichiers "fantôme" le long du système principal, qui stocke ces attributs supplémentaires. Non seulement des informations sur les fichiers, mais également des icônes de fichiers .
Certains systèmes ont les deux: NTFS a les métadonnées de répertoires complètes fonctionnant de manière inode, et la possibilité de créer des flux de données alternatifs contenant des informations supplémentaires qui ne changent (apparemment) rien dans le fichier "principal".
la source