inode(7) | Miscellaneous Information Manual | inode(7) |
inode – Informations sur les inœuds de fichier
Chaque fichier possède un inœud contenant des métadonnées à propos du fichier. Une application peut récupérer ces métadonnées en utilisant stat(2) (ou des appels semblables) qui renvoie une structure stat, ou statx(2) qui renvoie une structure statx.
Voici une liste des informations habituellement trouvées dans, ou associées à, l’inœud de fichier avec les noms des champs correspondants de la structure renvoyée par stat(2) et statx(2) :
Les champs d’horodatage indiquent le temps mesuré avec comme point de départ l’Époque — 1970-01-01 00:00:00 +0000 UTC (consultez time(7)).
Les horodatages en nanoseconde sont permis sur les systèmes de fichiers XFS, JFS, Btrfs et ext4 (depuis Linux 2.6.23). Les horodatages en nanoseconde ne sont pas permis sur les systèmes de fichiers ext2, ext3 et Reiserfs. Dans le but de renvoyer des horodatages avec une précision d'une nanoseconde, les champs d’horodatage dans les structures stat et statx sont définis sous forme de structures qui incluent une composante en nanoseconde. Consultez stat(2) et statx(2) pour davantage d’informations. Sur les systèmes de fichiers qui ne permettent pas les résolutions inférieures à la seconde, les champs nanoseconde dans les structures stat et statx sont renvoyés avec comme valeur zéro.
Le champ stat.st_mode (pour statx(2), le champ statx.stx_mode) contient le type et le mode de fichier.
POSIX rattache les bits stat.st_mode correspondant au masque S_IFMT (voir ci-dessous) au type de fichier, les 12 bits correspondant au masque 07777 aux bits de mode de fichier et les 9 bits les moins significatifs (0777) aux bits de permission de fichier.
Les valeurs de masque suivantes sont définies pour le type
de fichier :
S_IFMT | 0170000 | masque de bits pour le champ de bits de type de fichier |
S_IFSOCK | 0140000 | socket |
S_IFLNK | 0120000 | lien symbolique |
S_IFREG | 0100000 | fichier normal |
S_IFBLK | 0060000 | périphérique bloc |
S_IFDIR | 0040000 | répertoire |
S_IFCHR | 0020000 | périphérique caractère |
S_IFIFO | 0010000 | FIFO |
Ainsi, pour tester (par exemple) un fichier normal, il est possible d’écrire :
stat(pathname, &sb); if ((sb.st_mode & S_IFMT) == S_IFREG) { /* Traiter les fichiers normaux */ }
Puisque les tests de la forme précédente sont usuels, des macros supplémentaires sont définies par POSIX pour permettre d’écrire le test de type de fichier dans st_mode de façon plus concise :
Le morceau de code précédent pourrait donc être réécrit comme ceci :
stat(pathname, &sb); if (S_ISREG(sb.st_mode)) { /* Traiter les fichiers normaux */ }
Les définitions de la plupart des macros de test de type de fichier précédentes sont fournies si une des macros de test de fonctionnalité suivantes est définie : _BSD_SOURCE (dans glibc 2.19 et versions précédentes), _SVID_SOURCE (dans glibc 2.19 et versions précédentes) ou _DEFAULT_SOURCE (dans glibc 2.20 et versions suivantes). De plus les définitions de toutes les macros précédentes à part S_IFSOCK et S_ISSOCK() sont fournies si _XOPEN_SOURCE est définie.
La définition de S_IFSOCK peut aussi être exposée soit en définissant _XOPEN_SOURCE avec une valeur de 500 ou plus, soit (depuis glibc 2.24) en définissant _XOPEN_SOURCE et _XOPEN_SOURCE_EXTENDED.
La définition de S_ISSOCK() est exposée si une des macros de test de fonctionnalité suivantes est définie : _BSD_SOURCE (dans glibc 2.19 et versions précédentes), _DEFAULT_SOURCE (dans glibc 2.20 et versions suivantes), _XOPEN_SOURCE avec une valeur de 500 ou plus, _POSIX_C_SOURCE avec une valeur de 200112L ou plus, ou (depuis glibc 2.24) en définissant _XOPEN_SOURCE et _XOPEN_SOURCE_EXTENDED.
Les valeurs de masque suivantes sont définies pour le
composant de mode de fichier du champ st_mode :
S_ISUID | 04000 | bit set-user-ID (voir execve(2)) |
S_ISGID | 02000 | bit set-group-ID (voir ci-dessous) |
S_ISVTX | 01000 | sticky bit (voir ci-dessous) |
S_IRWXU | 00700 | droits de lecture, écriture et exécution pour le propriétaire |
S_IRUSR | 00400 | droit de lecture pour le propriétaire |
S_IWUSR | 00200 | droit d'écriture pour le propriétaire |
S_IXUSR | 00100 | droit d'exécution pour le propriétaire |
S_IRWXG | 00070 | droits de lecture, écriture et exécution pour le groupe |
S_IRGRP | 00040 | droit de lecture pour le groupe |
S_IWGRP | 00020 | droit d'écriture pour le groupe |
S_IXGRP | 00010 | droit d'exécution pour le groupe |
S_IRWXO | 00007 | droits de lecture, écriture et exécution pour les autres (pas dans le groupe) |
S_IROTH | 00004 | droit de lecture pour les autres |
S_IWOTH | 00002 | droit d'écriture pour les autres |
S_IXOTH | 00001 | droit d'exécution pour les autres |
Le bit set-group-ID (S_ISGID) a plusieurs utilisations particulières. Pour un répertoire, il indique que la sémantique BSD doit être appliquée en son sein, c'est-à-dire que les fichiers qui y sont créés héritent leur ID groupe du répertoire et non pas de l’ID groupe effectif du processus créateur, et les sous-répertoires auront automatiquement le bit S_ISGID actif. Pour les fichiers exécutables, le bit set-group-ID fait que l’ID groupe effectif d’un processus qui exécute le fichier change comme décrit dans execve(2). Pour un fichier qui n’a pas d'autorisation d'exécution pour le groupe (S_IXGRP non actif), ce bit indique qu'un verrouillage strict est en vigueur sur ce fichier.
Le bit « sticky » (S_ISVTX) sur un répertoire indique que les fichiers qui s'y trouvent ne peuvent être renommés ou effacés que par leur propriétaire, par le propriétaire du répertoire ou par un processus privilégié.
Si vous avez besoin de connaître la définition des types blkcnt_t ou blksize_t de <sys/stat.h>, alors définissez _XOPEN_SOURCE avec une valeur supérieure ou égale à 500 (avant d'inclure tout en‐tête).
POSIX.1-1990 ne décrivait pas les constantes S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK, S_IFDIR, S_IFCHR, S_IFIFO, S_ISVTX, mais réclame d'utiliser les macros S_ISDIR(), etc. Les constantes S_IF* sont présentes dans POSIX.1-2011 et les versions suivantes.
Les macros S_ISLNK() et S_ISSOCK() ne sont pas présentes dans POSIX.1-1996, mais le sont dans POSIX.1-2001. La première vient de SVID 4, la seconde de SUSv2.
UNIX V7 (et les systèmes suivants) propose S_IREAD, S_IWRITE, etS_IEXEC, là où POSIX préfère leurs synonymes S_IRUSR, S_IWUSR et S_IXUSR.
Pour les pseudo-fichiers autogénérés par le noyau, la taille de fichier (stat.st_size, statx.stx_size) renvoyée par le noyau n’est pas précise. Par exemple, une valeur de zéro est renvoyée pour de nombreux fichiers du répertoire /proc, tandis que divers fichiers dans /sys renvoient une taille de 4096 octets, même si le contenu du fichier est plus petit. Pour de tels fichiers, une lecture d'autant d’octets que possible devrait être tentée (et ajouter « \0 » au tampon renvoyé s’il est interprété comme une chaîne).
stat(1), stat(2), statx(2), symlink(7)
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.
5 février 2023 | Pages du manuel de Linux 6.03 |