Часто возникает необходимость проверить размер директорий и файлов в проекте и оценить занимаемое в dev/live окружениях пространство.
Вот список полезных команд, которые вы можете использовать, чтобы убедиться, что на машине достаточно свободного дискового пространства, и что размер node_modules вашего проекта не сошел с ума: D
Мы будем использовать команду du, пояснения ниже:
du (disc usage) command estimates file_path space usage The options -sh are (from man du): -s, --summarize display only a total for each argument -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)
Чтобы проверить несколько каталогов и увидеть общий размер, используйте
du -sch
:-c, --total produce a grand total
Итак, давайте посмотрим основные команды:
Показать размер каталога в читаемом формате:
$ du -sh directory/
Показать упорядоченный по размеру список всех файлов и директорий вместе с их размерами:
$ du -sh * | sort -h
Пример того, как выглядит результат этой команды на тестовом проекте:
paul@paul-Inspiron-N5110:~/projects/flutter_test$ du -sh * | sort -h 4,0K android.iml 4,0K flutter_test_android.iml 4,0K flutter_test.iml 4,0K pubspec.yaml 4,0K README.md 8,0K test 12K lib 200K android 212K ios
Если вы хотите включить скрытые файлы и каталоги (начинаются с точки):
$ du -sch .[^.]* * |sort -h
Бонус:
Показать общий и доступный объем системных разделов:
$ df -h
Показать использование инодов в вашей системе:
$ df -i
Если у вас есть более полезные команды, поделитесь ими в комментариях!
Комментарии (33)
valery1707
27.06.2018 17:21+4Используйте
ncdu
: nCurses du
Плюсы:
- Интерактивен
- Позволяет бегать по каталогам
- Сортирует по размеру
- Показывает в понятном виде
- Позволяет удалять файлы и рефрешить частично
Минусы:
- Нужно ставить
limonte Автор
27.06.2018 17:26-1Спасибо, поставил, пользуюсь. Добавлю еще один минус — скорость, по 500-мегабайтовому node_modules он неспешно так пробегался секунды 3-4.
valery1707
27.06.2018 17:39А
du
по тому же архиву отрабатывает сильно быстрее?
Скорее всего дело в том что вnode_modules
много файлов, аncdu
вынужден хранить данные о каждом файле/папке, в отличии отdu
.limonte Автор
27.06.2018 17:45-1А du по тому же архиву отрабатывает сильно быстрее?
Хм, и то и другое использует какой-то кэш. Первый раз медленно оба, второй раз оба мгновенно. Так что мой предыдущий комментарий неточен, прошу прощения.
Alj
27.06.2018 22:51+1Тот, который buff/cache в выводе команды free -m
Как только эта память понадобится приложениям — она будет освобождена
acmnu
27.06.2018 17:32Очень полезный ограничитель max-depth. Это позволяет раскручивать дерево на любую глубину.
Я активно использую вот такую функцию, может кому пригодится.
hlp_du_subdirs () { where=${1:-.}; du -a -m --max-depth 1 $where | sort -n }
vaniacer
27.06.2018 17:48Я делаю почти также, но добавляю к ду ключ -x чтобы пропускать каталоги из других файловых систем, а к сорт ключ -r, удобнее показывать сначала бОльшие файлы:
du -shx * | sort -hr
Gilberg
27.06.2018 19:09+1А это смотря сколько у вас файлов в директории, если 10-20, то да, но если больше — то лучше чтобы были внизу.
Но, как говорится, на вкус и цвет…
robert_ayrapetyan
27.06.2018 17:58-1Для du лучше всегда использовать ключ -A
limonte Автор
27.06.2018 19:25-1Такого ключа у du не существует.
robert_ayrapetyan
27.06.2018 19:35+1Существует, существует. Просто сокращение для --apparent-size. Это именно тот размер, который обычно хочет видеть пользователь. Без него на разделах с включенной компрессией будет подсчитан размер сжатого файла, что весьма сильно сбивает с толку. Так что убирайте свой минус.
limonte Автор
27.06.2018 19:59-1Во-первых, ключа -A у du нет, пруф из man du:
Во-вторых, "лучше всегда использовать" без "потому что" заслуживает только минуса. Так что минус первому комменту и плюс второму :)
robert_ayrapetyan
27.06.2018 21:20По-чесноку, у меня оборвался первый коммент, как раз на пояснении (поэтому точка не стоит в конце предложения). А по ману — это старый, с Ubuntu 12, кажется, добавили этот ключ.
027
27.06.2018 22:45+1Ubuntu 16.04:
onotole@home ~ $ du -A *
du: неверный ключ — «A»
По команде «du --help» можно получить дополнительную информацию.
robert_ayrapetyan
27.06.2018 23:59Странно, в FreeBSD:
NAME
du — display disk usage statistics
SYNOPSIS
du [-Aclnx] [-H | -L | -P] [-g | -h | -k | -m] [-a | -s | -d depth]
[-B blocksize] [-I mask] [-t threshold] [file ...]
DESCRIPTION
The du utility displays the file system block usage for each file
argument and for each directory in the file hierarchy rooted in each
directory argument. If no file is specified, the block usage of the
hierarchy rooted in the current directory is displayed.
The options are as follows:
-A Display the apparent size instead of the disk usage. This can be
helpful when operating on compressed volumes or sparse files.
А то что он есть в убурне 12.2 взято отсюда: superuser.com/questions/602818/how-to-get-the-actual-directory-size-out-of-du.
Значит? нет короткого варианта в убунте, только длинный, ничего не поделать…Vkuvaev
28.06.2018 00:40Вы серьезно так сравниваете две команды из разных OS? Не говоря уже о том что одна Unix а другая Linux, и, наконец, они только с виду похожи, реализация независима.
robert_ayrapetyan
28.06.2018 00:51В данном случае речь идет о прикладной стандартной утилите, где опция есть (просто в Linux для нее не придумали сокращения), сравнение весьма уместно.
Насчет философии вокруг Unix\Linux — Freebsd такой же Unix как и Linux, но, предвидя дискуссию с ссылками и свидетельствами очевидцев на много уровней вглубь, призываю не начинать это обсуждение здесь…Vkuvaev
28.06.2018 00:56Отвечу чтоб закрыть вопрос, упаси господь от бессмысленных дискуссий, мне есть чем заняться
027
28.06.2018 01:43А то что он есть в убурне 12.2 взято отсюда: superuser.com/questions/602818/how-to-get-the-actual-directory-size-out-of-du.
Там как раз нет короткого варианта. Скорее всего, и не было никогда.
Freebsd такой же Unix как и Linux
Немного не так. GNU окружение очень похоже на BSD окружение, но не идентично ему.
nlog
27.06.2018 19:27-1Я бы добавил ключ r к sort, чтобы самые тяжёлые вещи были наверху списка.
du -sh * | sort -hr
Barafu_Albino_Cheetah
27.06.2018 20:48Подскажите, если кто знает команду, прежде чем я начал писать велосипед.
Есть папка А и папка Б. В папке Б дохрена файлов, требуется из папки Б удалить те файлы, что есть в папке А (с другими названиями). Без ручной проверки каждого случая. Команды типа fdupes или fslint предлагают на удаление файл из случайной папки, если только я не пропусти какой-либо ключ. Поэтому сами по себе не годятся.kloppspb
27.06.2018 21:32если только я не пропусти какой-либо ключ
Оформить в виде скрипта, в котором все правильные ключи прописаны, и принимающего два аргумента (имена каталогов) — не?Barafu_Albino_Cheetah
27.06.2018 23:23Не. В каком порядке папки не даю, он предлагает удалять откуда получится.
Vkuvaev
28.06.2018 00:46Попробуйте в виде скрипта с Md5 суммой, сначала все их в два файлика сбросьте, затем потрите в нужной папке если есть повтор.
Велосипед, конечно. Но зато можно сделать быстро.
pansa
28.06.2018 01:37Думаю, как-то так
find dirA/ -type f -exec md5sum '{}' \; | sort > out1
find dirB/ -type f -exec md5sum '{}' \; | sort > out2
join… out1 out2 > to_del (тут на память ключи не помню, но суть должна быть понятна)
проверяем руками to_del, если похоже на правду, то грохаем все файлы, перечисленные в нем, как-то так
awk '{print $1}' to_del | xargs rm
Alj
27.06.2018 22:28Мне удобнее видеть по алфавиту и в одной единице измерения. Например:
du -hsm /var/lib/mysql/*
du -hsm /home/*
aFanOfSwift
Вот за это спасибо!