Ищу серию команд, которые покажут мне самые большие файлы на диске.
Ищу серию команд, которые покажут мне самые большие файлы на диске.
Ответы:
Если вам просто нужно найти большие файлы, вы можете использовать find
эту -size
опцию. Следующая команда выведет список всех файлов размером более 10 МБ ( не путать с 10 МБ ):
find / -size +10M -ls
Если вы хотите найти файлы определенного размера, вы можете объединить их с поиском «размер меньше чем». Следующая команда находит файлы от 10 МБ до 12 МБ:
find / -size +10M -size -12M -ls
apt-cache search 'disk usage'
перечисляет некоторые программы, доступные для анализа использования диска. Одно приложение, которое выглядит очень перспективным gt5
.
Из описания пакета:
Прошли годы, и диски становились все больше и больше, но даже в эту невероятно огромную эпоху жесткого диска пространство, похоже, со временем исчезает. Эта небольшая и эффективная программа обеспечивает более удобный листинг, чем стандартная функция du (1). Он отображает, что произошло с момента последнего запуска, а также отображает размер каталога и общий процент. Можно перемещаться по каталогам и подниматься по ним, используя клавиши курсора с текстовым браузером (ссылки, ссылки, рысь и т. Д.)
В разделе «связанные пакеты» gt5 я нашел ncdu
. Из описания упаковки:
Ncdu - это программа просмотра на основе ncurses. Он обеспечивает быстрый и простой в использовании интерфейс с помощью знаменитой утилиты du. Это позволяет просматривать каталоги и показывать процент использования диска с помощью библиотеки ncurses.
-ls
вывода жестко закодирован (см. исходный код для функций pred_fls
и функций list_file ). Вы можете попытаться аппроксимировать вывод, используя -printf
опцию, find ... -type f -exec ls -ldh {} \; | column -t
Я просто использую комбинацию du
и sort
.
sudo du -sx /* 2>/dev/null | sort -n
0 /cdrom
0 /initrd.img
0 /lib64
0 /proc
0 /sys
0 /vmlinuz
4 /lost+found
4 /mnt
4 /nonexistent
4 /selinux
8 /export
36 /media
56 /scratchbox
200 /srv
804 /dev
4884 /root
8052 /bin
8600 /tmp
9136 /sbin
11888 /lib32
23100 /etc
66480 /boot
501072 /web
514516 /lib
984492 /opt
3503984 /var
7956192 /usr
74235656 /home
Тогда это случай промыть и повторить . Выберите целевые подкаталоги, которые, по вашему мнению, слишком велики, запустите для них команду, и вы выясните причину проблемы.
Примечание: Я использую du
«s -x
флаг , чтобы держать вещи ограничивается одной файловой системы (у меня довольно сложный механизм перекрестного монтажа вещей между SSD и RAID5).
Примечание 2: 2>/dev/null
перенаправляет любые сообщения об ошибках в забвение. Если они вас не беспокоят, это не обязательно.
du
страницы руководства : «Суммируйте использование диска каждым ФАЙЛОМ, рекурсивно для каталогов».
Мое любимое решение использует смесь из нескольких хороших ответов.
du -aBM 2>/dev/null | sort -nr | head -n 50 | more
du
аргументы:
-a
для "всех" файлов и каталогов. Оставьте это только для каталогов-BM
вывести размеры в мегабайтах (M) размеров блоков (B)2>/dev/null
- исключить сообщения об отказе в разрешении (спасибо @Oli)sort
аргументы:
-n
для "числовой"-r
для «обратного»head
аргументы:
-n 50
только для лучших 50 результатов.more
если используете меньшее числоПримечание. Префикс sudo
должен включать каталоги, к которым у вашей учетной записи нет прав доступа.
Пример, показывающий 10 самых больших файлов и каталогов в / var (включая общий итог).
cd /var
sudo du -aBM 2>/dev/null | sort -nr | head -n 10
7555M .
6794M ./lib
5902M ./lib/mysql
3987M ./lib/mysql/my_database_dir
1825M ./lib/mysql/my_database_dir/a_big_table.ibd
997M ./lib/mysql/my_database_dir/another_big_table.ibd
657M ./log
629M ./log/apache2
587M ./log/apache2/ssl_access.log
273M ./cache
Чтобы отобразить самые большие топ-20 каталогов (рекурсивно) в текущей папке, используйте следующий однострочный:
du -ah . | sort -rh | head -20
или (более ориентированный на Unix):
du -a . | sort -rn | head -20
Для 20 самых больших файлов в текущем каталоге (рекурсивно):
ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20
или с удобочитаемыми размерами:
ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20
Обратите внимание, что
-h
он доступенsort
только для GNU , поэтому для правильной работы на OSX / BSD необходимо установить его сcoreutils
. Затем добавьте свою папку в своюPATH
.
Таким образом, эти псевдонимы полезно иметь в ваших файлах rc (каждый раз, когда вам это нужно):
alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'
Ответ qbi верен, но он будет очень медленным, когда файлов много, так как он начнет новый процесс ls для каждого элемента.
гораздо более быстрая версия, использующая поиск без порождения дочерних процессов, будет использовать printf для печати размера в байтах (% s) и пути (% p)
find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries
Это похоже на идеальное приложение для find
:
find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5
Эта команда найдет все файлы в каталоге $DIRECTORY
и выполнит ls -s
их. Последняя команда печатает выделенный размер файла плюс имя файла. Результат отсортирован по номерам, и показаны последние пять записей. В результате вы увидите 5 самых больших файлов в $DIRETORY
любом подкаталоге. Если вы введете, tail -n 1
вы увидите только самый большой файл.
Кроме того, вы можете много поиграть с find
. Например, вы можете искать файлы, которые моложе n дней ( -ctime -n
) или принадлежат специальным пользователям ( -user johndoe
).
Когда мне нужно освободить больше места на серверах, я использую эту команду. Он находит все файлы, размер которых превышает 50 МБ, и "du -h" составляет лучший список файлов, а "sort -n" после нумерации списка каналов сортируется по размеру файла.
find / -size +50M -type f -exec du -h {} \; | sort -n
Попробуйте Baobab, он дает вам графический обзор файлов и папок, вы можете увидеть, где находятся настоящие космические свиньи, и удалить их одним щелчком мыши https://help.ubuntu.com/community/Baobab.
Вы также можете отсортировать файлы по размеру:
find . -type f -exec du -h {} \; | sort -k1 -h
Он находит только файлы и выполняет du -h
для каждого файла, который показывает размер файла. Наконец, мы сортируем вывод find
/ du
по первому столбцу (в удобочитаемом формате).
Последний напечатанный файл - самый большой.
Вы можете использовать команду, чтобы увидеть самые большие файлы, пропуская каталоги:
sudo find / -type f -printf “%s\t%p\n” | sort -n | tail -1
find $HOME -type f -printf ‘%s %p\n’ | sort -nr | head -10
Чтобы найти все файлы размером более 100 МБ (это не 100 МБ, см. Здесь, если вы не уверены ):
find / -size +100M -ls
Команда ниже покажет 5 самых больших файлов в папке $DIRECTORY
:
find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5
ИСПОЛЬЗОВАНИЕ du
: Команда ниже, которая использует du, отображает каталоги с 20 самыми большими размерами в домашней рабочей папке:
sudo du -a /home | sort -n -r | head -n 20
Теперь для отображения самых больших каталогов / файлов, включая подпапки, выполните:
du -Sh | sort -rh | head -n 10
Использование ls
:
Чтобы получить список 5 самых больших файлов в каталоге / bin, введите команду ниже:
ls -lSh /bin | head -5
Вы также можете использовать анализатор использования дисков или Baobao, как показано здесь, например.
Отличный, удобный инструмент, на который ссылаются в ответе на подобный вопрос, это NCurses Disk Usage
инструмент:
sudo ncdu /