Як використовувати команду stat в Linux

Команда Linux stat показує вам набагато більше деталей, ніж ls. Зазирніть за завісу за допомогою цієї інформативної та настроюваної утиліти. Ми покажемо вам, як ним користуватися.

stat бере вас за лаштунки

Команда ls чудово справляється з тим, що вона робить — і вона робить багато — але з Linux, здається, завжди є спосіб піти глибше і побачити, що лежить під поверхнею. І часто це не просто випадок підняття краю килима. Ви можете розірвати підлогові дошки, а потім викопати яму. Ви можете очистити Linux як цибулю.

ls покаже вам велику кількість інформації про файл, наприклад, які дозволи для нього встановлені, і наскільки він великий, і чи є це файлом чи символічним посиланням. Щоб відобразити цю інформацію, ls зчитує її з a Структура файлової системи, яка називається inode.

Кожен файл і каталог мають індекс. Inode тримається метадані про файл, наприклад, які блоки файлової системи він займає, а також позначки дати, пов’язані з файлом. Inode — це як бібліотечна картка для файлу. Але ls покаже вам лише частину інформації. Щоб побачити все, нам потрібно скористатися командою stat.

Як і ls, команда stat має багато опцій. Це робить його чудовим кандидатом для використання псевдонімів. Після того, як ви виявили певний набір параметрів, які змушують stat давати вам потрібний результат, оберніть його в псевдонім або функцію оболонки. Це робить його набагато зручнішим у використанні, і вам не доведеться пам’ятати загадковий набір параметрів командного рядка.

Швидке порівняння

Давайте використаємо ls, щоб дати нам довгий список (параметр -l) із зрозумілими для людини розмірами файлів (параметр -h):

ls -lh ana.h

Зліва направо інформація, яку надає ls:

Найпершим символом є дефіс «-», і це говорить нам, що файл є звичайним файлом, а не сокетом, символічним посиланням чи іншим типом об’єкта.
Дозволи власника, групи та інші дозволи перераховані у вісімковому форматі.
Кількість жорстких посилань, що вказують на цей файл. У цьому випадку, і в більшості випадків, він буде один.
Власником файлу є Дейв.
Власник групи — Дейв.
Розмір файлу 802 байта.
Файл востаннє змінено в п’ятницю, 13 грудня 2015 року.
Ім’я файлу ana.c.

Давайте подивимося зі статистикою:

stat ana.h

Інформація, яку ми отримуємо від статистики:

Файл: ім’я файлу. Зазвичай воно збігається з ім’ям, яке ми передали stat у командному рядку, але воно може відрізнятися, якщо ми дивимося на символічне посилання.
Розмір: розмір файлу в байтах.
Блоки: кількість блоків файлової системи, необхідних файлу для збереження на жорсткому диску.
IO Block: Розмір блоку файлової системи.
Тип файлу: тип об’єкта, який описують метадані. Найпоширенішими типами є файли та каталоги, але вони також можуть бути посиланнями, сокетами або іменованими каналами.
Пристрій: номер пристрою в шістнадцятковий і десятковий. Це ідентифікатор жорсткого диска, на якому зберігається файл.
Inode: номер inode. Тобто ідентифікаційний номер цього inode. Разом номер inode та номер пристрою однозначно ідентифікують файл.
Посилання: це число вказує, скільки жорстких посилань вказують на цей файл. Кожне жорстке посилання має свій власний індекс. Тож інший спосіб подумати про цю цифру — це скільки інодів вказують на цей один файл. Кожен раз, коли жорстке посилання створюється або видаляється, це число буде змінюватися вгору або вниз. Коли він досягає нуля, сам файл видаляється, а inode видаляється. Якщо ви використовуєте stat у каталозі, це число представляє кількість файлів у каталозі, включаючи «». запис для поточного каталогу та запис «..» для батьківського каталогу.
Доступ: Дозволи на файли відображаються у вісімковій і традиційній формі rwx (формати читання, запису, виконання).
Uid: ідентифікатор користувача та ім’я облікового запису власника.
Gid: ідентифікатор групи та назва облікового запису власника.
Доступ: позначка часу доступу. Не так просто, як може здатися. Сучасні дистрибутиви Linux використовують схему під назвою relatime, яка намагається це зробити оптимізувати записи на жорсткий диск, необхідні для оновлення часу доступу. Простіше кажучи, час доступу оновлюється, якщо він старший за змінений час.
Змінити: мітка часу модифікації. Це час, коли вміст файлу було востаннє змінено. (На щастя, вміст цього файлу востаннє змінювався чотири роки тому.)
Змінити: мітка часу зміни. Це час останньої зміни атрибутів або вмісту файлу. Якщо ви змінюєте файл, встановлюючи нові права доступу до файлу, мітка часу зміни буде оновлена ​​(оскільки змінилися атрибути файлу), але змінена позначка часу не буде оновлена ​​(оскільки вміст файлу не було змінено).
Народження: зарезервовано для відображення початкової дати створення файлу, але це не реалізовано в Linux.

  Як створити власний NAS Linux з відкритим медіа-сховищем

Розуміння позначок часу

Часові позначки чутливі до часового поясу. -0500 в кінці кожного рядка показує, що цей файл був створений на комп’ютері в a Всесвітній координований час (UTC) часовий пояс, який на п’ять годин випереджає часовий пояс поточного комп’ютера. Отже, цей комп’ютер на п’ять годин відстає від комп’ютера, який створив цей файл. Фактично, файл було створено на комп’ютері з часовим поясом Великобританії, і ми розглядаємо його тут на комп’ютері в часовому поясі США Eastern Standard.

Зміна та зміна часових позначок може викликати плутанину, оскільки для непосвячених їхні імена звучать так, ніби вони означають те саме.

Давайте використаємо chmod, щоб змінити права доступу до файлу під назвою ana.c. Ми зробимо це доступним для всіх. Це не вплине на вміст файлу, але вплине на атрибути файлу.

chmod +w ana.c

А потім ми будемо використовувати stat, щоб подивитися на часові позначки:

stat ana.c

Помітку часу зміни було оновлено, а змінене – ні.

Змінена позначка часу буде оновлена, лише якщо буде змінено вміст файлу. Часова позначка зміни оновлюється як для змін вмісту, так і для зміни атрибутів.

Використання Stat з кількома файлами

Щоб мати звіт про stat одночасно для кількох файлів, передайте імена файлів у командний рядок stat:

stat ana.h ana.o

Щоб використовувати stat для набору файлів, використовуйте відповідність шаблону. Знак питання «?» представляє будь-який окремий символ, а зірочка «*» позначає будь-який рядок символів. Ми можемо наказати stat звітувати про будь-який файл під назвою «ana» з однолітерним розширенням за допомогою цієї команди:

stat ana.?

Використання stat для звіту про файлові системи

stat може повідомляти про стан файлових систем, а також про стан файлів. Параметр -f (файлова система) повідомляє stat про файлову систему, на якій знаходиться файл. Зверніть увагу, що ми також можемо передати каталог, наприклад «/», у stat замість імені файлу.

stat -f ana.c

Інформаційна статистика дає нам:

  Найкращі альтернативи додаткам Mac для Linux

Файл: ім’я файлу.
ID: ідентифікатор файлової системи в шістнадцятковому форматі.
Namelen: Максимально допустима довжина для імен файлів.
Тип: тип файлової системи.
Розмір блоку: кількість даних для запитів на читання для оптимальної швидкості передачі даних.
Розмір основного блоку: розмір кожного блоку файлової системи.

Блоки:

Усього: загальна кількість всіх блоків у файловій системі.
Безкоштовно: кількість вільних блоків у файловій системі.
Доступно: кількість безкоштовних блоків, доступних для звичайних (без root) користувачів.

Іноди:

Усього: загальна кількість inodes у файловій системі.
Free: Кількість вільних inodes у файловій системі.

Розіменування символічних посилань

Якщо ви використовуєте stat для файлу, який насправді є символічним посиланням, він повідомляє про посилання. Якщо ви хочете, щоб stat повідомляв про файл, на який вказує посилання, використовуйте параметр -L (розіменування). Файл code.c є символічним посиланням на ana.c. Давайте подивимося на це без параметра -L:

stat code.c

Ім’я файлу показує code.c, що вказує на ( -> ) ana.c. Розмір файлу всього 11 байт. Для збереження цього посилання немає блоків. Тип файлу вказано як символьне посилання.

Зрозуміло, що тут ми не розглядаємо фактичний файл. Зробимо це ще раз і додамо параметр -L:

stat -L code.c

Тепер тут відображаються деталі файлу для файлу, на який вказує символічне посилання. Але зверніть увагу, що ім’я файлу все ще дається як code.c. Це ім’я посилання, а не цільового файлу. Це відбувається тому, що це ім’я, яке ми передали stat у командному рядку.

The Terse Report

Параметр -t (коротко) змушує stat надавати стислий підсумок:

stat -t ana.c

Немає жодних підказок. Щоб зрозуміти це — доки ви не запам’ятали послідовність полів — вам потрібно перехресне посилання на цей висновок до повного виводу статистики.

Спеціальні вихідні формати

Кращий спосіб отримати інший набір даних із stat — використовувати користувацький формат. Існує довгий список маркерів, які називаються послідовностями форматів. Кожен з них являє собою елемент даних. Виберіть ті, які ви хочете включити у вихідні дані, і створіть рядок форматування. Коли ми викликаємо stat і передаємо йому рядок форматування, вихідні дані включатимуть лише ті елементи даних, які ми запитали.

Існують різні набори послідовностей форматів для файлів і файлових систем. Список файлів такий:

%a: Права доступу у вісімковій системі.
%A: Права доступу в зрозумілій людині формі (rwx).
%b: кількість виділених блоків.
%B: Розмір кожного блоку в байтах.
%d: десятковий номер пристрою.
%D: номер пристрою в шістнадцятковому вигляді.
%f: вихідний режим у шістнадцятковому.
%F Тип файлу.
%g: ідентифікатор групи власника.
%G: назва групи власника.
%h: кількість жорстких посилань.
%i: номер індексу.
%m: точка монтування.
%n: ім’я файлу.
%N: ім’я файлу в лапках з ім’ям файлу з розіменуванням, якщо воно є символічним посиланням.
%o: підказка про оптимальний розмір передачі введення-виводу.
%s: загальний розмір у байтах.
%t: основний тип пристрою в шістнадцятковому форматі, для спеціальних файлів символьних/блочних пристроїв.
%T: другорядний тип пристрою в шістнадцятковому форматі, для спеціальних файлів символьних/блочних пристроїв.
%u: ідентифікатор користувача власника.
%U: Ім’я користувача власника.
%w: час народження файлу, читабельний, або дефіс «-», якщо невідомий.
%W: час народження файлу, секунди від Епохи; 0, якщо невідомо.
%x: час останнього доступу, читається людиною.
%X: час останнього доступу, секунди після епохи.
%y: час останньої зміни даних, для читання людиною.
%Y: час останньої модифікації даних, секунди після епохи.
%z: час останньої зміни статусу, читається людиною.
%Z: час останньої зміни статусу, секунди після епохи.

  Як спробувати альтернативу Firefox LibreWolf з відкритим вихідним кодом у Linux

«Епоха» — це Епоха Unix, який відбувся 1970-01-01 00:00:00 +0000 (UTC).

Для файлових систем послідовності форматів:

%a: кількість безкоштовних блоків, доступних для звичайних (не root) користувачів.
%b: загальна кількість блоків даних у файловій системі.
%c: загальна кількість inodes у файловій системі.
%d: кількість вільних inodes у файловій системі.
%f: кількість вільних блоків у файловій системі.
%i: ідентифікатор файлової системи в шістнадцятковому.
%l: максимальна довжина імен файлів.
%n: ім’я файлу.
%s: Розмір блоку (оптимальний розмір запису).
%S: Розмір блоків файлової системи (для кількості блоків).
%t: Тип файлової системи у шістнадцятковому.
%T: тип файлової системи в зрозумілій людині формі.

Є два варіанти, які приймають рядки послідовностей форматів. Це –format і –printf. Різниця між ними полягає в –printf інтерпретує Escape-послідовності в стилі C наприклад, новий рядок n і табуляція t , і він не додає автоматично символ нового рядка до свого результату.

Давайте створимо рядок форматування і передаємо його в stat. Послідовності форматів, які збиралися використовувати, це %n для імені файлу, %s для розміру файлу та %F для типу файлу. Ми збираємося додати n escape-послідовність до кінця рядка, щоб переконатися, що кожен файл обробляється в новому рядку. Наш форматний рядок виглядає так:

"File %n is %s bytes, and is a %Fn"

Ми збираємося передати це в stat за допомогою параметра –printf. Ми збираємося попросити stat звітувати про файл під назвою code.c і набір файлів, які відповідають ana.?. Це повна команда. Зверніть увагу на знак рівності «=» між –printf і рядком форматування:

stat --printf="File %n is %s bytes, and is a %Fn" code.c ana/ana.?

stat --printf=

Звіт для кожного файлу відображається в новому рядку, що ми і просили. Ім’я файлу, розмір файлу та тип файлу надаються нам.

Користувацькі формати дають вам доступ до ще більшої кількості елементів даних, ніж включено в стандартний вихідний дані.

Контроль дрібного зерна

Як бачите, існує величезний простір для вилучення конкретних елементів даних, які вас цікавлять. Ви також можете зрозуміти, чому ми рекомендуємо використовувати псевдоніми для довших і складніших заклинань.