Размеры папок и дисков в Linux. Команды df и du

0
459

Одной из распространённых задач в системном администрировании является оценка состояния жёстких дисков (а также и других устройств хранения), в том числе анализ использования дискового пространства. В Linux для таких целей давно существуют утилиты с удобным графическим интерфейсом, предоставляющих наглядную информацию о занятом пространстве в виде диаграмм и графиков. Однако, для системных администраторов, обслуживающих «серьёзные» сервера на основе Linux-систем, графический интерфейс — чрезмерное удовольствие, не оправдывающее затрачиваемых на него ресурсов. Поэтому необходимо уметь обходиться средствами командной консоли, используя специализированные консольные утилиты для анализа дискового пространства, которые доступны в виде двух команд — du и ncdu.

к содержанию ↑

как посмотреть свободное место на диске

Для того, чтобы посмотреть, сколько места занимает файловая система, диск, файл или каталог, в Linux существует две команды: df и du.

Df (disk free) выводит список всех файловых систем по именам устройств с указанием размера, показывает точки монтирования и количество свободного/занятого пространства.

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

1
2
3
4
5
6
7
8
9
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 4673664 805492 3607720 19% /
udev 10240 0 10240 0% /dev
tmpfs 204876 4500 200376 3% /run
tmpfs 512184 0 512184 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 512184 0 512184 0% /sys/fs/cgroup
/dev/sda2 945144 223548 656368 26% /var
/dev/sda3 1889292 2904 1772368 1% /home

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

Синтаксис команды

1
# df опции файл/устройство

Список опций

-а, —all – отображение абсолютно всех файловых систем, в том числе и виртуальных;

-h, —human-readable – показ буквы для обозначения размера файла/каталога;

-I, —inodes – выводится информация об inode’ах: имя владельца, права доступа, местонахождение в системе, временные штампы;

-k, —kilobytes – вывод размеров в килобайтах;

-l,—local – показывает данные о локальных файловых системах;

— output – позволяет задать формат вывода по таким параметрам: ‘source’, ‘fstype’, ‘itotal’, ‘iused’, ‘iavail’, ‘ipcent’, ‘size’, ‘used’, ‘avail’, ‘pcent’, ‘file’ и ‘target’; по умолчанию команда показывает сразу все параметры;

-Р, —portability – вывод информации согласно стандарту Posix. Информация о конкретной файловой системе будет выводится в одну строку;

—sync – отправка системного вызова перед получением информации об использовании пространства на диске;

-t —type – вывод информации о файловых системах указанного типа;

-x —exclude type – не показывать информацию о файловых системах указанного типа.

Наиболее часто используется опция –h, поскольку она оказывает данные в килобайтах.

Вводим команду

1
# df -h

В качестве вывода получаем более понятную картину

1
2
3
4
5
6
7
8
9
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 4.5G 787M 3.5G 19% /
udev 10M 0 10M 0% /dev
tmpfs 201M 4.4M 196M 3% /run
tmpfs 501M 0 501M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 501M 0 501M 0% /sys/fs/cgroup
/dev/sda2 923M 219M 641M 26% /var
/dev/sda3 1.9G 2.9M 1.7G 1% /home

Чтобы получить информацию о всех смонтированных файловых системах, прописываем

1
# df –a

Получаем вывод (первые 10 строк)

1
2
3
4
5
6
7
8
9
10
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs - - - - /
sysfs 0 0 0 - /sys
proc 0 0 0 - /proc
udev 10240 0 10240 0% /dev
devpts 0 0 0 - /dev/pts
tmpfs 204876 4500 200376 3% /run
/dev/sda1 4673664 805492 3607720 19% /
securityfs 0 0 0 - /sys/kernel/security
tmpfs 512184 0 512184 0% /dev/shm

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

1
# df –x tmpfs

Наш список существенно уменьшился

1
2
3
4
5
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 4673664 805492 3607720 19% /
udev 10240 0 10240 0% /dev
/dev/sda2 945144 223592 656324 26% /var
/dev/sda3 1889292 2904 1772368 1% /home

Можно задать файловую систему на свое усмотрение

1
2
3
4
5
[email protected]:~# df -t ext4
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 4673664 805492 3607720 19% /
/dev/sda2 945144 223592 656324 26% /var
/dev/sda3 1889292 2904 1772368 1% /home

Или указать интересующий раздел

1
2
3
[email protected]:~# df -h /dev/sda
Filesystem Size Used Avail Use% Mounted on
udev 10M 0 10M 0% /dev

Используя опцию –i, мы можем получить данные о состоянии inode заданной нами директории.

1
2
3
[email protected]:~# df -hi /dev/sda
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 123K 332 123K 1% /dev

Давайте узнаем сколько у нас свободного места в системе. Узнать это можно с помощью команды

df –h

Размеры папок и дисков в Linux. Команды df и du

как видим у нас диск занят на 97%, и нам необходимо узнать что у нас заняло место. Давайте этим займемся.

 

к содержанию ↑

Команда du – синтаксис и опции

Disk Usage – именно так интерпретируется название команды du. Она была написана ещё в самой первой версии UNIX (в определённом роде предшественницы Linux), еще в стенах одной из лабораторий компании AT&T. Этот факт даёт понять, насколько важно следить за дисковым пространством, а также анализировать его при наличии специализированных программных инструментов, ведь du – одна из самых первых утилит из стандартного комплекта UNIX/Linux.

Итак давайте узнаем что у нас занимает место

du --max-depth=1 -h /

Более подробное описание команды du и ключей вы можете прочитать ниже. Вывод будет следующий

Размеры папок и дисков в Linux. Команды df и du

Отсюда мы видим что самый большой каталог у нас /var. Посмотрим что у на занимает место в каталоге /var

du --max-depth=1 -h /var

видим что это папка log

Размеры папок и дисков в Linux. Команды df и du

Теперь смотрим /var/log

du -ah /var/log

Размеры папок и дисков в Linux. Команды df и du

и вот здесь мы уже видим пять самых больших файлов с логами, именно они и заняли все место на диске. Давайте рассмотрим команду du подробнее.

Согласно описанию из официального man-руководства, утилита du суммирует использование дискового пространства набора элементов, рекурсивно с каталогами. Синтаксис команды не простой, а очень простой, поскольку представляет собой классический прототип команды Linux:

du [КЛЮЧ]… [что сканировать]…

Если дать команду du без параметров, то по-умолчанию будет выведен список всех каталогов и подкаталогов для текущего каталога. Также по-умолчанию единицей измерения объёма является 1024 байта или 512 байт, в зависимости от конфигурации используемой системы:

du code_text.txt
4    code_text.txt

Как видно, code_text.txt занимает 4 килобайта (т. к. 1024 байта = 1 килобайт) дискового пространства. То же самое и с папками, но по-умолчанию будет указан общий размер папки без детализации по файлам и подкаталогам. В следующей таблице приведены опции команды du:

Опция Назначение
-a Выводит объём для всех элементов, а не только для каталогов
—apparent-size Выводит действительные размеры, но не занимаемое место а диске
-B,

—block-size=РАЗМЕР

Задаёт использование определённых единиц измерения объёма
-b,

 

—bytes

То же самое, что и «—block-size —apparent-size=1»
-с,

 

—total

Выводит общий результат
-D,

 

—dereference-args

Указывает обрабатывать только те символьные ссылке, которые перечислены в командной строке
-d, —max-depth=N Выводит общий размер только до N-го уровня (включительно) дерева каталогов
-h,

 

—human-readable

Выводит размеры в удобном для человека виде
-k Эквивалентно —block-size=1K
-L,

 

—dereference

Разыменовывает символьные ссылки
-l,

 

—count-links

Складывает размеры, если несколько жёстких ссылок
-m Эквивалентно —block-size=1M
-t,

 

—threshold=РАЗМЕР

Исключает элементы, которые меньше РАЗМЕРА, если это значение положительно или размер которых больше, если это значение отрицательно
—time Выводит время последнего изменения в каталоге и во всех подкаталогах
—time=АТРИБУТ Выводит указанный атрибут времени (atime, access, use, ctime, status), а не время последнего изменения
—time-style=СТИЛЬ Выводит время в указанном в СТИЛЬ формате: full-iso, long-iso, iso
-X,

 

 

—exclude-from=ФАЙЛ

Исключает все эдементы, которые совпадают с шаблоном из ФАЙЛа
—exclude=ШАБЛОН Исключает элементы, совпадающие с шаблоном
-x,

 

—one-file-system

Пропускать каталоги из других систем

Используемые командой du единицы измерения размера (или объёма) задаются в формате «цифраБуква», где цифра — это коэффициент, а Буква — степень единицы измерения, например: 5K = 5 * 1024 = 5120 = 5 килобайт и по аналогии для M – мегабайт, G – гигабайт.

к содержанию ↑

Примеры использования команды du

Узнать общий размер каталога (например с резервными копиями):

$ du -sh ~/home/backups
19G  /home/john/backups

Вывод размеров всех подкаталогов (рекурсивно):

$ du -h ~/home/backups/
3,2M /home/john/backups/vhosts/ssl
1,5M /home/john/backups/vhosts
5,0M /home/john/backups

С учётом файлов:

$ du -ha ~/home/backups/
4,0K /home/john/backups/.directory
764K /home/john/backups/scheme.txt
3,2M /home/john/backups/vhosts/ssl
1,5M /home/john/backups/vhosts
5,0M /home/john/backups

С фильтрацией в зависимости от размера файла/каталога:

$ du -ha -t2M ~/home/backups/
3,2M /home/john/backups/vhosts/ssl
5,0M /home/john/backups

Как видно, были отброшены файлы/каталоги размером меньше 2 мегабайт. Следующая команда, напротив — исключит из вывода только файлы/каталоги больше 2 мегабайт:

$ du -ha ~/home/backups/
4,0K /home/john/backups/.directory
764K /home/john/backups/scheme.txt
1,5M /home/john/backups/vhosts
к содержанию ↑

Команда ncdu

Более удобный способ найти что занимает место на диске можно с помощью команды ncdu. Утилита ncdu (Ncurses Disk Usage) способна делать всё то же самое, что и утилита du и даже немного больше. К тому же, она предоставляет пользователю удобный в использовании псевдографический интерфейс, с помощью которого можно быстро перемещаться по дереву системы, оценивая размеры интересующих элементов  и папок.

Фактически, ncdu может выполнять функции полноценного браузера системы, при этом имеет большое количество опций, позволяющих настраивать псевдоинтерфейс для разных режимов работы, экспортировать и импортировать результаты работы в файлы, выполнять сортировки, экономить сетевой трафик, если это нужно, когда анализируется удалённая (например по SSH) система.

По-умолчанию, выполнение команды ncdu без параметров, выводит файловый браузер, в котором после предварительного сканирования (с показом прогресса выполнения) отображается список элементов и подкаталогов текущего каталога. По этому списку можно перемещаться, используя клавиши курсора, спускаться в подкаталоги (<Enter>) выходить из них, при этом информация о размере представленных элементах и папок отображается «как на ладони». В строке состояния отображается общий используемый объём (Total disk usage), фактический объём (Apparent size), а также количество файлов и папок  для текущего анализируемого каталога.

Основные опции команды ncdu:

Опция Назначение
-o ФАЙЛ Позволяет экспортировать результаты работы в указанный файл
-f ФАЙЛ Загружает из файла для отображения данные ранее экспортированные с помощью опции -o
-0 Не никаких информационных сообщений при сканировании файловой системы
-1 Подобна опции -0, но выдаёт единственную строку о статусе выполненного действия. По-умолчанию используется при экспорте в файл
-q Тихий режим. Во время сканирования директории экран с результатами сканирования будет обновляться каждые 2 секунды, вместо 10 раз за секунду. Обычно используется при работе с удаленными системами
-r Включает режим «только для чтения» для отключения встроенной функции удаления. Не работает с опцией -o
-x Не выходить за рамки текущей используемой файловой системы
—exclude ШАБЛОН Исключает из подсчёта значения размеров файлов, имена которых удовлетворяют шаблону, но эти файлы будут отображаться в списке
-X ФАЙЛ,

—exclude-from-file

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

Интерфейс ncdu действительно очень дружественный — размеры всегда отображаются в «человекопонятных» единицах.

Для работы с псевдоинтерфейсом ncdu предусмотрен целый набор «горячих клавиш», позволяющих удалять выбранные файлы и каталоги, включать режим представления используемого пространства в процентах, отображать информацию о выбранных элементах, а также выполнять другие полезные функции. Об этом более подробно можно прочитать в соответствующих man-страницах в разделе «KEYS», используя команду man ncdu.

к содержанию ↑

Примеры команд ncdu

Сделаем поиск занимаемого пространства с помощью ncdu
ncdu /

Размеры папок и дисков в Linux. Команды df и du

Снова видим большой каталог /var, и уже с помощью клавишь и ENTER мы можем передвигаться по каталогам. Видим каталог log

Размеры папок и дисков в Linux. Команды df и du

А здесь мы видим наши большие логи

Размеры папок и дисков в Linux. Команды df и du

Еще несколько полезных примеров.

Сканирование объёмных каталогов с экспортом/архивированием в лог для последующего использования или просмотра:

$ ncdu -1xo- / | gzip > usage_fs.gz
$ zcat usage_fs.gz | ncdu -f-

Сканирование текущей директории, экспорт результатов в лог, и последующий просмотр этих результатов в браузере ncdu:

$ ncdu -o- | tee usage_fs.txt | ncdu -f-

Работа с удалённой системой:

ssh -C [email protected] ncdu -o- / ncdu -f-

В данной команде опция -C используется для утилиты ssh для сжатия сетевого трафика при некачественном или медленном соединении.

к содержанию ↑

Свободное место на диске (df)

Для просмотра свободного и занятого места на разделах диска в Linux можно воспользоваться командой df.

Первым делом можно просто ввести команду df без каких-либо аргументов и получить занятое и свободное место на дисках. Но по умолчанию вывод команды не очень наглядный — например, размеры выводятся в КБайтах (1К-блоках).

Примечание:

df не отображает информацию о не смонтированных дисках.

Опция -h

Опция -h (или —human-readable) позволяет сделать вывод более наглядным. Размеры выводятся теперь в ГБайтах.

df -h

Размер конкретного диска

Команде df можно указать путь до точки монтирования диска, размер которого вы хотите вывести:

df -h /dev/sda9

Размер папок на диске (du)

Для просмотра размеров папок на диске используется команда du. Если просто ввести команду без каких либо аргументов, то она рекурсивно проскандирует вашу текущую директорию и выведет размеры всех файлов в ней. Обычно для du указывают путь до папки, которую вы хотите проанализировать. Если нужно просмотреть размеры без рекурсивного обхода всех папок, то используется опция -s (–summarize). Также как и с df, добавим опцию -h (–human-readable).

к содержанию ↑

Просмотр размера текущей папки

Чтобы показать объем просто одного текущего каталога (со всеми вложенными файлами + подкаталогами) подойдёт команда du с ключиком -sh.

Вот пример, как определить размер директории данного сайта:

du -sh

Посмотреть размеры всех папок

Если нужно посчитать вес всех директорий плюс файлы — добавляем звёздочку:

du -sh *

Отобразить размеры всех вложенных папок

Чтобы проверить информацию в том числе вообще по всем папкам, вместе со вложенными – понадобится самый короткий вариант:

du -h

Внимание: если такой случайно запустить в корне на объёмном диске с большим количеством информации – лучше сразу жмите CTRL-C, т.к. во-первых, иначе придётся сильно подождать 😉 , во-вторых, десятки-сотни экранов информации будут бессмысленными. Потому эта простая команда должна использоваться лишь для, соответственно, простых случаев.

к содержанию ↑

Отсортировать папки по объёму

du -s *| sort -nr

Покажет объём в килобайтах с сортировкой – самые большие папки/файлы сверху. Если нужно в мегабайтах:

du -sm *| sort -nr

К сожалению более удобный ключик h (“human” – автовыбор кило-мега-гига) в данном случае (du -sh *| sort -nr) не подойдёт, т.к. сортировка идёт по “числам” (не учитывая, что это KB/MB/GB). Для этого придётся использовать длинную команду:

du -s *|sort -nr|cut -f 2-|while read a;do du -hs $a;done

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

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

du
du название_папки
du [опция] название_папки

При выполнении команды du (без указания папки и опции) вы получите все файлы и папки текущей директории с их размерами.

к содержанию ↑
// в килобайтах (по умолчанию)
du -s
// в килобайтах    
du -sk
// в байтах    
du -sb
// в мегабайтах    
du -sm
// в удобном формате (часто используемый)   
du -sh
// Глубина
du -h --max-depth=1
// Размер произвольной папки   
du -sh   /home/images
// Размер всех объектов в папке:
du -sh *
// Добавим в вывод итоговый размер папки с помощью ключа -с:
du -sсh *
// И то же самое для произвольного пути:
du -sh /home/*

Используем команду sort.

Параметр -n указывает, что нужно использовать числовую сортировку, а -r задает обратный порядок (т.е. самые большие папки будут выведены первыми):

du -sh * | sort -nr

Оставьте свой ответ