Получение информации о файлах при помощи stat






В предыдущей статье мы с вами знакомились с термином 'inode' и о роли индексных дескрипторов в жизни файловой системы. Однако мы не рассмотрели того, как получить подробную информацию о том, сколько всего inode доступно в файловой системе, а также сколько свободных осталось. Это и многое другое можно узнать при помощи утилиты stat.



Утилита stat является частью GNU Coreutils, а значит должна быть доступна в любом современном Linux-дистрибутиве. Задачей stat является вывод информации об одном или более файлов, а также о файловых системах. При помощи утилиты вы сможете узнать, например, сколько блоков диска выделено для хранения файла, сколько индексных дескрипторов доступно на той или иной ФС, а также многое другое. Основным преимуществом stat является то, что вы можете получать информацию в любом удобном для вас виде, что даёт возможность очень легко получать нужные данные и манипулировать ими в сценариях оболочки.

В общем случае формат вызова stat таков:

Давайте, например, посмотрим на вывод информации о /etc/passwd:

Из полученного вывода можно определить следующее:

  • файл имеет размер 2154 байта, занимает восемь 512-байтных блоков ;
  • размер блока ФС, на которой расположен файл, при операциях ввода/вывода составляет 4 килобайта;
  • идентификатор устройства, на котором расположен файл: 802h (шестнадцатеричный) или 2050d (десятичный);
  • номер индексного дескриптора файла — 786548;
  • файл не имеет жёстких ссылок (одна ссылка в отчёте stat — и есть сам файл);
  • режим доступа к файлу: 0644;
  • владелец файла — root, группа-владелец — root;
  • время последнего доступа к файлу: 2011-06-20 19:00:01;
  • время последнего изменения файла: 2011-05-24 20:39:21;
  • время последнего изменения индексного дескриптора файла: 2011-05-24 20:39:21;

Как уже говорилось, вы можете явно определять, какую информацию нужно выводить, а какую нет. Для этих целей в программе предусмотрена опция '--printf', после которой необходимо указать нужный вам формат вывода. Например, следующая команда выведет, разделив знаком табуляции: имя файла, его размер в байтах, размер в блоках, номер его inode и тип файла с точки зрения ОС. Вывод будет завершён символом новой строки:

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

или же, естественно, вы можете использовать wildcards оболочки:

Подробную информацию обо всех возможных параметрах, которые можно перечислять в опции '--format' можно получить на странице руководства утилиты.

stat может быть использована также для получения информации о файловых системах. Для этого программе нужно передать опцию '-f':

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

  • идентификатор файловой системы: 5d2e58a2f8a69ac2;
  • максимальная длина имени файла: 255 символов;
  • тип ФС: ext2/ext3;
  • размер блока: 4 килобайта;
  • общее количество блоков: 3844964, свободных: 1684534, доступных не суперпользователю: 1489222;
  • общее количество индексных дескрипторов: 977280, свободных: 510081.

Так же, как и при выводе информации о файлах, в случае с данными о файловой системе вы можете указать программе желаемый формат при выводе. Например, следующая команда выедет, разделив табуляцией, идентификатор ФС, количество свободных inode и количество свободных блоков, завершив вывод символом новой строки: