- Размер файла в Linux
- Размер файла в Linux
- 1. Nautilus
- 2. Команда ls
- 3. Утилита stat
- 4. Утилита du
- 5. Утилита ncdu
- 6. Утилита find
- Выводы
- Как проверить размер файла в сценариях оболочки Linux / Unix bash
- Как проверить размер файла в unix с помощью команды wc
- Как узнать размер файла в сценарии bash, используя команду stat
- Примеры команды du
- Найдите пример команды
- Как я могу получить размер файла в сценарии bash?
- 13 ответов
Размер файла в Linux
В этой небольшой статье мы поговорим о том, как узнать размер файла в Linux с помощью различных утилит. Проще всего узнать этот параметр в графическом интерфейсе, но многим часто приходится работать в терминале и надо знать как эта задача решается там.
Вы узнаете как посмотреть размер файла через файловый менеджер, утилиту ls, а также du. Об этих утилитах у нас есть отдельные статьи, но эта будет нацелена именно на просмотр размера конкретного файла.
Размер файла в Linux
1. Nautilus
Чтобы посмотреть размер файла в файловом менеджере сначала найдите нужный файл и кликните по нему правой кнопкой мыши. В открывшемся меню выберите Свойства:
Программа откроет окно, в котором будут указаны свойства файла, среди них будет и размер:
2. Команда ls
Для того чтобы утилита ls отображала размер файлов в удобном для чтения формате необходимо использовать параметр -h. Например:
Здесь размер отображается в пятой колонке. Чтобы увидеть размер определённого файла надо передать его имя утилите:
ls -lh ‘Снимок экрана от 2020-08-10 20-22-50.png’
Можно ещё вручную указать единицы измерения для показа размера. Для этого используйте опцию —block-size. Например, мегабайты:
ls -l —block-size=M
Вместо ls можно использовать команду ll, её вывод полностью аналогичен команде ls -l:
3. Утилита stat
Программа stat кроме метаданных позволяет выводить размер файла в байтах. Например:
stat ‘Снимок экрана от 2020-08-10 20-22-50.png’
Если нужно показать только размер, используйте опцию -с с указанием формата %s:
stat -c %s ‘Снимок экрана от 2020-08-10 20-22-50.png’
4. Утилита du
Программа du специально предназначена для просмотра размера файлов в папке. Вы можете просмотреть размер конкретного файла, например:
du -h ‘Снимок экрана от 2020-08-10 20-22-50.png’
Опция -h включает вывод размера в удобном для чтения формате. Если вы хотите посмотреть размеры для всех файлов в папке, просто передайте путь к папке:
А чтобы узнать размер папки в Linux используйте опцию -s. Она суммирует размеры всех объектов:
5. Утилита ncdu
Программа ncdu позволяет анализировать дисковое пространство занимаемое файлами и каталогами. Но она не поставляется вместе с системой. Для её установки выполните:
sudo apt install ncdu
Затем просто укажите в параметрах каталог, размер которого вы хотите посмотреть:
Все файлы будут отсортированы по размеру, а в самом низу будет отображен общий размер этой папки:
6. Утилита find
С помощью этой утилиты вы не можете узнать размер файла, зато можете найти файлы с определённым размером. С помощью параметра size можно указать границы размера файлов, которые надо найти. Например, больше чем 2000 килобайт, но меньше чем 2500 килобайт:
/Изображения/ -size +2000k -size -2500k
Размер можно ещё указывать в мегабайтах для этого используйте приставку M, или в байтах, тогда никакой приставки не нужно.
Выводы
В этой небольшой статье мы разобрались как узнать размер файлов linux, а также как посмотреть размер каталога и всех файлов в нём с помощью различных утилит. А какие способы просмотра размера используете вы? Напишите в комментариях!
Источник
Как проверить размер файла в сценариях оболочки Linux / Unix bash
Я новый пользователь сценариев оболочки bash. Как узнать размер файла в моем сценарии оболочки bash и сохранить этот размер файла в переменной оболочки bash?
Вы не можете получить размер файла в сценарии bash, используя внутреннюю или встроенную команду. Вам понадобятся несколько команд, включая stat. Командная строка stat отображает информацию о файле, включая его размер. Другой вариант — использовать команду wc, которая может подсчитывать количество байтов в каждом заданном файле. Давайте посмотрим, как использовать эти две команды для проверки размера файла в Linux или Unix-подобной системе.
Как проверить размер файла в unix с помощью команды wc
Команда wc показывает количество строк, слов и байтов, содержащихся в файле. Для получения размера файла, используйте синтаксис, который выглядит следующим образом:
Примеры возможных выводов данных:
Вы может с легкостью извлечь первое поле, используя или команду cut или команду awk:
Примеры возможных выводов данных:
или присвоить этот размер переменной bash:
Как узнать размер файла в сценарии bash, используя команду stat
Команда stat показывает информацию о файле. Используйте следующий синтаксис для того, чтобы узнать размер файла на GNU/Linux с помощью команды stat:
Чтобы присвоить этот размер переменной bash:
Используйте следующий синтаксис для того, чтобы узнать размер файла на BSD/MacOS с помощью команды
Обратите внимание, что если файл является символьной ссылкой, вы получите размер этой ссылки только с помощью команды stat.
Примеры команды du
Синтаксис выглядит следующим образом
Примеры возможных выводов данных указанных выше команд:
Рисунок 01: Как проверить размер файла с помощью оболочки bash/ksh/zsh/sh/tcsh?
Найдите пример команды
Синтаксис выглядит следующим образом:
Источник
Как я могу получить размер файла в сценарии bash?
Как я могу получить размер файла в сценарии bash?
Как назначить это переменной bash, чтобы впоследствии использовать ее?
13 ответов
Лучше всего, если в системе GNU:
ПРИМЕЧАНИЕ: см. @chbrown ниже ответ, как использовать stat в терминале в Mac OS X или
Проблема с использованием stat заключается в том, что это расширение GNU (Linux). du -k и cut -f1 задаются POSIX и поэтому переносятся в любую систему Unix.
Solaris, например, поставляется с bash, но не с stat . Так что это не совсем гипотетически.
ls имеет аналогичную проблему, так как точный формат вывода не указан, поэтому синтаксический анализ его вывода не может выполняться портативно. du -h также является расширением GNU.
Придерживайтесь переносных конструкций, где это возможно, и вы сделаете чью-то жизнь проще в будущем. Возможно, ваш собственный.
Вы также можете использовать команду «count count» ( wc ):
Проблема с wc заключается в том, что она добавит имя файла и сделает отступ выходным. Например:
Если вы хотите избежать связывания полного интерпретируемого языка или редактора потока только для получения количества файлов, просто перенаправьте входные данные из файла, чтобы wc никогда не видел имя файла:
Эта последняя форма может использоваться с подстановкой команд, чтобы легко получить значение, которое вы искали в качестве переменной оболочки, как указано Жиль ниже.
BSD (Mac OS X) stat имеет другой флаг аргументов формата и разные спецификаторы полей. Из man stat(1) :
- -f format : отображение информации в указанном формате. См. Раздел FORMATS для описания допустимых форматов.
- . раздел FORMATS .
- z : размер файла в байтах.
Итак, теперь все вместе:
Этот сценарий сочетает в себе множество способов расчета размера файла:
Скрипт работает во многих Unix-системах, включая Linux, BSD, OSX, Solaris, SunOS и т. д.
Размер файла показывает количество байтов. Это видимый размер, который представляет собой байты, которые файл использует на типичном диске, без специального сжатия или специальных разреженных областей или нераспределенных блоков и т. Д.
Этот сценарий имеет производственную версию с большей помощью и дополнительными опциями здесь: https://github.com/SixArm/sixarm_unix_shell_scripts/blob/master/file-size
Зависит от того, что вы подразумеваете под size .
предоставит вам количество байтов, которые можно прочитать из файла. IOW, это размер содержимого файла. Однако он прочитает содержимое файла (за исключением того, что файл является обычным файлом или символической ссылкой на обычный файл в большинстве реализаций wc в качестве оптимизации). Это может иметь побочные эффекты. Например, для именованного канала то, что было прочитано, больше не может быть прочитано снова и для таких вещей, как /dev/zero или /dev/random , которые имеют бесконечный размер , это займет некоторое время. Это также означает, что вам нужен read доступ к файлу.
Это стандартная и портативная, однако обратите внимание, что некоторые реализации wc могут включать в себя ведущие пробелы в этом выпуске. Один из способов избавиться от них — использовать:
или во избежание ошибки о пустом арифметическом выражении в dash или yash , когда wc не выводит результат (например, когда файл может » t будет открыт):
ksh93 имеет встроенный wc (при включении его вы также можете вызвать его как команду command /opt/ast/bin/wc ) что делает его наиболее эффективным для обычных файлов в этой оболочке.
В разных системах есть команда под названием stat , которая является интерфейсом к системным вызовам stat() или lstat() .
Данные отчета, найденные в inode. Одна из этих данных — это атрибут st_size . Для обычных файлов это размер содержимого (сколько данных можно было прочитать из него при отсутствии ошибки (это то, что используют большинство wc -c ) в своей оптимизации)). Для символических ссылок это размер в байтах целевого пути. Для именованных каналов, в зависимости от системы, это либо 0, либо количество байтов, находящихся в настоящее время в буфере канала. То же самое для блочных устройств, где в зависимости от системы вы получаете 0 или размер в байтах базового хранилища.
Вам не нужно разрешение на чтение файла для получения этой информации, только разрешение на поиск в каталоге, к которому он привязан.
По хронологическому порядку:
возвращает st_size атрибут $file ( lstat() ) или:
то же самое, за исключением случаев, когда $file является символической ссылкой, и в этом случае это символ st_size файла после разрешения символической ссылки.
zsh stat builtin (теперь также известный как stat ) в модуле zstat (загружается с помощью zsh/stat ) (1997):
или сохранить в переменной:
, очевидно, это наиболее эффективно в этой оболочке.
GNU stat -L -A size +size — $file (2001); также в BusyBox stat с 2005 года (скопировано из GNU stat ):
(обратите внимание, что значение stat -c %s — «$file» # st_size of file stat -Lc %s — «$file» # after symlink resolution отменено по сравнению с IRIX или -L zsh .
Или вы можете использовать функцию stat -f %z — «$file» # st_size of file stat -Lf %z — «$file» # after symlink resolution / stat() для некоторого языка сценариев, например lstat() :
AIX также имеет perl -le ‘print((lstat shift)[7])’ — «$file» , который выведет все istat (не stat() , поэтому не будет работать с символическими ссылками), и что вы может выполнять пост-обработку, например:
В LC_ALL=C istat «$file» | awk ‘NR == 4
(размер после разрешения символической ссылки)
Задолго до того, как GNU представила свой @ size = -Z $file:q команды, то же самое можно было бы сделать с помощью команды GNU stat с ее предикатом find (уже в 1991 году):
Одна проблема заключается в том, что это не работает, если find — «$file» -prune -printf ‘%s\n’ # st_size of file find -L — «$file» -prune -printf ‘%s\n’ # after symlink resolution начинается с $file или является предикатом — (например, find , ! . ).
Стандартная команда для получения информации ( / stat() : lstat() .
POSIXly, вы можете сделать:
и добавьте LC_ALL=C ls -dn — «$file» | awk ‘
Для блочных устройств, систем, где -L возвращает 0 для stat() , обычно имеют другие API-интерфейсы, чтобы сообщать размер блочного устройства. Например, Linux имеет st_size BLKGETSIZE64 , и большинство дистрибутивов Linux теперь поставляются с командой ioctl() , которая может ее использовать:
Однако для этого вам требуется разрешение на чтение файла устройства. Обычно можно получить размер другими способами. Например (еще в Linux):
Должна работать, кроме пустых устройств.
Подход, который работает для всех файлов с возможностью поиска (включая обычные файлы, большинство блочных устройств и некоторые символьные устройства), заключается в том, чтобы открыть файл и найти его до конца:
С помощью lsblk -bdno size — «$device_file» (после загрузки модуля zsh ):
Для именованных каналов мы видели, что некоторые системы (AIX, Solaris, HP /UX, по крайней мере) делают объем данных в буфере каналов доступным в perl -le ‘seek STDIN, 0, 2 or die «seek: $!»; print tell STDIN’ ‘ stat() . Некоторые (например, Linux или FreeBSD) этого не делают.
В Linux, по крайней мере, вы можете использовать st_size FIONREAD после открытия канала (в режиме чтения + записи, чтобы избежать его зависания):
Однако обратите внимание, что, хотя он не читает содержимое канала, простое открытие именованного канала здесь может по-прежнему иметь побочные эффекты. Мы используем fuser -s — «$fifo_file» && perl -le ‘require «sys/ioctl.ph»; ioctl(STDIN, &FIONREAD, $n) or die$!; print unpack «L», $n’ <> «$fifo_file» , чтобы сначала проверить, что в каком-то процессе уже открыт канал, чтобы облегчить это, но это не является надежным, поскольку fuser , возможно, не сможет проверить все процессы.
Теперь мы рассматриваем только размер первичных данных, связанных с файлами. Это не учитывает размер метаданных и всю вспомогательную инфраструктуру, необходимую для хранения этого файла.
Другой атрибут inode, возвращаемый fuser , это stat() . Это число блоков по 512 байт, которые используются для хранения данных файла (а иногда и некоторых его метаданных, таких как расширенные атрибуты файловых систем ext4 в Linux). Это не включает сам индекс или записи в каталогах, к которым связан файл.
Размер и использование диска не обязательно тесно связаны с сжатием, редкостью (иногда некоторыми метаданными), дополнительная инфраструктура, такая как косвенные блоки в некоторых файловых системах, влияет на последних.
Обычно для использования дискового пространства используется st_blocks . Большинство команд, перечисленных выше, смогут получить эту информацию.
- du
- POSIXLY_CORRECT=1 ls -sd — «$file» | awk ‘
‘ (не для каталогов, где это будет включать использование файлов в файлах внутри). - GNU POSIXLY_CORRECT=1 du -s — «$file»
- find — «$file» -printf ‘%b\n’
- GNU zstat -L +block — $file
- BSD stat -c %b — «$file»
- stat -f %b — «$file»
ls -l filename предоставит вам много информации о файле, включая его размер файла, разрешения и владельца.
Размер файла в пятом столбце и отображается в байтах. В приведенном ниже примере размер файла составляет менее 2 КБ:
Изменить: Это, по-видимому, не так надежно, как команда stat .
Источник