stat

Что делает команда stat в Linux

Команда stat в Linux используется для получения подробной информации о файлах и каталогах, включая дату последнего доступа, изменения, размер, тип и права доступа. В отличие от стандартной команды ls -l, stat показывает гораздо больше метаданных, что делает её полезной при администрировании систем, отладке скриптов и мониторинге состояния файловой системы.

При вводе простой команды:

Bash
stat имя_файла

вы получите подробный отчет, включающий следующие поля:

  • File — имя файла;
  • Size — размер в байтах;
  • Blocks — количество занятых блоков;
  • IO Block — размер блока ввода-вывода;
  • Device — идентификатор устройства;
  • Inode — уникальный номер inode;
  • Access, Modify, Change — время последнего доступа, изменения содержимого и метаданных;
  • Birth — время создания (не на всех файловых системах).

Это делает команду stat в Linux незаменимым инструментом для системных администраторов и разработчиков.

Основные параметры команды stat

Форматирование вывода: параметр --format и -c

Самый мощный параметр — это --format (или его сокращенная форма -c). Он позволяет задавать пользовательский формат вывода с использованием специальных плейсхолдеров. Например:

Bash
stat -c "%n %s %y" test.txt

Эта команда выведет только имя файла, размер и дату последнего изменения.
Наиболее часто используемые плейсхолдеры:

  • %n — имя файла;
  • %s — размер файла в байтах;
  • %A — права доступа в символьной форме;
  • %a — права доступа в числовом формате (например, 755);
  • %U и %G — владелец и группа;
  • %y — время последнего изменения содержимого;
  • %z — время последнего изменения метаданных.

Совет: используйте stat -c "%A %U %G %s %n" для вывода краткой таблицы с ключевыми сведениями о нескольких файлах сразу. Это удобно при анализе прав доступа и размеров.

Отображение информации о символических ссылках: параметр -L

По умолчанию команда stat в Linux показывает данные о самой ссылке, если указанный объект — символическая ссылка. Чтобы получить сведения о целевом файле, используют флаг -L:

Bash
stat -L link_to_file

Без -L stat выведет метаданные самой ссылки (inode, размер ссылки и т. д.), а с -L — данные файла, на который она указывает.

Этот параметр особенно полезен при проверке состояния ссылок в системных каталогах /etc, /usr или /var.

Краткий формат: параметр --printf

Флаг --printf работает аналогично --format, но позволяет выводить результаты без автоматических переносов строк. Например:

Bash
stat --printf="%n: %s bytes, owner: %U\n" file1 file2

Результат будет удобным для последующей обработки в скриптах.
Разница между --format и --printf заключается в том, что --printf не добавляет новую строку в конце, что делает его гибче при работе в bash-циклах.

Получение информации о файловых системах: параметр -f

Команда stat в Linux может показывать не только метаданные файла, но и данные о файловой системе. Для этого используется параметр -f:

Bash
stat -f /

Вывод покажет тип файловой системы, её размер, количество свободных блоков, максимальную длину имени файла и идентификатор устройства.
Это особенно полезно при анализе состояния разделов или проверке, какая файловая система используется (например, ext4, xfs, btrfs и т.д.).

Примеры практического применения

Проверка прав доступа и владельцев

Чтобы быстро вывести права доступа, владельца и группу всех файлов в каталоге, можно использовать комбинацию stat и awk:

Bash
stat -c "%A %U %G %n" *

Вы получите читаемую таблицу, которая поможет заметить файлы с неправильными разрешениями.

Совет: в системных каталогах рекомендуется проверять, чтобы права доступа к конфигурационным файлам не были слишком открытыми (777).

Получение времени последнего изменения

Команда stat в Linux позволяет точно узнать, когда файл был изменён. Например:

Bash
stat -c "%n изменён: %y" /var/log/syslog

Эта информация помогает при анализе логов или отладке скриптов.
Можно также использовать флаг %x для отображения времени последнего доступа.

Использование в скриптах

Благодаря возможности точного форматирования, stat часто применяется в shell-скриптах. Пример простого скрипта для проверки старых файлов:

Bash
for file in /tmp/*; do
  mod_time=$(stat -c %Y "$file")
  now=$(date +%s)
  if (( now - mod_time > 86400 )); then
    echo "Файл $file старше 1 дня"
  fi
done

Этот код определяет файлы, не изменявшиеся более суток. Он демонстрирует, как команда stat в Linux помогает автоматизировать задачи администрирования.

Дополнительные параметры и особенности

  • --terse — выводит данные в одной строке без описаний. Удобно для парсинга в скриптах.
  • --version — показывает версию программы.
  • --help — выводит краткую справку.

При работе с файлами на разных файловых системах стоит учитывать, что не все из них поддерживают поле Birth, отображающее время создания. Например, ext4 его поддерживает, а старые версии ext3 — нет.

Также важно помнить, что при использовании команды stat в Linux с правами обычного пользователя доступ к метаданным некоторых системных файлов может быть ограничен.

Почему стоит использовать stat вместо ls

Хотя команда ls -l показывает базовую информацию о файлах, она не отображает метаданные вроде номера inode, размера блока или точного времени изменения.
Команда stat в Linux предоставляет полную картину, включая низкоуровневые данные, которые часто требуются при диагностике проблем с файловой системой.

Кроме того, stat возвращает точные временные метки в секундах, что делает её удобной для программной обработки и логирования.

Таким образом, команда stat в Linux — это мощный инструмент для получения расширенной информации о файлах и файловых системах. Она подходит как для ручной проверки параметров, так и для автоматизации через скрипты. Знание её параметров и форматов вывода значительно упрощает диагностику, настройку безопасности и мониторинг системы.