tree, du, broot, dust — визуализация дерева
В DE-работе часто нужно понять: какова структура data lake? Где занято место? Где старые папки, которые можно удалить? Для этого есть классические tree и du и современные альтернативы — eza --tree, broot, dust. Разберём каждый.
tree: древовидное представление
tree показывает иерархию папок в виде дерева:
$ sudo apt install -y tree
$ tree ~/projects -L 2
/home/user/projects
├── airflow
│ ├── dags
│ ├── logs
│ ├── requirements.txt
│ └── airflow.cfg
├── etl-scripts
│ ├── main.py
│ ├── utils.py
│ └── tests
└── kafka-consumer
├── Dockerfile
└── src
7 directories, 5 files
Самые полезные опции:
Реальные примеры:
# Структура без node_modules и .git
$ tree -L 3 -I 'node_modules|.git|__pycache__' ~/projects/airflow
# Только Python файлы
$ tree -P '*.py' --prune ~/projects # --prune скрывает папки без матчей
# С размерами
$ tree -sh ~/Documents
# Учитывать .gitignore
$ tree --gitignore ~/projects/my-repo
tree отлично подходит для документации проекта — копируете вывод в README.
du: disk usage
du (Disk Usage) — основной инструмент «сколько весит папка». Принцип: обходит дерево и суммирует размеры файлов.
# По умолчанию — рекурсивно, в килобайтах
$ du
4 ./data
12 ./logs
8 ./.git
2048 .
# Human readable
$ du -h
4.0K ./data
12K ./logs
8.0K ./.git
2.0M .
# Только верхний уровень (depth=1)
$ du -hd 1 ~/
4.0K /home/user/Desktop
156M /home/user/Documents
12G /home/user/Downloads
2.3G /home/user/Pictures
500M /home/user/projects
15G /home/user
# Сортировка по размеру
$ du -hd 1 ~/ | sort -h
4.0K /home/user/Desktop
156M /home/user/Documents
500M /home/user/projects
2.3G /home/user/Pictures
12G /home/user/Downloads
15G /home/user
sort -h сортирует по «human size» правильно (понимает, что 1G > 100M).
Главный idiom для DE: du -hd 1 /path | sort -h — топ-папки по размеру. Когда диск заполнен, это первая команда, которую вы запустите. Применяете рекурсивно: du -hd 1 /var/log, потом du -hd 1 /var/log/postgresql, и т.д., пока не найдёте виновника.
Полезные опции du:
# Включая скрытые (по умолчанию du их игнорирует? нет, считает)
$ du -sh .[!.]* * # включая dotfiles
# Только summary (без подпапок)
$ du -sh ~/projects/airflow
2.3G /home/user/projects/airflow
# Apparent size (логический размер, не на диске)
$ du -h --apparent-size file.csv
1.0M file.csv # реальный размер контента
# vs without --apparent-size:
$ du -h file.csv
4.0K file.csv # размер на диске (округлено до блока)
Разница: du по умолчанию показывает место на диске (round up до блока FS, обычно 4KB). --apparent-size — реальный размер байт в файле.
df: disk free
du — это «сколько в папке», df — «сколько на диске свободно».
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p1 500G 234G 266G 47% /
tmpfs 7.8G 24K 7.8G 1% /tmp
/dev/nvme0n1p2 100G 12G 88G 12% /home
Колонки: filesystem, total size, used, available, % usage, mount point.
Используете df чтобы:
- Узнать общее свободное место.
- Какие диски смонтированы.
- Какой диск приближается к 100% (опасная зона >80%).
Подробнее про df, mount, fstab — в модуле 14.
ncdu: интерактивный du
ncdu (NCurses Disk Usage) — это интерактивный du. Запускается в терминале, показывает дерево с размерами, позволяет навигироваться стрелками и удалять.
$ sudo apt install -y ncdu
$ ncdu ~/projects
# Откроется TUI-интерфейс
Главные команды:
- стрелки: навигация
- Enter: войти в папку
- d: удалить (с подтверждением)
- q: выход
Это must-have для очистки диска. Когда нужно почистить ~/Downloads или /var, запускаете ncdu и интерактивно удаляете.
eza —tree: цветной tree
Если у вас уже стоит eza (из урока 03.2), используйте его tree-режим:
$ eza --tree --level=2 ~/projects
projects
├── airflow
│ ├── dags
│ ├── logs
│ └── requirements.txt
├── etl-scripts
│ ├── main.py
│ └── tests
└── kafka-consumer
├── Dockerfile
└── src
# С git-status:
$ eza --tree --level=2 --git
Плюсы eza:
- Цветной вывод.
- Git status интегрирован.
- Игнорирует .git, node_modules по умолчанию.
Минус: не везде установлен. tree более универсальный.
dust: визуальный du
dust — это переписанный на Rust du с визуализацией:
$ sudo apt install -y du-dust # на Debian/Ubuntu (пакет иногда называется dust)
# или
$ brew install dust
$ dust ~/projects
2.3G ├── airflow │░░░░░░░░░░░░░░░░░░ 68%
1G │ ├── logs │░░░░░░░░░░░░░ 30%
1G │ ├── dags │░░░░░░░░░░░░ 29%
300M │ └── venv │░░░ 9%
500M ├── etl-scripts │░░░░ 14%
...
Визуальные бары показывают пропорцию. Сразу видно: airflow занимает 68% от ~/projects, внутри airflow — logs и dags по 30%.
Для DE это удобнее обычного du: за 2 секунды видишь, что съедает место.
broot: интерактивная альтернатива
broot — это интерактивный TUI для навигации по файловой системе. Запускаете — открывается дерево, вы можете искать, фильтровать, выполнять команды.
$ sudo apt install -y broot
$ br # запускает интерактивный режим
# Внутри:
# Печатаете что-то — fuzzy-фильтрация имён
# Стрелки — навигация
# Enter — войти в папку (или открыть файл в редакторе)
# :rm — удалить
# :cd — cd в выбранную папку (после выхода из broot)
broot — это «cd + ls + tree + поиск» в одном инструменте. Особенно мощно с alias br, который интегрируется с shell — после выхода из broot вы можете оказаться в выбранной папке (как z/zoxide, но интерактивно).
DE сценарии: реальное применение
Сценарий 1: чистим диск перед заполнением.
$ df -h / # 95% used — паника
$ sudo du -hd 1 / 2>/dev/null | sort -h | tail -5
2.3G /usr
3.1G /tmp
4.5G /home
12G /opt
56G /var
# /var — виновник
$ sudo du -hd 1 /var | sort -h | tail -5
2.1G /var/cache
3.2G /var/lib
50G /var/log # тут проблема
$ sudo du -hd 1 /var/log | sort -h | tail -3
8G /var/log/postgresql
12G /var/log/journal
30G /var/log/airflow
# airflow логи
$ sudo du -hd 1 /var/log/airflow | sort -h | tail -3
5G /var/log/airflow/dag_processor_manager
8G /var/log/airflow/scheduler
17G /var/log/airflow/dag_runs/etl_huge_pipeline_dag
# вот он!
# Чистим
$ sudo find /var/log/airflow/dag_runs/etl_huge_pipeline_dag \
-name "*.log" -mtime +30 -delete
Сценарий 2: понимаем структуру нового проекта.
$ git clone company/data-platform
$ cd data-platform
# Что внутри?
$ tree -L 2 -d --gitignore
.
├── airflow
│ ├── dags
│ └── plugins
├── infra
│ ├── kubernetes
│ └── terraform
├── kafka
│ └── consumers
├── lib
│ ├── common
│ └── monitoring
└── tests
├── e2e
├── integration
└── unit
За 2 секунды у вас mental model проекта.
Попробуй сам
$ cd ~
$ du -hd 1 | sort -h | tail -10
# топ-10 папок в home по размеру
$ tree -L 2 -d ~/
# структура home, 2 уровня глубоко, только папки
# Поставьте dust:
$ sudo apt install -y du-dust
$ dust -d 2 ~/
# визуально, какие папки большие
# ncdu — интерактивно:
$ sudo apt install -y ncdu
$ ncdu ~/
# стрелочки + d для удаления