stat
Что делает команда stat в Linux
Команда stat в Linux используется для получения подробной информации о файлах и каталогах, включая дату последнего доступа, изменения, размер, тип и права доступа. В отличие от стандартной команды ls -l, stat показывает гораздо больше метаданных, что делает её полезной при администрировании систем, отладке скриптов и мониторинге состояния файловой системы.
При вводе простой команды:
stat имя_файла
вы получите подробный отчет, включающий следующие поля:
- File — имя файла;
- Size — размер в байтах;
- Blocks — количество занятых блоков;
- IO Block — размер блока ввода-вывода;
- Device — идентификатор устройства;
- Inode — уникальный номер inode;
- Access, Modify, Change — время последнего доступа, изменения содержимого и метаданных;
- Birth — время создания (не на всех файловых системах).
Это делает команду stat в Linux незаменимым инструментом для системных администраторов и разработчиков.
Основные параметры команды stat
Форматирование вывода: параметр --format и -c
Самый мощный параметр — это --format (или его сокращенная форма -c). Он позволяет задавать пользовательский формат вывода с использованием специальных плейсхолдеров. Например:
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:
stat -L link_to_file
Без -L stat выведет метаданные самой ссылки (inode, размер ссылки и т. д.), а с -L — данные файла, на который она указывает.
Этот параметр особенно полезен при проверке состояния ссылок в системных каталогах /etc, /usr или /var.
Краткий формат: параметр --printf
Флаг --printf работает аналогично --format, но позволяет выводить результаты без автоматических переносов строк. Например:
stat --printf="%n: %s bytes, owner: %U\n" file1 file2
Результат будет удобным для последующей обработки в скриптах.
Разница между --format и --printf заключается в том, что --printf не добавляет новую строку в конце, что делает его гибче при работе в bash-циклах.
Получение информации о файловых системах: параметр -f
Команда stat в Linux может показывать не только метаданные файла, но и данные о файловой системе. Для этого используется параметр -f:
stat -f /
Вывод покажет тип файловой системы, её размер, количество свободных блоков, максимальную длину имени файла и идентификатор устройства.
Это особенно полезно при анализе состояния разделов или проверке, какая файловая система используется (например, ext4, xfs, btrfs и т.д.).
Примеры практического применения
Проверка прав доступа и владельцев
Чтобы быстро вывести права доступа, владельца и группу всех файлов в каталоге, можно использовать комбинацию stat и awk:
stat -c "%A %U %G %n" *
Вы получите читаемую таблицу, которая поможет заметить файлы с неправильными разрешениями.
Совет: в системных каталогах рекомендуется проверять, чтобы права доступа к конфигурационным файлам не были слишком открытыми (777).
Получение времени последнего изменения
Команда stat в Linux позволяет точно узнать, когда файл был изменён. Например:
stat -c "%n изменён: %y" /var/log/syslog
Эта информация помогает при анализе логов или отладке скриптов.
Можно также использовать флаг %x для отображения времени последнего доступа.
Использование в скриптах
Благодаря возможности точного форматирования, stat часто применяется в shell-скриптах. Пример простого скрипта для проверки старых файлов:
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 — это мощный инструмент для получения расширенной информации о файлах и файловых системах. Она подходит как для ручной проверки параметров, так и для автоматизации через скрипты. Знание её параметров и форматов вывода значительно упрощает диагностику, настройку безопасности и мониторинг системы.