Как использовать команду stat в Linux

Опубликовано: 2022-01-29
Терминал Linux на рабочем столе в стиле Ubuntu.
Фатмавати Ахмад Заэнури/Shutterstock.com

Команда Linux stat показывает гораздо больше деталей, чем ls . Загляните за кулисы с помощью этой информативной и настраиваемой утилиты. Мы покажем вам, как его использовать.

stat перенесет вас за кулисы

Команда ls в том, что она делает, и делает она многое, но в Linux кажется, что всегда есть способ заглянуть глубже и увидеть, что лежит под поверхностью. И часто дело не только в поднятии края ковра. Вы можете разорвать половицы, а затем вырыть яму. Вы можете очистить Linux, как луковицу.

10 основных команд Linux для начинающих
СВЯЗАННЫЕ 10 основных команд Linux для начинающих

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

У каждого файла и каталога есть индексный дескриптор. Инод содержит метаданные о файле, например, какие блоки файловой системы он занимает, и метки даты, связанные с файлом. Инод похож на библиотечную карточку для файла. Но ls покажет вам только часть информации. Чтобы увидеть все, нам нужно использовать команду stat .

Как и ls , команда stat имеет множество параметров. Это делает его отличным кандидатом на использование псевдонимов. Как только вы обнаружите определенный набор опций, которые заставляют stat выдавать желаемый результат, оберните его псевдонимом или функцией оболочки. Это делает его гораздо более удобным в использовании, и вам не нужно запоминать загадочный набор параметров командной строки.

СВЯЗАННЫЕ С: Как использовать команду ls для вывода списка файлов и каталогов в Linux

Быстрое сравнение

Давайте используем ls , чтобы получить длинный список (опция -l ) с удобочитаемыми размерами файлов (опция -h ):

 ls -lh ана.h 

Реклама

Слева направо информация, которую предоставляет ls:

  • Самый первый символ — это дефис «-», и это говорит нам, что файл является обычным файлом, а не сокетом, символической ссылкой или другим типом объекта.
  • Владелец, группа и другие разрешения перечислены в восьмеричном формате.
  • Количество жестких ссылок, указывающих на этот файл. В этом случае, и в большинстве случаев, это будет один.
  • Владелец файла — dave.
  • Владелец группы Дэйв.
  • Размер файла 802 байта.
  • Последний раз файл был изменен в пятницу, 13 декабря 2015 г.
  • Имя файла ana.c .

Давайте посмотрим на stat :

 стат ана.ч 

Информация, которую мы получаем из stat :

  • Файл : имя файла. Обычно это то же самое имя, которое мы передали в stat в командной строке, но оно может отличаться, если мы смотрим на символическую ссылку.
  • Размер : размер файла в байтах.
  • Блоки : количество блоков файловой системы, которое требуется файлу для хранения на жестком диске.
  • Блок ввода-вывода : размер блока файловой системы.
  • Тип файла : тип объекта, который описывает метаданные. Наиболее распространенными типами являются файлы и каталоги, но они также могут быть ссылками, сокетами или именованными каналами.
  • Устройство : номер устройства в шестнадцатеричном и десятичном формате. Это идентификатор жесткого диска, на котором хранится файл.
  • Inode : номер инода. То есть ID-номер этого инода. Вместе номер инода и номер устройства однозначно идентифицируют файл.
  • Ссылки : это число указывает, сколько жестких ссылок указывают на этот файл. Каждая жесткая ссылка имеет свой индексный дескриптор. Таким образом, другой способ думать об этой цифре — сколько инодов указывает на этот файл. Каждый раз, когда создается или удаляется жесткая ссылка, это число будет увеличиваться или уменьшаться. Когда он достигает нуля, сам файл был удален, а индекс удален. Если вы используете stat для каталога, это число представляет собой количество файлов в каталоге, включая «.» запись для текущего каталога и запись «..» для родительского каталога.
  • Доступ : права доступа к файлам отображаются в восьмеричном и традиционном формате rwx (чтение, запись, выполнение).
  • Uid : ID пользователя и имя учетной записи владельца.
  • Gid : идентификатор группы и имя учетной записи владельца.
  • Доступ : Отметка времени доступа. Не так просто, как может показаться. Современные дистрибутивы Linux используют схему под названием relatime , которая пытается оптимизировать записи на жесткий диск, необходимые для обновления времени доступа. Проще говоря, время доступа обновляется, если оно старше измененного времени.
  • Modify : Отметка времени модификации. Это время последнего изменения содержимого файла. (Как назло, последний раз содержимое этого файла менялось четыре года назад.)
  • Change : Отметка времени изменения. Это время последнего изменения атрибутов или содержимого файла. Если вы изменяете файл, устанавливая новые права доступа к файлу, отметка времени изменения будет обновлена ​​(поскольку атрибуты файла изменились), но измененная отметка времени не будет обновлена ​​(поскольку содержимое файла не было изменено).
  • Birth : зарезервировано для отображения исходной даты создания файла, но это не реализовано в Linux.

Понимание временных меток

Временные метки чувствительны к часовому поясу. -0500 в конце каждой строки показывает, что этот файл был создан на компьютере в часовом поясе всемирного координированного времени (UTC), который на пять часов опережает часовой пояс текущего компьютера. Итак, этот компьютер на пять часов отстает от компьютера, создавшего этот файл. На самом деле файл был создан на компьютере с часовым поясом Великобритании, и мы рассматриваем его здесь на компьютере с часовым поясом Восточного стандарта США.

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

Давайте используем chmod для изменения прав доступа к файлу с именем ana.c Мы собираемся сделать его доступным для записи всем. Это не повлияет на содержимое файла, но повлияет на атрибуты файла.

 chmod +w ana.c

А затем мы будем использовать stat для просмотра временных меток:

 stat ana.c 

Реклама

Временная метка изменения была обновлена, а измененная — нет.

Измененная временная метка будет обновлена ​​только в том случае, если содержимое файла будет изменено. Отметка времени изменения обновляется как для изменений содержимого, так и для изменений атрибутов.

Использование статистики с несколькими файлами

Чтобы получить отчет о статистике сразу по нескольким файлам, передайте имена файлов в stat в командной строке:

 stat ana.h ana.o 

Чтобы использовать stat для набора файлов, используйте сопоставление с образцом. Знак вопроса «?» представляет любой отдельный символ, а звездочка «*» представляет любую строку символов. Мы можем указать stat сообщать о любом файле с именем «ana» с однобуквенным расширением с помощью этой команды:

 стат ана.? 

Использование статистики для создания отчетов о файловых системах

stat может сообщать о состоянии файловых систем, а также о состоянии файлов. Параметр -f (файловая система) указывает stat сообщать о файловой системе, в которой находится файл. Обратите внимание, что мы также можем передать каталог, например «/», в stat вместо имени файла.

 stat -f ana.c 

stat информация дает нам следующее:

  • Файл : имя файла.
  • ID : ID файловой системы в шестнадцатеричном формате.
  • Namelen : максимально допустимая длина имен файлов.
  • Тип : Тип файловой системы.
  • Размер блока : объем данных для запросов на чтение для оптимальной скорости передачи данных.
  • Фундаментальный размер блока : размер каждого блока файловой системы.

Блоки:

  • Total : общее количество всех блоков в файловой системе.
  • Free : Количество свободных блоков в файловой системе.
  • Доступно : количество бесплатных блоков, доступных обычным пользователям (без полномочий root).

Иноды:

  • Total : общее количество инодов в файловой системе.
  • Free : Количество свободных инодов в файловой системе.

Разыменование символических ссылок

Если вы используете stat для файла, который на самом деле является символической ссылкой, он будет сообщать о ссылке. Если вы хотите, чтобы stat сообщал о файле, на который указывает ссылка, используйте параметр -L (разыменование). Файл code.c является символической ссылкой на ana.c Давайте посмотрим на это без опции -L :

 код статистики.c 

Реклама

Имя файла показывает, code.c указывает на ( -> ) ana.c . Размер файла всего 11 байт. Нет блоков, предназначенных для хранения этой ссылки. Тип файла указан как символическая ссылка.

Ясно, что мы не смотрим на настоящий файл здесь. Давайте сделаем это снова и добавим опцию -L :

 stat -L code.c 

Теперь отображаются сведения о файле, на который указывает символическая ссылка. Но обратите внимание, что имя файла по-прежнему указывается как code.c Это имя ссылки, а не целевого файла. Это происходит потому, что это имя мы передали stat в командной строке.

Краткий отчет

Параметр -t (краткий) заставляет stat предоставлять сжатую сводку:

 stat -t ana.c 

Никаких подсказок не дано. Чтобы понять это — пока вы не запомнили последовательность полей — вам нужно сопоставить этот вывод с полным выводом stat .

Пользовательские форматы вывода

Лучший способ получить другой набор данных из stat — использовать пользовательский формат. Существует длинный список токенов, называемых последовательностями формата. Каждый из них представляет элемент данных. Выберите те, которые вы хотите включить в вывод, и создайте строку формата. Когда мы вызываем stat и передаем ему строку формата, вывод будет включать только запрошенные нами элементы данных.

Реклама

Существуют разные наборы последовательностей форматов для файлов и файловых систем. Список для файлов:

  • %a : Права доступа в восьмеричном формате.
  • %A : Права доступа в удобочитаемой форме ( rwx ).
  • %b : Количество выделенных блоков.
  • %B : размер в байтах каждого блока.
  • %d : Номер устройства в десятичном формате.
  • %D : номер устройства в шестнадцатеричном формате.
  • %f : Необработанный режим в шестнадцатеричном формате.
  • %F Тип файла.
  • %g : идентификатор группы владельца.
  • %G : Имя группы владельца.
  • %h : количество жестких ссылок.
  • %i : номер инода.
  • %m : точка монтирования.
  • %n : имя файла.
  • %N : имя файла в кавычках с разыменованным именем файла, если это символическая ссылка.
  • %o : подсказка по оптимальному размеру передачи ввода/вывода.
  • %s : общий размер в байтах.
  • %t : основной тип устройства в шестнадцатеричном формате для специальных файлов символьных/блочных устройств.
  • %T : второстепенный тип устройства в шестнадцатеричном формате для специальных файлов символьных/блочных устройств.
  • %u : идентификатор пользователя владельца.
  • %U : Имя пользователя владельца.
  • %w : время рождения файла, удобочитаемое или дефис «-», если неизвестно.
  • %W : Время рождения файла, секунды с начала Эпохи; 0, если неизвестно.
  • %x : время последнего доступа, удобочитаемое.
  • %X : Время последнего доступа, секунды с начала Эпохи.
  • %y : время последней модификации данных, удобочитаемый.
  • %Y : Время последней модификации данных в секундах с начала Эпохи.
  • %z : время последнего изменения статуса, удобочитаемое.
  • %Z : Время последнего изменения статуса в секундах с начала Эпохи.

«Эпохой» является эпоха Unix, которая имела место 01.01.1970 00:00:00 +0000 (UTC).

Для файловых систем последовательности форматов следующие:

  • %a : количество бесплатных блоков, доступных обычным пользователям (без полномочий root).
  • %b : общее количество блоков данных в файловой системе.
  • %c : общее количество инодов в файловой системе.
  • %d : количество свободных инодов в файловой системе.
  • %f : количество свободных блоков в файловой системе.
  • %i : идентификатор файловой системы в шестнадцатеричном формате.
  • %l : максимальная длина имен файлов.
  • %n : имя файла.
  • %s : Размер блока (оптимальный размер записи).
  • %S : размер блоков файловой системы (для подсчета блоков).
  • %t : Тип файловой системы в шестнадцатеричном формате.
  • %T : тип файловой системы в удобочитаемой форме.

Есть два варианта, которые принимают строки последовательностей форматов. Это --format и --printf . Разница между ними заключается в том, что --printf интерпретирует escape-последовательности в стиле C, такие как новая строка \n и табуляция \t , и не добавляет автоматически символ новой строки в свой вывод.

Давайте создадим строку формата и передадим ее в stat . Последовательности форматов, которые собирались использовать: %n для имени файла, %s для размера файла и %F для типа файла. Мы собираемся добавить escape-последовательность \n в конец строки, чтобы убедиться, что каждый файл обрабатывается с новой строки. Строка нашего формата выглядит так:

 "Файл %n составляет %s байт и представляет собой %F\n"

Мы собираемся передать это в stat , используя опцию --printf . Мы попросим stat сообщить о файле с именем code.c и наборе файлов, соответствующих ana.? . Это полная команда. Обратите внимание на знак равенства « = » между --printf и строкой формата:

 stat --printf="Файл %n имеет размер %s байт и является кодом %F\n" code.c ana/ana.? 

Отчет по каждому файлу указан с новой строки, что мы и просили. Имя файла, размер файла и тип файла предоставляются нам.

Реклама

Пользовательские форматы дают вам доступ к еще большему количеству элементов данных, чем включено в стандартный вывод stat .

Мелкозернистый контроль

Как видите, возможности извлечения конкретных элементов данных, которые вас интересуют, огромны. Вероятно, вы также понимаете, почему мы рекомендуем использовать псевдонимы для более длинных и сложных заклинаний.

СВЯЗАННЫЕ С: Лучшие ноутбуки с Linux для разработчиков и энтузиастов