Размеры папок и дисков в Linux. Команды df и du
- как посмотреть свободное место на диске
- Команда du – синтаксис и опции
- Примеры использования команды du
- Команда ncdu
- Примеры команд ncdu
- Свободное место на диске (df)
- Примечание:
- Опция -h
- Размер конкретного диска
- Размер папок на диске (du)
- Просмотр размера текущей папки
- Посмотреть размеры всех папок
- Отобразить размеры всех вложенных папок
- Отсортировать папки по объёму
- Размер папки в которой мы находимся
- Размер произвольной папки или сразу нескольких папок
- Сортируем вывод по размеру папок/файлов
Одной из распространённых задач в системном администрировании является оценка состояния жёстких дисков (а также и других устройств хранения), в том числе анализ использования дискового пространства. В 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
|
root@debian:~# 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
|
root@debian:~# df -h /dev/sda Filesystem Size Used Avail Use% Mounted on udev 10M 0 10M 0% /dev |
Используя опцию –i, мы можем получить данные о состоянии inode заданной нами директории.
1
2
3
|
root@debian:~# df -hi /dev/sda Filesystem Inodes IUsed IFree IUse% Mounted on udev 123K 332 123K 1% /dev |
Давайте узнаем сколько у нас свободного места в системе. Узнать это можно с помощью команды
df –h
как видим у нас диск занят на 97%, и нам необходимо узнать что у нас заняло место. Давайте этим займемся.
к содержанию ↑
Команда du – синтаксис и опции
Disk Usage – именно так интерпретируется название команды du. Она была написана ещё в самой первой версии UNIX (в определённом роде предшественницы Linux), еще в стенах одной из лабораторий компании AT&T. Этот факт даёт понять, насколько важно следить за дисковым пространством, а также анализировать его при наличии специализированных программных инструментов, ведь du – одна из самых первых утилит из стандартного комплекта UNIX/Linux.
Итак давайте узнаем что у нас занимает место
du --max-depth=1 -h /
Более подробное описание команды du и ключей вы можете прочитать ниже. Вывод будет следующий
Отсюда мы видим что самый большой каталог у нас /var. Посмотрим что у на занимает место в каталоге /var
du --max-depth=1 -h /var
видим что это папка log
Теперь смотрим /var/log
du -ah /var/log
и вот здесь мы уже видим пять самых больших файлов с логами, именно они и заняли все место на диске. Давайте рассмотрим команду 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 /
Снова видим большой каталог /var, и уже с помощью клавишь и ENTER мы можем передвигаться по каталогам. Видим каталог log
А здесь мы видим наши большие логи
Еще несколько полезных примеров.
Сканирование объёмных каталогов с экспортом/архивированием в лог для последующего использования или просмотра:
$ ncdu -1xo- / | gzip > usage_fs.gz $ zcat usage_fs.gz | ncdu -f-
Сканирование текущей директории, экспорт результатов в лог, и последующий просмотр этих результатов в браузере ncdu:
$ ncdu -o- | tee usage_fs.txt | ncdu -f-
Работа с удалённой системой:
ssh -C username@hostname 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