Что делает команда stat в Linux

14.11.2021

У каждого файла и папки в файловой системе есть так называемая структура Inode в которой хранятся метаданные этого объекта. Там хранится владелец, группа владельца, время изменения, создания и доступа к файлу, а также другая информация. Её можно увидеть не только с помощью инструментов отладки файловой системы. Определенная информация показывает утилита ls, но если вам нужно больше, то можно воспользоваться командой stat. Дальше расскажем как пользоваться этой командой в Linux.

Что дает команда

Синтаксис команды простой. Ей надо передать опции и путь к файлу, для которого надо посмотреть информацию:

$ stat опции /путь/к/файлу

Опции передавать не обязательно и их совсем не много:

 

-L, dereference - показывать информацию о файле вместо символической ссылки;

-f, --file-system - показывать информацию о файловой системе в которой расположен файл;

-c, --format - позволяет указать формат вывода вместо стандартного, каждый файл выводится с новой строки;

--printf - аналогично --format, только для новой строки надо использовать ;

-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/passwdlin

Чтобы увидеть информацию о файле, на который указывает ссылка надо использовать опцию -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 %y " /etc/passwd /etc/group

Если вы хотите посмотреть информацию о файловой системе, в которой расположен файл, то надо использовать опцию -f:

stat -f /etc/passwd

Рассмотрим что означают поля, которые выводит утилита:

 

Файл (File) - имя файла;

Тип (Type) - тип файловой системы;

ID - идентификатор файловой системы;

Длина имени (Namelen) - максимальная длина имени в файловой системе;

Размер блока (Block size) - объем данных при запросе на чтение или запись для оптимальной скорости работы;

Базисный размер блока (Fundamental block size) - физический размер блока в файловой системе.

Дальше идут общее количество блоков в системе и количество свободных блоков.