Напишите однострочник, находящий 10 самых больших файлов в дереве каталога.
Раздел заполняется, и нужно найти главных виновников — именно файлы, а не каталоги — где угодно под /var.
Ограничения:
- отранжируйте 10 самых больших обычных файлов во всём поддереве (рекурсивно)
- печатайте размер каждого файла рядом с путём
- не обманывайтесь размерами каталогов — нужны отдельные файлы
# допишите однострочник, печатающий 10 самых больших файлов под /var
find /var -type f ...
Напишите однострочник.
Рекурсивно обойдите обычные файлы и отсортируйте по размеру. Используйте find /var -type f, печатающий размер и путь, с конвейером в sort -rn | head -10: только файлы, крупнейшие сверху. Альтернатива — du -ah /var | sort -rh | head, но du включает и каталоги. ls не обходит поддерево.
- ✗Ожидать, что
ls -Sрекурсивно обойдёт и отранжирует файлы всего поддерева - ✗Использовать
df(свободное место на монтировании) для ранжирования файлов - ✗Сортировать человекочитаемые размеры через
sort -nвместоsort -rh
- →Если
duиdfрасходятся в занятом месте, что стоит заподозрить? - →Как ограничить поиск только файлами больше 100 МБ?
Решение
Только файлы, ранжирование по размеру
find /var -type f -printf '%s\t%p\n' | sort -rn | head -10
-printf '%s\t%p\n' печатает размер в байтах и путь; sort -rn — по убыванию, head -10 — верхние 10. Для человекочитаемых единиц:
du -ah /var | sort -rh | head -10
du -ah перечисляет и файлы, и каталоги, поэтому крупный каталог может вытеснить файлы из топа — берите вариант с find, когда нужны только файлы.
⚠️ Если сумма по du заметно меньше занятого в df, ищите удалённый, но всё ещё открытый процессом файл: lsof +L1 (место освободится, когда закроется дескриптор).