10.3. stat – Интерпретация результатов stat()¶stat – Interpreting stat() results
Модуль stat определяет константы и функции для интерпретации результатов os.stat(), os.fstat() и os.lstat() (если они существуют). За полными сведениями о вызовах stat(), fstat() и lstat() обращайтесь к документации вашей системы.
Модуль stat определяет следующие функции для проверки конкретных типов файлов:
- stat.S_ISDIR(mode)¶
- Возвращает ненулевое значение, если режим соответствует каталогу.
- stat.S_ISCHR(mode)¶
- Возвращает ненулевое значение, если режим соответствует файлу символьного устройства.
- stat.S_ISBLK(mode)¶
- Возвращает ненулевое значение, если режим соответствует файлу блочного устройства.
- stat.S_ISREG(mode)¶
- Возвращает ненулевое значение, если режим соответствует обычному файлу.
- stat.S_ISFIFO(mode)¶
- Возвращает ненулевое значение, если режим соответствует FIFO (именованному каналу).
- stat.S_ISLNK(mode)¶
- Возвращает ненулевое значение, если режим соответствует символической ссылке.
- stat.S_ISSOCK(mode)¶
- Возвращает ненулевое значение, если режим соответствует сокету.
Определены ещё две функции для более общей работы с режимом файла:
- stat.S_IMODE(mode)¶
- Возвращает часть режима файла, которая может быть установлена с помощью os.chmod() – то есть биты разрешений файла, а также биты sticky, set-group-id и set-user-id (в системах, которые их поддерживают).
- stat.S_IFMT(mode)¶
- Возвращает часть режима файла, которая описывает тип файла (используется функциями S_IS*() выше).
Обычно для проверки типа файла используются функции os.path.is*(); функции, описанные здесь, бывают полезны, когда выполняется несколько проверок одного файла, и хочется избежать накладных расходов на системный вызов stat() для каждой проверки. Они также пригодятся при получении информации о файле, которая не обрабатывается модулем os.path, например, проверки блочных и символьных устройств.
Пример:
import os, sys
from stat import *
def walktree(top, callback):
'''рекурсивно обойти дерево каталогов, начиная с top,
вызов функции обратного вызова для каждого обычного файла'''
for f in os.listdir(top):
pathname = os.path.join(top, f)
mode = os.stat(pathname)[ST_MODE]
if S_ISDIR(mode):
# Это каталог, рекурсивно зайти в него
walktree(pathname, callback)
elif S_ISREG(mode):
# Это файл, вызвать функцию обратного вызова
callback(pathname)
else:
# Неизвестный тип файла, вывести сообщение
print('Skipping %s' % pathname)
def visitfile(file):
print('visiting', file)
if __name__ == '__main__':
walktree(sys.argv[1], visitfile)
Все приведённые ниже переменные – это просто символические индексы в 10-кортеже, возвращаемом os.stat(), os.fstat() или os.lstat().
- stat.ST_MODE¶
- Режим защиты inode.
- stat.ST_INO¶
- Номер inode.
- stat.ST_DEV¶
- Устройство, на котором находится inode.
- stat.ST_NLINK¶
- Количество ссылок на inode.
- stat.ST_UID¶
- Идентификатор пользователя владельца.
- stat.ST_GID¶
- Идентификатор группы владельца.
- stat.ST_SIZE¶
- Размер обычного файла в байтах; количество данных, ожидающих чтения на некоторых специальных файлах.
- stat.ST_ATIME¶
- Время последнего доступа.
- stat.ST_MTIME¶
- Время последнего изменения.
- stat.ST_CTIME¶
- «ctime» в том виде, в котором он сообщается операционной системой. В некоторых системах (например, Unix) это время последнего изменения метаданных, а в других (например, Windows) – время создания (подробнее см. документацию платформы).
Интерпретация «размера файла» меняется в зависимости от типа файла. Для обычных файлов это размер файла в байтах. Для FIFO (именованных каналов) и сокетов в большинстве вариантов Unix (включая Linux) «размер» – это количество байтов, ожидающих чтения на момент вызова os.stat(), os.fstat() или os.lstat(); это может быть полезно, например, для опроса одного из этих специальных файлов после неблокирующего открытия. Значение поля размера для других символьных и блочных устройств сильно варьируется в зависимости от реализации базового системного вызова.
Приведённые ниже переменные определяют флаги, используемые в поле ST_MODE.
Использование приведенных выше функций более переносимо, чем использование первого набора флагов:
- stat.S_IFMT
- Битовая маска для битовых полей типа файла.
- stat.S_IFSOCK¶
- Сокет.
- stat.S_IFLNK¶
- Символическая ссылка.
- stat.S_IFREG¶
- Обычный файл.
- stat.S_IFBLK¶
- Блочное устройство.
- stat.S_IFDIR¶
- Каталог.
- stat.S_IFCHR¶
- Символьное устройство.
- stat.S_IFIFO¶
- FIFO.
Следующие флаги также можно использовать в аргументе mode функции os.chmod():
- stat.S_ISUID¶
- Бит setuid.
- stat.S_ISGID¶
- Бит установки идентификатора группы. Этот бит имеет несколько специальных применений. Для каталога он указывает, что для этого каталога должна использоваться семантика BSD: создаваемые там файлы наследуют свой идентификатор группы от каталога, а не от эффективного идентификатора группы создающего процесса, а создаваемые там каталоги также получат установленный бит S_ISGID. Для файла, у которого не установлен бит выполнения для группы (S_IXGRP), бит установки идентификатора группы указывает на обязательную блокировку файла/записи (см. также S_ENFMT).
- stat.S_ISVTX¶
- Sticky bit. Когда этот бит установлен для каталога, это означает, что файл\nв этом каталоге может быть переименован или удалён только владельцем\nфайла, владельцем каталога или привилегированным процессом.
- stat.S_IRWXU¶
- Маска для прав владельца файла.
- stat.S_IRUSR¶
- Владелец имеет право на чтение.
- stat.S_IWUSR¶
- Владелец имеет право на запись.
- stat.S_IXUSR¶
- Владелец имеет право на выполнение.
- stat.S_IRWXG¶
- Маска для прав группы.
- stat.S_IRGRP¶
- Группа имеет право на чтение.
- stat.S_IWGRP¶
- Группа имеет право на запись.
- stat.S_IXGRP¶
- Группа имеет право на выполнение.
- stat.S_IRWXO¶
- Маска прав для остальных (не входящих в группу).
- stat.S_IROTH¶
- Остальные имеют право на чтение.
- stat.S_IWOTH¶
- Остальные имеют право на запись.
- stat.S_IXOTH¶
- Остальные имеют право на выполнение.
- stat.S_ENFMT¶
- Принудительная блокировка файлов System V. Этот флаг используется совместно с S_ISGID:\nблокировка файлов/записей применяется к файлам, у которых не установлен бит выполнения\nгруппы (S_IXGRP).
Следующие флаги можно использовать в аргументе flags функции os.chflags():
- stat.UF_NODUMP¶
- Не сбрасывать файл в дамп.
- stat.UF_IMMUTABLE¶
- Файл нельзя изменить.
- stat.UF_APPEND¶
- Файл можно только дополнять.
- stat.UF_NOUNLINK¶
- Файл нельзя переименовать или удалить.
- stat.UF_OPAQUE¶
- Каталог непрозрачен при просмотре через стек объединения.
- stat.SF_ARCHIVED¶
- Файл может быть архивирован.
- stat.SF_IMMUTABLE¶
- Файл нельзя изменить.
- stat.SF_APPEND¶
- Файл можно только дополнять.
- stat.SF_NOUNLINK¶
- Файл нельзя переименовать или удалить.
- stat.SF_SNAPSHOT¶
- Файл является снимком.
Для получения дополнительной информации обратитесь к man-странице chflags(2) в системах *BSD или Mac OS.