В одной из прошлых статей мы говорили о том, что у каждого файла и папки в файловой системе есть так называемая структура Inode в которой хранятся метаданные этого объекта. Там хранится владелец, группа владельца, время изменения, создания и доступа к файлу, а также другая информация. Её можно увидеть не только с помощью инструментов отладки файловой системы.
Часть из этой информации показывает утилита ls, но если вам нужно больше, то можно воспользоваться командой stat. В этой статье мы рассмотрим как пользоваться этой командой в Linux.
Команда stat в Linux
Синтаксис команды очень простой. Ей надо передать опции и путь к файлу, для которого надо посмотреть информацию:
$ stat опции /путь/к/файлу
Опции передавать не обязательно и их совсем не много:
- -L, dereference — показывать информацию о файле вместо символической ссылки;
- -f, —file-system — показывать информацию о файловой системе в которой расположен файл;
- -c, —format — позволяет указать формат вывода вместо стандартного, каждый файл выводится с новой строки;
- —printf — аналогично —format, только для новой строки надо использовать n;
- -t, —terse — показ информации в очень кратком виде, в одну строку;
- —version — показать версию утилиты.
Это все опции команды. Теперь давайте разберемся с примерами использования. Чтобы посмотреть информацию о файле достаточно запустить программу без опций передав ей путь к файлу, например /etc/passwd:
stat /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 самой ссылки:
stat /etc/passwdlink
Для того чтобы увидеть информацию о файле, на который указывает ссылка надо использовать опцию -L:
stat -L /etc/passwdlink
Утилите можно передать не один файл, а несколько:
stat /etc/passwd /etc/group
И тут уже понадобиться возможность настройки формата вывода. Для форматирования вывода можно использовать такие последовательности символов:
- %A — права доступа;
- %b — количество занятых блоков;
- %F — тип файла;
- %g — идентификатор группы файла;
- %G — имя группы файла;
- %i — идентификатор Inode;
- %n — имя файла;
- %s — размер файла;
- %u — идентификатор владельца файла;
- %U — имя владельца файла;
- %x — время последнего доступа;
- %y — время последней модификации контента;
- %z — время последнего изменения контента или атрибутов.
Это далеко не все возможные последовательности, больше вы моете найти в справке по утилите:
man stat
Например, давайте выведем только имя, файла, и время последней модификации его содержимоего:
stat --printf "File %n has been modified %yn" /etc/passwd /etc/group
Если вы хотите посмотреть информацию о файловой системе, в которой расположен файл, то надо использовать опцию -f:
stat -f /etc/passwd
Давайте рассмотрим что означают поля, которые выводит утилита:
- Файл (File) — имя файла;
- Тип (Type) — тип файловой системы;
- ID — идентификатор файловой системы;
- Длина имени (Namelen) — максимальная длина имени в файловой системе;
- Размер блока (Block size) — объем данных при запросе на чтение или запись для оптимальной скорости работы;
- Базисный размер блока (Fundamental block size) — физический размер блока в файловой системе.
Дальше идут общее количество блоков в системе и количество свободных блоков.
Выводы
Из этой небольшой статьи вы узнали что из себя представляет команда stat Linux. Как видите, это очень полезная команда, позволяющая смотреть низкоуровневую информацию о файлах и файловой системе.
Источник: losst.ru