stat
Все метаданные файла — права, владелец, размер, inode, времена — в нужном формате
stat показывает метаданные файла из inode: тип, права, владельца, размер, число ссылок, все времена. С -c печатает только нужные поля в заданном формате — это надёжнее, чем вырезать колонки из ls -l. С -f — сведения о файловой системе. В песочнице — GNU coreutils 9.4.
Синтаксис
stat [опции] файл…
stat -c 'формат' файл…
stat -f [-c 'формат'] путь…
Код возврата: 0 — все файлы найдены, 1 — хотя бы одного нет.
Вывод по умолчанию
File: f
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: 0,64 Inode: 1134952 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2026-10-13 15:21:52.594726010 +0000
Modify: 2026-10-13 15:21:52.594726010 +0000
Change: 2026-10-13 15:21:52.594726010 +0000
Birth: 2026-10-13 15:21:52.594726010 +0000
| Поле | Что значит |
|---|---|
Size | размер в байтах (у ссылки — длина пути цели) |
Blocks | сколько 512-байтных блоков реально занято на диске |
IO Block | рекомендуемый размер блока ввода-вывода |
| тип | regular file, directory, symbolic link, fifo, socket, character special file… |
Device | номер устройства, на котором лежит файл |
Inode / Links | номер inode / число жёстких ссылок |
Access: (0644/-rw-r--r--) | права в восьмеричном и символьном виде |
Uid / Gid | числовой ID и имя владельца / группы |
Access / Modify / Change | atime (чтение), mtime (содержимое), ctime (метаданные) |
Birth | время создания (-, если ФС его не хранит) |
Опции
| Опция | Что делает |
|---|---|
-c 'формат' | печатать по формату, в конце — перевод строки |
--printf='формат' | то же, но перевода строки нет, а \n, \t понимаются |
-L | для символической ссылки показать данные цели, а не самой ссылки |
-f | данные о файловой системе, на которой лежит путь |
-t | всё одной строкой (краткий машинный формат) |
Формат -c: файл
| Код | Что печатает | Пример |
|---|---|---|
%n | имя файла | f |
%N | имя в кавычках, у ссылки — с целью | 'l' -> 'f' |
%a | права в восьмеричном виде (%#a — с ведущим нулём) | 644, 4755 |
%A | права в символьном виде с типом | -rw-r--r-- |
%f | «сырой» режим в шестнадцатеричном виде | 81a4 |
%F | тип файла словами | regular file |
%U / %u | имя / UID владельца | root / 0 |
%G / %g | имя / GID группы | root / 0 |
%s | размер в байтах | 6 |
%b / %B | число блоков / размер блока в байтах для %b | 8 / 512 |
%i | номер inode | 1134952 |
%h | число жёстких ссылок | 1 |
%d / %D | номер устройства (десятичный / hex) | 64 |
%m | точка монтирования | / |
%o | рекомендуемый размер блока ввода-вывода | 4096 |
%x / %X | atime: читаемо / секунды Unix | 2026-10-13 15:21:52.59… +0000 / 1791904912 |
%y / %Y | mtime: читаемо / секунды Unix | |
%z / %Z | ctime: читаемо / секунды Unix | |
%w / %W | время создания: читаемо (-, если неизвестно) / секунды (0) | |
%t / %T | старший / младший номер устройства (hex) — для /dev/* | 1 / 3 у /dev/null |
%C | контекст SELinux |
Ширина и точность как в printf: %10s — выровнять вправо на 10 символов, %-6s — влево, %.19y — дата без долей секунды (2026-10-13 15:21:58), %.3Y — секунды с миллисекундами.
Формат -c вместе с -f: файловая система
| Код | Что печатает |
|---|---|
%T | тип ФС словами (ext2/ext3, tmpfs, overlayfs…) |
%b | всего блоков данных |
%f / %a | свободных блоков / доступных обычному пользователю |
%S | размер блока для этих счётчиков |
%c / %d | всего inode / свободных inode |
%l | максимальная длина имени файла |
%n | имя пути |
Примеры
# права в восьмеричном виде — для сравнения в скрипте
stat -c '%a' /etc/shadow
# права, владелец, группа одной строкой
stat -c '%A %U:%G %n' /etc/passwd /etc/shadow
# размер в байтах
stat -c %s backup.tar.gz
# время изменения в секундах — удобно считать возраст
echo $(( $(date +%s) - $(stat -c %Y app.log) ))
# дата изменения без наносекунд
stat -c '%.19y' app.log
# табличка «имя — размер» через --printf
stat --printf '%n\t%s\n' *.log
# данные цели ссылки, а не самой ссылки
stat -L /etc/localtime
# тип ФС и свободные inode
stat -f -c 'тип=%T inode свободно=%d' /
Подводные камни
-cне понимает\tи\n:stat -c '%n\t%s'напечатает\tбуквально. Для управляющих символов —--printf(и тогда\nв конце пиши сам).- Ссылка по умолчанию — сама ссылка.
stat ссылкапокажетsymbolic link, права777и размер = длина пути. Для цели —-L. %aне дополняет нули: уchmod 755будет755, уchmod 4755—4755. Для единообразной ширины —%#a(0755) или%04a.%Yvs%y. Для арифметики бери секунды (%Y); читаемый%yсодержит наносекунды и пояс.%wчасто-. Время создания хранят не все ФС, и не все инструменты его копируют.- Это GNU-синтаксис. На macOS/BSD у
statдругие ключи (-f '%Lp'), скрипты сstat -cтам не работают.