У кожного файлу і папки у файловій системі є так звана структура 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
) - фізичний розмір блоку у файловій системі.
Далі йдуть загальна кількість блоків у системі та кількість вільних блоків.