ИМЯ
inode - описание файловой инодыОПИСАНИЕ
Для каждого файла существует инода (inode), содержащая метаданные файла. Приложение может получить эти метаданные с помощью stat(2) (и подобных вызовов), который возвращает структуру stat, и statx(2), который возвращает структуру statx. В следующем списке показана информация, которую, обычно, можно найти или которая относится к файловой иноде в полях соответствующей структуры, возвращаемой stat(2) и statx(2):- Устройство, на котором находится инода
- stat.st_dev; statx.stx_dev_minor и statx.stx_dev_major
- Каждая инода (а также связанный с ней файл) располагается в файловой системе, которая находится на устройстве. Это устройство опознаётся по комбинации своих основного (определяет общий класс устройства) и вспомогательного (определяет конкретный экземпляр в общем классе) идентификаторов.
- Номер иноды
- stat.st_ino; statx.stx_ino
- Каждый файл в файловой системе имеет уникальный номер иноды. Для номеров инод гарантируется уникальность только внутри файловой системы (т. е., одинаковые номера инод могут использоваться в разных файловых системах, из-за чего жёсткие ссылки не могут пересекать границы файловой системы). В этом поле содержится номер иноды файла.
- Тип файла и режим
- stat.st_mode; statx.stx_mode
- Описание типа файла и режим приведены ниже.
- Счётчик ссылок
- stat.st_nlink; statx.stx_nlink
- Это поле содержит количество жёстких ссылок на файл. Дополнительные ссылки на существующий файл созданы с помощью link(2).
- Пользовательский идентификатор
- st_uid stat.st_uid; statx.stx_uid
- В этом поле содержится идентификатор пользователя, которому принадлежит файл. При создании файла идентификатору пользователя файла присваивается идентификатор эффективного пользователя создающего процесса. Идентификатор пользователя файла можно изменить с помощью chown(2).
- Идентификатор группы
- stat.st_gid; statx.stx_gid
- В этом поле содержится идентификатор группы, которой принадлежит файл. При создании файла идентификатору группы файла присваивается идентификатор группы родительского каталога или идентификатор эффективной группы создающего процесса, в зависимости от наличия бита set-group-ID на родительском каталоге (смотрите ниже). Идентификатор группы файла можно изменить с помощью chown(2).
- Устройство, представляемое этой инодой
- stat.st_rdev; statx.stx_rdev_minor и statx.stx_rdev_major
- Если этот файл (инода) представляет устройство, то инода хранит основной и вспомогательный идентификатор этого устройства.
- Размер файла
- stat.st_size; statx.stx_size
- Размер файла (если он обычный или является символьной ссылкой) в байтах. Размер символьной ссылки равен длине пути файла, на который она ссылается, без конечного нулевого байта.
- Предпочтительный размер блока для ввода/вывода
- stat.st_blksize; statx.stx_blksize
- «Предпочтительный» размер блока для эффективного ввода/вывода в файловой системе (запись в файл более мелкими порциями может привести к неэффективному чтению/изменению/повторной записи).
- Количество блоков, выделенных файлу
- stat.st_blocks; statx.stx_size
- Количество блоков (по 512 байт), выделенных для файла (может быть меньше, чем st_size/512, когда в файле есть пропуски (holes)).
- В стандарте POSIX.1 отмечено, что размер единиц значения st_blocks структуры stat стандартом не определяется. Во многих реализациях он равен 512 байт; в некоторых системах используются другой — 1024. Кроме этого, размер единиц может отличаться для разных файловых систем.
- Метка времени последнего доступа (atime)
- stat.st_atime; statx.stx_atime
- Метка времени последнего доступ к файлу. Изменяется при доступе к файлу, например, при выполнении execve(2), mknod(2), pipe(2), utime(2) и read(2) (при чтении ненулевого количества байт). Другие интерфейсы, например mmap(2), могут изменять метку, но могут и не делать этого.
- Некоторые типы файловых систем позволяют выполнить монтирование таким образом, что факт доступа к файлу или каталогу не вызовет изменение метки atime (смотрите описание noatime, nodiratime и relatime в mount(8) и связанную с ними информацию в mount(2)). Также, поле метка atime не обновляется, если файл открыт с флагом O_NOATIME; смотрите open(2).
- Метка времени создания файла (btime)
- (не возвращается в структуре stat); statx.stx_btime
- Метка времени создания файла. Устанавливается при создании файла и после этого не изменяется.
- Метка btime отсутствовала в системах UNIX и в настоящее время не поддерживается в большинстве файловых систем Linux.
- Метка времени последнего изменения (mtime)
- stat.st_mtime; statx.stx_mtime
- Метка времени последнего изменения файла. Изменяется при изменении файла, например, при выполнении mknod(2), truncate(2), utime(2) и write(2) (если записано не менее одного байта). Кроме того, у каталога метка mtime изменяется при создании и удалении файлов в этом каталоге. Метка mtime не изменяется при изменении владельца, группы, количества жёстких ссылок или режима доступа.
- Метка времени последнего изменения состояния (ctime)
- stat.st_ctime; statx.stx_ctime
- Метка времени последнего изменения состояния файла. Изменяется при записи или установке информации иноды (т. е., владельце, группе, количестве ссылок, режиме и т. д.).
Тип файла и режим
Поле stat.st_mode (в statx(2) — поле statx.stx_mode ) содержит тип файл и режим. В POSIX относятся к битам stat.st_mode равным маске S_IFMT (смотрите ниже) как к типу файла (file type), 12 битам, соответствующим маске 07777, как к битам режима файла (file mode bits) и наименее значащим 9 битам (0777) как к битам доступа к файлу (file permission bits). Следующие значения масок определены для типа файла:S_IFMT | 0170000 | битовая маска битового поля для типа файла |
S_IFSOCK | 0140000 | socket |
S_IFLNK | 0120000 | символьная ссылка |
S_IFREG | 0100000 | обычный файл |
S_IFBLK | 0060000 | блочное устройство |
S_IFDIR | 0040000 | каталог |
S_IFCHR | 0020000 | символьное устройство |
S_IFIFO | 0010000 | FIFO |
Таким образом, чтобы проверить обычный файл (например) на возможность записи:
stat(pathname, &sb); if ((sb.st_mode & S_IFMT) == S_IFREG) { /* обработка обычного файла */ }
Так как приведённое выше тестирование имеет общий вид, в POSIX определены дополнительные макросы, которые позволяют тестировать тип файла в st_mode более краткой записью:
- S_ISREG(m)
- обычный файл?
- S_ISDIR(m)
- каталог?
- S_ISCHR(m)
- символьное устройство?
- S_ISBLK(m)
- блочное устройство?
- S_ISFIFO(m)
- FIFO (именованный канал)?
- S_ISLNK(m)
- символьная ссылка? (нет в POSIX.1-1996.)
- S_ISSOCK(m)
- сокет? (нет в POSIX.1-1996.)
stat(pathname, &sb); if (S_ISREG(sb.st_mode)) { /* обработка обычного файла */ }
Определений большинства показанных ранее макросов тестирования типа файла доступно, если определён любой из следующих макросов тестирования свойств: _BSD_SOURCE (в glibc 2.19 и старее), _SVID_SOURCE (в glibc 2.19 и старее) или _DEFAULT_SOURCE (в glibc 2.20 и новее). Также, определение всех макросов, за исключением S_IFSOCK и S_ISSOCK(), доступны при наличии _XOPEN_SOURCE. Определение S_IFSOCK также можно получить определив _XOPEN_SOURCE со значением 500 или более или (начиная с glibc 2.24) определением _XOPEN_SOURCE и _XOPEN_SOURCE_EXTENDED одновременно. Определение S_ISSOCK() доступно, если определён любой из следующих макросов тестирования свойств: _BSD_SOURCE (в glibc 2.19 и старее), _DEFAULT_SOURCE (в glibc 2.20 и новее), _XOPEN_SOURCE со значением 500 или более или _POSIX_C_SOURCE со значением 200112L или более или (начиная с glibc 2.24) _XOPEN_SOURCE и _XOPEN_SOURCE_EXTENDED одновременно. Следующие значения масок определены для компонента режима доступа к файлу в поле st_mode:
S_ISUID | 04000 | бит set-user-ID (смотрите execve(2)) |
S_ISGID | 02000 | бит set-group-ID (смотрите далее) |
S_ISVTX | 01000 | закрепляющий бит (смотрите далее) |
S_IRWXU | 00700 | владелец имеет права на чтение, запись и выполнение |
S_IRUSR | 00400 | владелец имеет право на чтение |
S_IWUSR | 00200 | владелец имеет право на запись |
S_IXUSR | 00100 | владелец имеет право на выполнение |
S_IRWXG | 00070 | группа имеет права на чтение, запись и выполнение |
S_IRGRP | 00040 | имеет право на чтение |
S_IWGRP | 00020 | группа имеет право на запись |
S_IXGRP | 00010 | группа имеет право на выполнение |
S_IRWXO | 00007 | все остальные (вне группы) имеют права на чтение, запись и выполнение |
S_IROTH | 00004 | все остальные имеют право на чтение |
S_IWOTH | 00002 | все остальные имеют право на запись |
S_IXOTH | 00001 | все остальные имеют право на выполнение |
Бит set-group-ID ( S_ISGID) имеет несколько специальных применений. Для каталога он указывает, что используется семантика BSD: файлы, создаваемые в каталоге, наследуют ID группы этого каталога, а не фактический ID группы создающего процесса, а для подкаталогов данного каталога также будет установлен бит S_ISGID. Для исполняемого файла бит set-group-ID заставляет изменить фактический ID группы процесса, который выполняет файл, согласно правилам, описанным в execve(2). Если файл не имеет бита выполнения группой ( S_IXGRP), то бит set-group-ID означает обязательную (mandatory) блокировку файла/записей. Закрепляющий (sticky) бит ( S_ISVTX) на каталоге означает, что файлы в этом каталоге могут быть удалены или переименованы только владельцем файла, владельцем каталога и привилегированным процессом.
СТАНДАРТЫ
Если вам нужно получить определение типа blkcnt_t или blksize_t из <sys/stat.h>, то определите _XOPEN_SOURCE со значением 500 или больше (до включения каких-либо заголовочных файлов). POSIX.1-1990 did not describe the S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK, S_IFDIR, S_IFCHR, S_IFIFO, and S_ISVTX constants, but instead specified the use of the macros S_ISDIR() and so on. The S_IF* constants are present in POSIX.1-2001 and later. Макросы S_ISLNK() и S_ISSOCK() не описаны в POSIX.1-1996, но есть в POSIX.1-2001; первый взят из SVID 4, последний из SUSv2. UNIX V7 (and later systems) had S_IREAD, S_IWRITE, S_IEXEC, and where POSIX prescribes the synonyms S_IRUSR, S_IWUSR, and S_IXUSR.ЗАМЕЧАНИЯ
For pseudofiles that are autogenerated by the kernel, the file size ( stat.st_size; statx.stx_size) reported by the kernel is not accurate. For example, the value 0 is returned for many files under the /proc directory, while various files under /sys report a size of 4096 bytes, even though the file content is smaller. For such files, one should simply try to read as many bytes as possible (and append '\0' to the returned buffer if it is to be interpreted as a string).СМ. ТАКЖЕ
stat(1), stat(2), statx(2), symlink(7)ПЕРЕВОД
Русский перевод этой страницы руководства был сделан Azamat Hackimov <[email protected]>, Dmitriy S. Seregin <[email protected]>, Yuri Kozlov <[email protected]> и Иван Павлов <[email protected]> Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на [email protected]5 февраля 2023 г. | Linux man-pages 6.03 |