Поиск файлов, которые занимают больше всего дискового пространства

43

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

Я делаю много вычислений с интенсивным использованием данных, с большим количеством маленьких файлов и очень маленьким количеством очень больших файлов. Поскольку большая часть моего дискового пространства используется в очень небольшом количестве файлов, может быть трудно отследить, где находятся эти большие файлы. Удаление файла размером 1 КБ не освобождает много места, но удаление файла размером 100 ГБ. Есть ли способ сортировки файлов на жестком диске по размеру?

Спасибо.

Эндрю
источник
Информацию о «tdu» смотрите также: unix.stackexchange.com/questions/425615/…
Джозеф Пол

Ответы:

47

С помощью стандартных доступных инструментов:

Чтобы получить список 10 самых больших файлов из текущего каталога: du . | sort -nr | head -n10

Чтобы вывести список самых больших каталогов из текущего каталога: du -s * | sort -nr | head -n10

ОБНОВЛЕНИЕ В эти дни я обычно использую более читабельную форму (как объясняет Джей Чакра в другом ответе и не обращайте внимания | head -n10, просто позвольте ей прокручиваться за пределы экрана. Последняя строка имеет самый большой файл или каталог (дерево).

Иногда, например. если в текущем каталоге много точек монтирования, вместо использования -xили нескольких --exclude=PATTERN, удобнее монтировать файловую систему в неиспользуемой точке монтирования ( часто /mnt ) и работать оттуда.

Помните, что при работе с большими (NFS) томами вы можете вызвать значительную нагрузку на внутренний сервер хранения (filer) при работе duс большим количеством (под) каталогов. В этом случае лучше рассмотреть настройку quotaгромкости.

jippie
источник
3
Для вашего первого варианта, вы не можете просто перечислить их с ls -Sl | head?
Бернхард
Нет, duобходит все дерево каталогов, тогда как ls -S проверяет только текущий каталог.
Джиппи
35

Добавление к ответу Джиппи

Чтобы вывести список самых больших каталогов из текущего каталога в удобочитаемом формате:

du -sh * | sort -hr | head -n10

Образец:

[~]$ du -sh * | sort -hr | head -n10
48M app
11M lib
6.7M    Vendor
1.1M    composer.phar
488K    phpcs.phar
488K    phpcbf.phar
72K doc
16K nbproject
8.0K    composer.lock
4.0K    README.md

Это делает его более удобным для чтения :)

Джей Чакра
источник
14

Попробуйте ncdu, так как он может дать вам обзор использования диска. С его сайта:

Анализатор использования диска с интерфейсом ncurses, предназначенный для работы на удаленном сервере, где у вас нет полной гэпхейской настройки, но вы должны иметь дело с простым SSH-соединением. ncdu стремится быть быстрым, простым и легким в использовании и должен быть в состоянии работать в любой минимальной POSIX-подобной среде с установленными ncurses.

Ренан
источник
3

(ГНУ)

du -max /dir | sort -nБудет отображать большие файлы, а также большие каталоги, могут быть использованы для определения, где вам нужно сделать некоторую очистку.

du -max | sort -n | tail -1000
...
46632   ./i386/update/SuSE-SLES/8/rpm/i586/kernel-source-2.4.21-138.i586.rpm
49816   ./UnitedLinux/apt/i386/RPMS.updates/k_debug-2.4.21-138.i586.rpm
679220  ./UnitedLinux/apt/i386/RPMS.updates
679248  ./UnitedLinux/apt/i386
679252  ./UnitedLinux/apt
691820  ./UnitedLinux/i586
691836  ./i386/update/SuSE-SLES/8/rpm/i586
695192  ./i386/update/SuSE-SLES/8/rpm
695788  ./i386/update/SuSE-SLES/8
695792  ./i386/update/SuSE-SLES
695804  ./i386/update
695808  ./i386
1390184 ./UnitedLinux

(Я знаю, что это довольно старое дерево: p)

Эммануэль
источник
2

Существует простой и эффективный способ найти размер каждого файла и каталога в Ubuntu:

Приложения> Аксессуары> Анализатор использования дисков

в этом окне нажмите кнопку «Сканировать файловую систему» ​​на панели инструментов. через короткое время (секунды) у вас есть использование диска каждого каталога и файла.

Сэм
источник
0

Вы можете попробовать с этой командой, она будет перечислять все файлы размером более 20 МБ.

find / -type f -size +20000k -exec ls -lh {} \; 2> /dev/null \
  | awk '{ print $NF ": " $5 }'  | sort -hrk 2,2
patseb
источник
3
Если самый большой файл в вашей файловой системе - 20 МБ, вам, вероятно, не хватит места на диске. По крайней мере, с любым HD сделал это тысячелетие
Кевин
Это всего лишь пример, вы кладете туда, что хотите. Он найдет все больше, чем 20 МБ, а не только 20 МБ файлов.
patseb
ls -lhтогда sort?? ls -sили stat -c %b, вероятно, лучше.
Микель
Я не понимаю Мой пример использует ls и sort. Он хотел найти файлы по всему диску, а не по каталогу.
patseb
0

введите следующую команду

CD /

затем введите

ду-ш * | grep G

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

Дипак Бодаре
источник
-2

Вы можете попробовать с этой командой, она перечислит большой файл:

ls -lrS | tail -1
Фивы
источник
показывает текущий каталог, а не весь жесткий диск.
SLM