Linux stat размер файла

Команда stat в Linux

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

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

Команда stat в Linux

Синтаксис команды очень простой. Ей надо передать опции и путь к файлу, для которого надо посмотреть информацию:

$ stat опции /путь/к/файлу

Опции передавать не обязательно и их совсем не много:

  • -L, dereference — показывать информацию о файле вместо символической ссылки;
  • -f, —file-system — показывать информацию о файловой системе в которой расположен файл;
  • -c, —format — позволяет указать формат вывода вместо стандартного, каждый файл выводится с новой строки;
  • —printf — аналогично —format, только для новой строки надо использовать \n;
  • -t, —terse — показ информации в очень кратком виде, в одну строку;
  • —version — показать версию утилиты.

Это все опции команды. Теперь давайте разберемся с примерами использования. Чтобы посмотреть информацию о файле достаточно запустить программу без опций передав ей путь к файлу, например /etc/passwd:

Рассмотрим что означает вывод программы:

  • Файл (File) — путь к файлу по которому показывается информация;
  • Размер (Size) — размер файла в байтах;
  • Блок В/В (IO Block) — размер блока файловой системы в байтах;
  • Блоков (Blocks) — количество блоков файловой системы, занятых файлом;
  • Устройство (Device) — идентификатор устройства, например HDD, на котором сохранён файл;
  • Inode — уникальный номер Inode этого файла;
  • Ссылки (Links) — количество жестких ссылок на этот файл;
  • Доступ (Access) — права доступа к файлу;
  • Uid — идентификатор и имя пользователя-владельца файла;
  • Gid — идентификатор и имя группы файла;
  • Доступ (Access) — время последнего доступа к файлу;
  • Модифицирован (Modify) — время когда в последний раз изменялся контент файла;
  • Изменен (Change) — время, когда в последний раз изменялись атрибуты файла или контент файла;
  • Создан (Birth) — зарезервировано для отображения первоначальной даты создания файла, но пока ещё не реализовано.

Надо ещё немного поговорить про формат времени. Например, время последнего доступа к файлу — 2020-12-02 18:25:01.043831739 +0200. Это время показывается с учётом временной зоны. А цифры +0200 показывают, что временная зона на компьютере, который создал или модифицировал этот файл на два часа больше чем UTC, то есть Europe/Kiev в зимнее время.

Читайте также:  Параметр загрузки ядра linux

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

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

Утилите можно передать не один файл, а несколько:

И тут уже понадобиться возможность настройки формата вывода. Для форматирования вывода можно использовать такие последовательности символов:

  • %A — права доступа;
  • %b — количество занятых блоков;
  • %F — тип файла;
  • %g — идентификатор группы файла;
  • %G — имя группы файла;
  • %i — идентификатор Inode;
  • %n — имя файла;
  • %s — размер файла;
  • %u — идентификатор владельца файла;
  • %U — имя владельца файла;
  • %x — время последнего доступа;
  • %y — время последней модификации контента;
  • %z — время последнего изменения контента или атрибутов.

Это далеко не все возможные последовательности, больше вы моете найти в справке по утилите:

Например, давайте выведем только имя, файла, и время последней модификации его содержимоего:

stat —printf «File %n has been modified %y\n» /etc/passwd /etc/group

Если вы хотите посмотреть информацию о файловой системе, в которой расположен файл, то надо использовать опцию -f:

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

  • Файл (File) — имя файла;
  • Тип (Type) — тип файловой системы;
  • ID — идентификатор файловой системы;
  • Длина имени (Namelen) — максимальная длина имени в файловой системе;
  • Размер блока (Block size) — объем данных при запросе на чтение или запись для оптимальной скорости работы;
  • Базисный размер блока (Fundamental block size) — физический размер блока в файловой системе.

Дальше идут общее количество блоков в системе и количество свободных блоков.

Выводы

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

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Как проверить размер файла в Linux/Unix в bash скрипте

Вы не можете получить размер файла в сценарии bash с помощью внутренней или встроенной команды. Для проверки размера файла в Linux лучше всего использовать команду stat и другие команды. Команда stat выводит информацию о файле, включая его размер. Другой вариант — использовать команду wc, которая может подсчитать количество байт в каждом конкретном файле. Давайте посмотрим, как использовать эти две команды для проверки размера файла в Linux или Unix-подобной системе.

Как проверить размер файла в unix с помощью команды wc

Команда wc показывает количество строк, слов и байт, содержащихся в файле. Чтобы узнать размер файла, используйте следующий синтаксис:

wc -c /etc/passwd

Вы можете легко извлечь первое поле с помощью команды cut или awk:

Образец вывода

Или присвойте этот размер переменной bash:

myfilesize=$(wc -c "/etc/passwd" | awk '') printf "%d\n" $myfilesize echo "$myfilesize"

Получение размера файла в сценарии bash с помощью команды stat

Команда stat показывает информацию о файле. Для получения размера файла в GNU/Linux stat имеет следующий синтаксис:

Читайте также:  Просмотр правил фаервола linux

stat --format=%s

Чтобы присвоить этот размер переменной bash:

myfilesize=$(stat --format=%s "/etc/passwd") echo "$myfilesize" ## или ## myFileSizeCheck=$(stat -c %s "/etc/resolv.conf") printf "Размер моего файла = %d\n" $myFileSizeCheck

Для получения размера файла на BSD/MacOS stat имеет следующий синтаксис:

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

Проверка размера файла с помощью команды du

du --apparent-size --block-size=1 "/etc/passwd"

Проверка размера файла с помощью команды du

fileName="/etc/hosts" mfs=$(du --apparent-size --block-size=1 "$fileName" | awk '< print $1>') echo "$fileName size = $"

Примеры вывода вышеприведенных команд:

Проверка размера файла с помощью команды du

Получение размера файла с помощью команды find

Синтаксис команды find выглядит следующим образом:

Получение размера файла с помощью команды find

fileName="/etc/hosts" mysize=$(find "$fileName" -printf "%s") printf "Размер файла %s = %d\n" $fileName $mysize echo "Размер $ составляет $ байт."

Получение размера файла с помощью команды find

Заключение

Вы узнали, как проверить размер файла в Linux или Unix-подобной системе с помощью различных утилит командной строки.

Похожие записи:

Источник

Команда Stat в Linux

stat — это утилита командной строки, которая отображает подробную информацию об определенных файлах или файловых системах.

В этой статье объясняется, как использовать команду stat .

Использование команды stat

Синтаксис команды stat следующий:

stat принимает одно или несколько имен входных FILE и включает ряд параметров, которые управляют поведением команды и выводом.

Давайте посмотрим на следующий пример:

Результат будет выглядеть примерно так:

 File: file.txt Size: 4030 Blocks: 8 IO Block: 4096 regular file Device: 801h/2049d Inode: 13633379 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ linuxize) Gid: ( 1000/ linuxize) Access: 2019-11-06 09:52:17.991979701 +0100 Modify: 2019-11-06 09:52:17.971979713 +0100 Change: 2019-11-06 09:52:17.971979713 +0100 Birth: - 

При вызове без каких-либо параметров stat отображает следующую информацию о файле:

  • Файл — имя файла.
  • Размер — размер файла в байтах.
  • Блоки — количество выделенных блоков, занимаемых файлом.
  • Блок ввода-вывода — размер каждого блока в байтах.
  • Тип файла — (например, обычный файл, каталог, символическая ссылка.)
  • Устройство — номер устройства в шестнадцатеричном и десятичном формате.
  • Inode — номер Inode.
  • Ссылки — количество жестких ссылок.
  • Доступ — права доступа к файлам в числовых и символьных методах.
  • Uid — ID пользователя и имя владельца .
  • Gid — ID группы и имя владельца.
  • Контекст — контекст безопасности SELinux.
  • Доступ — время последнего доступа к файлу.
  • Изменить — время последнего изменения содержимого файла.
  • Изменить — время последнего изменения атрибута или содержимого файла.
  • Рождение — время создания файла (не поддерживается в Linux).

Отображение информации о файловой системе

Чтобы получить информацию о файловой системе, в которой находится данный файл, вместо информации о самом файле, используйте параметр -f , ( —file-system ):

Результат команды будет выглядеть так:

 File: "package.json" ID: 8eb53097b4494d20 Namelen: 255 Type: ext2/ext3 Block size: 4096 Fundamental block size: 4096 Blocks: Total: 61271111 Free: 25395668 Available: 22265851 Inodes: Total: 15630336 Free: 13979610 

Когда stat вызывается с параметром -f , он показывает следующую информацию:

  • Файл — имя файла.
  • ID — ID файловой системы в шестнадцатеричном формате.
  • Namelen — Максимальная длина имен файлов.
  • Основной размер блока — размер каждого блока в файловой системе.
  • Блоки:
    • Всего — общее количество блоков в файловой системе.
    • Свободно — количество свободных блоков в файловой системе.
    • Доступно — количество бесплатных блоков, доступных пользователям без полномочий root.
    • Всего — общее количество индексных дескрипторов в файловой системе.
    • Free — количество свободных индексных дескрипторов в файловой системе.

    Разыменование (следовать) символическим ссылкам

    По умолчанию stat не следует за символическими ссылками . Если вы запустите команду для символической ссылки, вывод будет включать информацию о символической ссылке, а не о файле, на который она указывает:

     File: /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf Size: 39 Blocks: 0 IO Block: 4096 symbolic link Device: 801h/2049d Inode: 8126659 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-11-06 21:12:26.875956073 +0100 Modify: 2018-07-24 11:11:48.128794519 +0200 Change: 2018-07-24 11:11:48.128794519 +0200 Birth: - 

    Чтобы разыменовать (следовать) символической ссылке и отобразить информацию о файле, на который указывает символическая ссылка, используйте параметр -L , ( —dereference ):

     File: /etc/resolv.conf Size: 715 Blocks: 8 IO Block: 4096 regular file Device: 17h/23d Inode: 989 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 101/systemd-resolve) Gid: ( 103/systemd-resolve) Access: 2019-11-06 20:35:25.603689619 +0100 Modify: 2019-11-06 20:35:25.555689733 +0100 Change: 2019-11-06 20:35:25.555689733 +0100 Birth: - 

    Настройка вывода

    У команды stat есть две опции, которые позволяют вам настроить вывод в соответствии с вашими потребностями: -c , ( —format=»format» ) и —printf=»format» .

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

    Существует множество директив форматирования для файлов и файловых систем, которые можно использовать с —format и —printf .

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

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

    /dev/null,character special file 

    Чтобы интерпретировать специальные символы, такие как —printf или табуляция, используйте параметр —printf :

    stat --printf='Name: %nnPermissions: %an' /etc

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

    Вызовите команду с параметром -t ( —terse ), чтобы распечатать вывод в краткой форме:

    /etc 12288 24 41ed 0 0 801 8126465 147 0 0 1573068933 1573068927 1573068927 0 4096 

    Для получения полного списка всех директив форматирования для файлов и типов файловых систем используйте man stat или stat —help в вашем терминале.

    Выводы

    Команда stat выводит информацию о данных файлах и файловых системах.

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

    Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

    Источник

Оцените статью
Adblock
detector