Вся інформація в одній команді: stat
stat — це утиліта командного рядка, що показує докладну інформацію про певні файли або файлові системи.
Команда stat включена в GNU Coreutils (пакет базових утиліт для UNIX-подібних ОС).
Вона показує безліч метаданих, включаючи:
- розмір файлу,
- розташування inode,
- права доступу і контекст SELinux,
- час створення і модифікації файлів, файлових систем тощо.
Якщо коротко, stat — зручний і швидкий спосіб збору інформації, яку зазвичай можна отримати використовуючи кілька різних команд.
Як встановити stat в Linux?
Імовірно, у вас вже встановлена stat команда, адже це базова утиліта. Якщо її все ж немає, пакетний менеджер Linux вам в поміч.
Крім цього, ви можете скомпілювати Coreutils з вихідного коду.
Як дізнатися статус файлу?
Під час виклику команди без будь-яких параметрів, stat показує наступну інформацію про файл:
- ім’я файлу,
- розмір файлу в байтах,
- кількість виділених блоків, що займає файл,
- розмір кожного блоку введення-виведення в байтах,
- тип файлу,
- номер Inode,
- кількість жорстких посилань,
- права доступу до файлів,
- Uid — ID користувача й ім’я власника,
- Gid — ID групи та ім’я власника,
- контекст безпеки SELinux,
- час останнього доступу до файлу,
- час останньої зміни вмісту файлу тощо.
Запуск stat забезпечує виведення інфи про конкретний файл або каталог:
$ stat planets.xml
File: planets.xml
Size: 325 Blocks: 8 IO Block: 4096 regular file
Device: fd03h/64771d Inode: 140217 Links: 1
Access: (0664/-rw-rw-r–) Uid: (1000/tux) Gid: (100/users)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2021-08-17 18:26:57.281330711 +1200
Modify: 2021-08-17 18:26:58.738332799 +1200
Change: 2021-08-17 18:26:58.738332799 +1200
Birth: 2021-08-17 18:26:57.281330711 +1200
Як аналізувати виведення?
Тим, хто звик аналізувати виведення за допомогою інших утиліт, таких як awk, є опція –terse (-t). Вона форматує виведення без заголовків або розривів рядків.
$ stat –terse planets.xml
planets.xml 325 8 81b4 100977 100 fd03 140217 1 0 0 1629181617 1629181618 1629181618 1629181617 4096 unconfined_u:object_r:user_home_t:s0
Як задати власний формат?
Ви можете визначити власний формат виведення, використовуючи опцію –printf і синтаксис, аналогічний printf. Кожен атрибут, про який повідомляє stat, має послідовність форматів (%c для SELinux, %n для імені файлу тощо). Ви можете вибрати, що саме хочете бачити у звіті.
$ stat –printf=“%n\n%C\n“ planets.xml
planets.xml
unconfined_u:object_r:user_home_t:s0
$ $ stat –printf=“Name: %n\nModified: %y\n“ planets.xml
Name: planets.xml
Modified: 2021-08-17 18:26:58.738332799 +1200
Ось кілька поширених послідовностей форматів:
- %a права доступу,
- %F тип файлу,
- %n ім’я файлу,
- %U ім’я користувача,
- %u ідентифікатор користувача,
- %g ідентифікатор групи,
- %w час народження,
- %y час модифікації.
Повний список послідовностей форматів доступний на сторінці керівництва stat і на Coreutils.
Підсумок
Якщо ви коли-небудь парсили висновок ls -l, то ви оціните гнучкість команди stat. Незалежно від того, чи використовуєте ви всю отриману інформацію, яка йде за замовчуванням, або створюєте власні запити, команда stat забезпечить легкий доступ до необхідних даних.