С чего начать Первые шаги трек · 15 ступеней
Linux Labs

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

3 мин GNU coreutils

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

Шпаргалка

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

Обзор

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

Незаменим при разборе «почему служба не читает файл» и «когда это меняли». По умолчанию stat на симлинке показывает метаданные самой ссылки, а не файла, на который она указывает — для метаданных цели нужен ключ -L.

Ключи

5

Ключ -c задаёт свой формат вывода через плейсхолдеры (%a, %U, %s и другие) — без него stat печатает фиксированный многострочный блок, неудобный для разбора в скриптах. -L (--dereference) переключает вывод с самой ссылки на файл, на который она указывает; без него проверка прав через stat на симлинке покажет права ссылки (обычно 777), а не файла.

Ключ Что делает Пример
-c --format FORMAT Свой формат вывода через плейсхолдеры (%a, %U, %s и другие). stat -c '%a %U:%G %n' file
-L --dereference Показать метаданные файла, на который указывает симлинк, а не самой ссылки. stat -L file
-f --file-system Показать сведения о файловой системе вместо файла. stat -f -c '%T' /
--printf FORMAT Как --format, но без завершающего перевода строки по умолчанию. stat --printf='%n %s байт\n' *.log
-t --terse Краткий вывод в одну строку — удобно парсить awk/cut. stat -t file

Ничего не найдено. Попробуй запрос короче.

Рецепты

2

Примеры

bash
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) — последнее изменение метаданных (права, владелец, переименование).
bash
ls -l   file    # показывает mtime
ls -lc  file    # показывает ctime
ls -lu  file    # показывает atime

Неполадки

3

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

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

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

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

Права симлинка не совпадают с ожидаемыми

Симлинки в Linux почти всегда показывают 777 — эти права не влияют на доступ к цели, права проверяются у файла назначения. Смотри их через stat -L file, а не stat file.

См. также

  • files-basics — Навигация и файлы — ls, cd, cp, mv, rm, cat, less, head, tail, копипаст в терминале.
  • chmod-chown — Смена прав (chmod) и владельца/группы (chown) — числовой и символьный синтаксис.
  • disk-usage — Куда делось место и inode — df, du, поиск крупных файлов, ловушки.
Загрузка…