- Stat linux ��� ��� �����
- ОПИСАНИЕ
- ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
- НАЙДЕННЫЕ ОШИБКИ
- СООТВЕТСТВИЕ СТАНДАРТАМ
- Команда Stat в Linux
- Stat Command in Linux
- Эта статья объясняет, как использовать stat команду.
- Использование stat команды
- Отображение информации о файловой системе
- Разыменование (Follow) Симлинки
- Настройка вывода
- Вывод
- Команда stat в Linux
- Команда stat в Linux
- Выводы
Stat linux ��� ��� �����
int stat(const char * file_name , struct stat * buf );
int fstat(int filedes , struct stat * buf );
int lstat(const char * file_name , struct stat * buf );
ОПИСАНИЕ
Эти функции возвращают информацию об указанном файле. Для этого не требуется иметь права доступа к файлу, хотя потребуются права поиска во всех каталогах, указанных в полном имени файла.
stat возвращает информацию о файле file_name и заполняет буфер buf . lstat идентична stat , но в случае символьных сылок она возвращает информацию о самой ссылке, а не о файле, на который она указывает. fstat идентична stat , только возвращается информация об открытом файле, на который указывает filedes (возвращаемый open (2)), а не о file_name .
Все эти функции возвращают структуру stat , которая содержит следующие поля:
Поле st_size задает размер файла (если он обычный или является символьной ссылкой) в байтах. Размер символьной ссылки — длина пути файла на который она сылается, без конечного NUL.
Поле st_blocks задает размер файла в 512-байтных блоках. (Оно может быть меньше, чем st_size /512 например, когда в файле есть пропуски.) st_blksize задает «предпочтительный» размер блока для эффективного ввода/вывода в файловой системе. (Запись в файл более мелкими порциями может привести к некорректному чтению/изменению/повторной записи информации).
Некоторые файловые системы Linux не реализуют все метки времени. Некоторые файловые системы позволяют обращаться к файлам так, что не происходит никаких изменений в поле st_atime . (См. ‘noatime’ в mount (8). Поле st_atime изменяется при доступе к файлу, например, при execve (2), mknod (2), pipe (2), utime (2) и read (2) (если прочитано больше нуля байтов). Другие функции, например, mmap (2), могут изменять, а могут и не изменять st_atime . Поле st_mtime изменяется при модификациях файла, например, при выполнении mknod (2), truncate (2), utime (2) и write (2) (если записано больше нуля байтов). Более того, поле st_mtime каталога изменяется при создании и удалении файлов в этом каталоге. Поле st_mtime не изменяется при изменении владельца, группы, количества жестких ссылок файла или режима доступа к нему. Поле st_ctime изменяется при записи или установке информации об inode (владельце, группе, количестве ссылок, режиме и т.д.).
Указанные далее макросы POSIX проверяют, является ли файл: S_ISLNK(m) символьной ссылкой (Нет в POSIX.1-1996.) S_ISREG(m) обычным файлом S_ISDIR(m) каталогом S_ISCHR(m) символьным устройством S_ISBLK(m) блочным устройством S_ISFIFO(m) каналом FIFO S_ISSOCK(m) сокетом
Описанные ниже флаги определены для поля st_mode :
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 |
S_ISUID | 0004000 | бит setuid |
S_ISGID | 0002000 | бит setgid (смотри ниже) |
S_ISVTX | 0001000 | бит принадлежности (смотри ниже) |
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 | все прочие имеют права выполнения |
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
НАЙДЕННЫЕ ОШИБКИ
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX не описывает биты S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK, S_IFDIR, S_IFCHR, S_IFIFO, S_ISVTX, но вместо этого требует использовать макросы S_ISDIR() и т.п. Макросов S_ISLNK и S_ISSOCK нет в стандарте POSIX.1-1996, но оба они могут быть в следующем стандарте POSIX; бывший SVID 4v2, последний SVIDv2. Unix V7 (и более поздние системы) имеют S_IREAD, S_IWRITE, S_IEXEC, тогда как POSIX требует присутствия синонимов S_IRUSR, S_IWUSR, S_IXUSR.
Источник
Команда Stat в Linux
Stat Command in Linux
Эта статья объясняет, как использовать stat команду.
stat утилита командной строки, которая отображает подробную информацию о данных файлах или файловых системах
Использование stat команды
Синтаксис stat команды следующий:
Давайте посмотрим на следующий пример:
Вывод будет выглядеть примерно так:
При вызове без каких-либо параметров stat отображается следующая информация о файле:
- File — имя файла.
- Size — Размер файла в байтах.
- Blocks — количество выделенных блоков, которые занимает файл.
- IO Block — размер в байтах каждого блока.
- File type — (например, обычный файл, каталог, символическая ссылка . )
- Device — номер устройства в шестнадцатеричном и десятичном виде.
- Inode — номер Inode.
- Links — Количество жестких ссылок.
- Access — Права доступа к файлам в числовых и символьных методах.
- Uid — идентификатор пользователя и имя владельца .
- Gid — идентификатор группы и имя владельца.
- Context — контекст безопасности SELinux.
- Access — последний раз, когда к файлу обращались.
- Modify — последний раз, когда содержимое файла было изменено.
- Change — последний раз, когда атрибут файла или содержимое были изменены.
- Birth — Время создания файла (не поддерживается в Linux).
Отображение информации о файловой системе
Чтобы получить информацию о файловой системе, в которой находится данный файл, вместо информации о самом файле, используйте параметр -f , ( —file-system ):
Вывод команды будет выглядеть так:
Когда stat вызывается с -f параметром, он показывает следующую информацию:
- File — имя файла.
- ID — ID файловой системы в шестнадцатеричном формате.
- Namelen — максимальная длина имен файлов.
- Fundamental block size — размер каждого блока в файловой системе.
- Blocks:
- Total — общее количество блоков в файловой системе.
- Free — количество свободных блоков в файловой системе.
- Available — количество бесплатных блоков, доступных для пользователей без полномочий root.
- Inodes:
- Total — общее количество inode в файловой системе.
- Free — количество бесплатных инодов в файловой системе.
Разыменование (Follow) Симлинки
По умолчанию stat не следует символическим ссылкам . Если вы запустите команду по символической ссылке, вывод будет содержать информацию о символической ссылке, а не о файле, на который она указывает:
Для разыменования (следования) символической ссылки и отображения информации о файле, на который указывает символическая ссылка, используйте параметр -L , ( —dereference ):
Настройка вывода
Команда stat имеет две опции, которые позволяют вам настроить вывод в соответствии с вашими потребностями:, -c ( —format=»format» ) и —printf=»format» .
Разница между этими двумя опциями заключается в том, что когда два или более файлов используются в качестве оперантов, —format автоматически добавляется новая строка после вывода каждого операнда. В —printf трактует обратный слеш.
Существует множество директив формата для файлов и файловых систем, которые можно использовать с —format и —printf .
Например, чтобы просмотреть только тип файла, который вы будете использовать:
Вы можете комбинировать любое количество директив форматирования и, при необходимости, использовать пользовательские разделители между ними. Разделитель может быть одним символом или строкой:
Чтобы интерпретировать специальные символы, такие как перевод строки или табуляция, используйте —printf параметр:
\n печатает новую строку:
stat Также может отображать информацию в сжатой форме. Этот формат полезен для анализа другими утилитами.
Вызовите команду с опцией -t ( —terse ), чтобы напечатать вывод в краткой форме:
Для получения полного списка всех директив формата для файлов и файловых систем введите man stat или stat —help в вашем терминале.
Вывод
Команда stat печатает информацию о заданных файлах и файловых системах.
В Linux есть несколько других команд, которые могут отображать информацию о заданных файлах, ls причем наиболее часто используемую, но она показывает только часть информации, предоставленной stat командой.
Источник
Команда stat в Linux
В одной из прошлых статей мы говорили о том, что у каждого файла и папки в файловой системе есть так называемая структура Inode в которой хранятся метаданные этого объекта. Там хранится владелец, группа владельца, время изменения, создания и доступа к файлу, а также другая информация. Её можно увидеть не только с помощью инструментов отладки файловой системы.
Часть из этой информации показывает утилита ls, но если вам нужно больше, то можно воспользоваться командой stat. В этой статье мы рассмотрим как пользоваться этой командой в Linux.
Команда stat в Linux
Синтаксис команды очень простой. Ей надо передать опции и путь к файлу, для которого надо посмотреть информацию:
$ stat опции /путь/к/файлу
Опции передавать не обязательно и их совсем не много:
- -L, dereference — показывать информацию о файле вместо символической ссылки;
- -f, —file-system — показывать информацию о файловой системе в которой расположен файл;
- -c, —format — позволяет указать формат вывода вместо стандартного, каждый файл выводится с новой строки;
- —printf — аналогично —format, только для новой строки надо использовать \n;
- -t, —terse — показ информации в очень кратком виде, в одну строку;
- —version — показать версию утилиты.
Это все опции команды. Теперь давайте разберемся с примерами использования. Чтобы посмотреть информацию о файле достаточно запустить программу без опций передав ей путь к файлу, например /etc/passwd:
Рассмотрим что означает вывод программы:
- Файл (File) — путь к файлу по которому показывается информация;
- Размер (Size) — размер файла в байтах;
- Блок В/В (IO Block) — размер блока файловой системы в байтах;
- Блоков (Blocks) — количество блоков файловой системы, занятых файлом;
- Устройство (Device) — идентификатор устройства, например HDD, на котором сохранён файл;
- Inode — уникальный номер Inode этого файла;
- Ссылки (Links) — количество жестких ссылок на этот файл;
- Доступ (Access) — права доступа к файлу;
- Uid — идентификатор и имя пользователя-владельца файла;
- Gid — идентификатор и имя группы файла;
- Доступ (Access) — время последнего доступа к файлу;
- Модифицирован (Modify) — время когда в последний раз изменялся контент файла;
- Изменен (Change) — время, когда в последний раз изменялись атрибуты файла или контент файла;
- Создан (Birth) — зарезервировано для отображения первоначальной даты создания файла, но пока ещё не реализовано.
Надо ещё немного поговорить про формат времени. Например, время последнего доступа к файлу — 2020-12-02 18:25:01.043831739 +0200. Это время показывается с учётом временной зоны. А цифры +0200 показывают, что временная зона на компьютере, который создал или модифицировал этот файл на два часа больше чем UTC, то есть Europe/Kiev в зимнее время.
Если попробовать передать утилите символическую ссылку, то она покажет информацию только из Inode самой ссылки:
Для того чтобы увидеть информацию о файле, на который указывает ссылка надо использовать опцию -L:
stat -L /etc/passwdlink
Утилите можно передать не один файл, а несколько:
stat /etc/passwd /etc/group
И тут уже понадобиться возможность настройки формата вывода. Для форматирования вывода можно использовать такие последовательности символов:
- %A — права доступа;
- %b — количество занятых блоков;
- %F — тип файла;
- %g — идентификатор группы файла;
- %G — имя группы файла;
- %i — идентификатор Inode;
- %n — имя файла;
- %s — размер файла;
- %u — идентификатор владельца файла;
- %U — имя владельца файла;
- %x — время последнего доступа;
- %y — время последней модификации контента;
- %z — время последнего изменения контента или атрибутов.
Это далеко не все возможные последовательности, больше вы моете найти в справке по утилите:
Например, давайте выведем только имя, файла, и время последней модификации его содержимоего:
stat —printf «File %n has been modified %y\n» /etc/passwd /etc/group
Если вы хотите посмотреть информацию о файловой системе, в которой расположен файл, то надо использовать опцию -f:
stat -f /etc/passwd
Давайте рассмотрим что означают поля, которые выводит утилита:
- Файл (File) — имя файла;
- Тип (Type) — тип файловой системы;
- ID — идентификатор файловой системы;
- Длина имени (Namelen) — максимальная длина имени в файловой системе;
- Размер блока (Block size) — объем данных при запросе на чтение или запись для оптимальной скорости работы;
- Базисный размер блока (Fundamental block size) — физический размер блока в файловой системе.
Дальше идут общее количество блоков в системе и количество свободных блоков.
Выводы
Из этой небольшой статьи вы узнали что из себя представляет команда stat Linux. Как видите, это очень полезная команда, позволяющая смотреть низкоуровневую информацию о файлах и файловой системе.
Источник