Способи оплати Abuse

Що робить команда stat в Linux

14.11.2021, 16:15

У кожного файлу і папки у файловій системі є так звана структура Inode, в якій зберігаються метадані цього об'єкта. Там зберігається власник, група власника, час зміни, створення і доступу до файлу, а також інша інформація. Її можна побачити не лише за допомогою інструментів налагодження файлової системи. Певна інформація показує утиліта ls, але якщо вам потрібно більше, то можна скористатися командою stat. Далі розповімо як користуватися цією командою в Linux.

Що дає команда

Синтаксис команди простий. Їй треба передати опції та шлях до файлу, для якого треба подивитися інформацію:

$ stat [options] /path/to/file

Опції передавати не обов'язково і їх зовсім не багато:

-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) - фізичний розмір блоку у файловій системі.

Далі йдуть загальна кількість блоків у системі та кількість вільних блоків.