Поиск и удаление ненужных файлов в Linux / MacOS
У меня мелкий SSD в ноутбуке и свободного места всегда что-то около 18Gb. После интенсивных работ со всяким софтом SSD заполняется под завязку, но при этом, если знать где искать и пользоваться хорошим мониторингом, то можно настолько много всего удалить ненужного, что легко добавятся дополнительные пара десятков гигабайт. Вот про мониторинг и будет этот текст.
Тема: Какими командами удобно найти занимающие место файлы из терминала linux или MacOS?
Сначала то, что поможет многим с этой задачей без знания других команд:
ncdu (NCurses Disk Usage)
1. Что это такое?
ncdu — это анализатор использования диска с текстовым (curses) интерфейсом. Он сканирует указанную директорию (или всю систему) и представляет результаты в интерактивном виде, позволяя легко перемещаться по дереву каталогов, видеть, какие папки и файлы занимают больше всего места, и даже удалять их прямо из интерфейса.
2. Установка
Сначала его нужно установить, если он еще не установлен. Команды зависят от вашего дистрибутива:
Debian / Ubuntu / Mint:
sudo apt update
sudo apt install ncduFedora / CentOS / RHEL (современные версии):
sudo dnf install ncdu
CentOS / RHEL (старые версии):
sudo yum install ncdu
Arch Linux / Manjaro:
sudo pacman -S ncdu
macOS (используя Homebrew):
brew install ncdu
3. Запуск
Сканировать текущую директорию:
ncdu
Сканировать конкретную директорию (например, домашнюю):
ncdu ~
Сканировать корневой каталог (всю систему):
sudo ncdu /
sudo здесь обязательно, так как у обычного пользователя нет прав на чтение всех каталогов системы.
Сканирование / может занять значительное время, особенно на больших дисках или медленных системах. Будьте терпеливы. Вы увидите индикатор прогресса.
4. Интерфейс
После завершения сканирования вы увидите примерно такой интерфейс:
ncdu 1.18 ~ Use the arrow keys to navigate, press ? for help
--- /home/user --------------------------------------------------------------- 85.3 GiB
[##########] /Downloads 15.1 GiB
[# ] /Documents 8.9 GiB
[ ] /VirtualBox VMs 2.5 GiB
[ ] /.cache 1.1 GiB
[ ] /.local 850.5 MiB
[ ] /Pictures ...
и так далее ...
Total disk usage: 115.2 GiB Apparent size: 114.9 GiB Items: 153287
Верхняя строка: Показывает версию ncdu, подсказку по клавишам и текущий путь.
Основная часть: Список файлов и директорий в текущем каталоге, отсортированный по умолчанию по размеру (от большего к меньшему).
Размер: Отображается в читаемом формате (GiB, MiB, KiB).
График: Простая текстовая гистограмма [##########] показывает относительный размер элемента по сравнению с самым большим в текущем списке.
Имя файла/директории:
/ в конце имени означает директорию.
> перед именем означает, что директорию не удалось прочитать (ошибка доступа) или это символическая ссылка на директорию (зависит от опций запуска).
e перед именем означает пустую директорию.
. перед именем означает скрытый файл или директорию (как в ls -a).
Нижняя строка: Суммарная информация о текущей директории (общий размер, "видимый" размер, количество элементов).
5. Навигация и Основные Действия (Клавиши)
Самое главное - это клавиши управления:
↑ (стрелка вверх), k: Переместиться на строку выше.
↓ (стрелка вниз), j: Переместиться на строку ниже.
→ (стрелка вправо), Enter, l: Войти в выделенную директорию.
← (стрелка влево), <, h: Выйти в родительскую директорию.
n: Сортировать по имени (повторное нажатие меняет порядок: A-Z / Z-A).
s: Сортировать по размеру (повторное нажатие меняет порядок: больше -> меньше / меньше -> больше). Это сортировка по умолчанию.
C: Сортировать по количеству элементов внутри директории (повторное нажатие меняет порядок).
d: Удалить выделенный файл или директорию. Внимание! ncdu запросит подтверждение (Are you sure you want to delete...? (y/N)). Это действие необратимо! Будьте предельно осторожны, особенно при работе с sudo.
i: Показать информацию о выделенном элементе (полный путь, размер, видимый размер, количество элементов, время последнего изменения). Нажмите i еще раз, чтобы скрыть окно информации.
r: Обновить/пересканировать текущую директорию. Полезно, если вы удалили что-то вне ncdu и хотите увидеть актуальное состояние.
g: Переключить отображение графика (показать/скрыть столбец с [###]).
a: Переключить отображение между использованием диска (disk usage) и видимым размером (apparent size). Обычно они близки, но могут отличаться для "разреженных" файлов или файлов с большим количеством жестких ссылок.
e: Показать/скрыть скрытые файлы и директории (те, что начинаются с точки .).
?: Показать экран помощи со всеми доступными командами. Нажмите ? еще раз, чтобы закрыть помощь.
q: Выйти из ncdu.
6. Пример использования (Поиск места в домашней директории)
cd ~ (перейти в домашнюю директорию, необязательно)
ncdu (запустить ncdu для текущей директории)
Дождаться окончания сканирования.
Посмотреть на верхние строки - это самые большие папки/файлы. Допустим, вы видите, что /home/user/Downloads занимает много места.
Используя стрелки ↓/↑, выбрать строку Downloads.
Нажать Enter (или →), чтобы войти в Downloads.
Увидеть список файлов и подпапок внутри Downloads, снова отсортированный по размеру. Найти большой ненужный .iso образ или старый архив.
Выбрать этот файл стрелками.
(Необязательно, но рекомендуется) Нажать i, чтобы посмотреть детали (убедиться, что это точно тот файл, который можно удалить). Нажать i снова.
Нажать d.
ncdu спросит подтверждение. Внимательно прочитать имя файла/папки. Если уверены, нажать y, затем Enter.
Файл удален, список обновится.
Закончив исследование и чистку, нажать q для выхода.
7. Дополнительные опции командной строки (некоторые полезные)
ncdu -q: "Тихий режим" - обновляет экран реже во время сканирования (может немного ускорить сканирование на медленных соединениях/терминалах).
ncdu -x: Сканировать только одну файловую систему (не переходить на другие смонтированные разделы). Полезно при запуске ncdu /, чтобы не сканировать /home, /var и т.д., если они на отдельных разделах.
ncdu --exclude ПАТТЕРН: Исключить файлы/директории, соответствующие паттерну. Например, ncdu / --exclude /proc --exclude /sys.
ncdu -o ФАЙЛ: Сохранить результаты сканирования в файл. Это полезно для долгих сканирований (sudo ncdu / -o /tmp/scan.dat). Потом можно быстро открыть результаты: ncdu -f /tmp/scan.dat.
ncdu — мощный и интуитивно понятный инструмент, который значительно облегчает задачу поиска "пожирателей" дискового пространства. Просто начните им пользоваться, и вы быстро освоитесь! И помните про клавишу ?.
Теперь несколько примеров для тех кто любит действовать комбинируя команды в терминале
1. du (Disk Usage) - Основная команда для оценки использования диска
Показать размер текущей директории и всех поддиректорий (суммарно):
du -sh .
-s: Показать только общую сумму для каждого аргумента (в данном случае ., текущая директория).
-h: Показать размеры в "человекочитаемом" формате (K, M, G).
Показать размеры всех файлов и директорий в текущем каталоге (не рекурсивно):
du -sh *
Показать размеры директорий на один уровень вглубь от текущей и отсортировать по убыванию размера:
du -h --max-depth=1 | sort -rh
--max-depth=1: Ограничить глубину сканирования одним уровнем.
|: "Пайп" - передает вывод du на вход команде sort.
sort -rh: Сортировать (sort) в обратном порядке (-r) по человекочитаемым числам (-h).
Найти N самых больших директорий/файлов в указанном пути:
du -h /path/to/search | sort -rh | head -n 20
Замените /path/to/search на нужный путь (например, /home/user или /var).
head -n 20: Показать первые 20 строк вывода (т.е. 20 самых больших элементов).
2. find - Мощная команда для поиска файлов по различным критериям
Найти все файлы размером больше 100 Мегабайт в текущей директории и ее поддиректориях:
find . -type f -size +100M -ls
.: Искать начиная с текущей директории.
-type f: Искать только файлы (f - file).
-size +100M: Искать файлы, размер которых больше 100 Мегабайт (M). Можно использовать k (килобайты), G (гигабайты). + означает "больше", - означает "меньше", без знака - "точно".
-ls: Вывести найденные файлы в формате ls -lids.
Найти файлы больше 500M во всей системе, показать размер и отсортировать:
sudo find / -type f -size +500M -printf "%s %p\n" | sort -nr | head -n 20
sudo: Часто требуется для поиска по всей системе (/), так как не все каталоги доступны обычному пользователю.
/: Искать начиная с корневого каталога.
-printf "%s %p\n": Напечатать размер файла в байтах (%s), пробел, и полный путь к файлу (%p), затем перевод строки (\n). Это удобнее для сортировки по размеру, чем -ls.
sort -nr: Сортировать (sort) численно (-n) в обратном порядке (-r).
head -n 20: Показать топ 20 самых больших файлов.
Опционально: Можно добавить 2>/dev/null после команды find, чтобы скрыть ошибки доступа к каталогам:
sudo find / -type f -size +500M -printf "%s %p\n" 2>/dev/null | sort -nr | head -n 20
Найти файлы больше 1G и выполнить для них du -h (показывает размер удобнее, чем %s):
sudo find / -type f -size +1G -exec du -h {} \;
-exec du -h {} \;: Для каждого найденного файла ({}) выполнить команду du -h. \; означает конец команды -exec. Это менее эффективно, чем -printf, если файлов много, так как du запускается для каждого файла отдельно.
Более эффективный вариант с -exec ... + (запускает du для пачки файлов):
sudo find / -type f -size +1G -exec du -ch {} + | grep total$
-ch: Показать размер каждого файла И общую сумму (c - total), в человекочитаемом формате (h).
grep total$: Отфильтровать только строки с общей суммой (хотя в данном случае du скорее всего покажет размер каждого файла отдельно, если их много). Лучше просто sudo find / -type f -size +1G -exec du -h {} + | sort -rh