Главная » 2017 » Ноябрь » 17 » man 7 inode
00:08
man 7 inode

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


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 на
родительском каталоге (смотрите ниже). Идентификатор группы файла можно
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_atime; statx.stx_mtime

Метка времени последнего изменения файла. Изменяется при изменении файла,
например, при выполнении mknod(2), truncate(2), utime(2) и write(2) (если
записано не менее одного байта). Кроме того, у каталога метка mtime
изменяется при создании и удалении файлов в этом каталоге. Метка mtime не
изменяется при изменении владельца, группы, количества жёстких ссылок или
режима доступа.

Reiserfs. В файловых системах, не поддерживающих метки времени короче секунды, в
наносекундных полях структур stat и statx возвращается значение 0.

Тип файла и режим
Поле 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 сокет
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.)

The preceding code snippet could thus be rewritten as:

stat(pathname, &sb);
if (S_ISREG(sb.st_mode)) {
/* обработка обычного файла */
}

Определений большинства показанных ранее макросов тестирования типа файла
доступно, если определён любой из следующих макросов тестирования свойств:
тестирования свойств: _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
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 группы этого каталога, а не фактическую группу создающего процесса, а
для подкаталогов данного каталога также будет установлен бит S_ISGID. Если файл не
имеет бита выполнения группой (S_IXGRP), то бит set-group-ID означает обязательную
(mandatory) блокировку файла/записей.

Закрепляющий (sticky) бит (S_ISVTX) на каталоге означает, что файлы в этом
каталоге могут быть удалены или переименованы только владельцем файла, владельцем
каталога и привилегированным процессом.



СООТВЕТСТВИЕ СТАНДАРТАМ


Если вам нужно получить определение типа blkcnt_t или blksize_t из <sys/stat.h>,
то определите _XOPEN_SOURCE со значением 500 или больше (до включения каких-либо
заголовочных файлов).

В POSIX.1-1990 не описаны константы S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK,
S_IFDIR, S_IFCHR, S_IFIFO, S_ISVTX, вместо них указано использовать макросы
S_ISDIR() и т.п. Константы S_IF* определены в POSIX.1-2001 и новее.

Макросы S_ISLNK() и S_ISSOCK() не описаны в POSIX.1-1996, но есть в POSIX.1-2001;
первый взят из SVID 4, последний из SUSv2.

В UNIX V7 (и более поздних системах) есть S_IREAD, S_IWRITE, S_IEXEC, для которых
в POSIX есть синонимы S_IRUSR, S_IWUSR, S_IXUSR.



ЗАМЕЧАНИЯ


Для псевдо-файлов, автоматически генерируемых ядром, размер файла (stat.st_size;

Категория: (7) Различные описания, соглашения и прочее | Просмотров: 942 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar