linux-labs

Вики / Базовые команды

stat — метаданные файла

Команда GNU coreutils БазовоеФайлы

Полная информация о файле: размер, права, владелец, времена (atime/mtime/ctime), inode.

stat показывает метаданные файла, которых не видно в ls: точные времена, inode, число ссылок, права в восьмеричном виде, владельца и группу.

Незаменим при разборе «почему служба не читает файл» и «когда это меняли».

stat file.conf                    # вся информация
stat -c '%A %U:%G %s %n' file     # выбрать поля: права, владелец:группа, размер, имя
stat -c '%a' file                 # права в ВОСЬМЕРИЧНОМ виде (например 644)
stat -c '%Y' file                 # mtime как unix-время (удобно в скриптах)
stat -f -c '%T' /                 # тип файловой системы корня
stat --printf='%n %s байт\n' *.log

Частые форматные поля для -c:

Поле Значение
%n имя
%s размер в байтах
%A / %a права (rwx / восьмеричные)
%U / %G владелец / группа
%y / %Y mtime (человекочитаемо / unix)
%i номер inode
%h число жёстких ссылок
  • atime (%x) — последний доступ (чтение). Часто отключён (noatime) ради скорости.
  • mtime (%y) — последнее изменение содержимого. Именно его показывает ls -l.
  • ctime (%z) — последнее изменение метаданных (права, владелец, переименование).
ls -l   file    # показывает mtime
ls -lc  file    # показывает ctime
ls -lu  file    # показывает atime

«Я не менял файл, а mtime свежий»

Файл перезаписали (редактор сохраняет заново) или процесс дописал. ctime покажет, трогали ли права/владельца отдельно от содержимого.

Размер в ls -l большой, а место не занято

Разрежённый файл (sparse). Сравни stat -c '%s' (логический размер) и %b×%B (реально занятые блоки) — см. также disk-usage.

stat file                         # всё
stat -c '%a %U:%G %n' file        # права-владелец-имя
stat -c '%Y' file                 # mtime (unix)
ls -lc file                       # ctime вместо mtime

См. также