Learning Platform
Глоссарий Troubleshooting
Урок 05.05 · 15 мин
Начальный
treeduezabrootdustVisualization

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

Самые полезные опции:

tree — главные опции
-L NLimit depth — глубина обхода. -L 1 покажет только верхний уровень, -L 2 — два уровня вглубь
-dDirectories only. Полезно для понимания структуры без перегрузки файлами
-aAll — включая скрытые файлы (с точки)
-I 'pattern'Ignore — паттерн для исключения. `-I 'node_modules|.git|venv'`
-P 'pattern'Pattern — только файлы соответствующие. `-P '*.py'` покажет только Python-файлы
--gitignoreУважать .gitignore — пропускать игнорируемые файлы. Полезно в репозиториях
-sShow size — размер файлов. С -h — human readable
--duDisk usage для каждой папки (агрегированный размер). Медленно, но информативно
-FFile type indicator: / для папок, * для исполняемых, @ для symlinks

Реальные примеры:

# Структура без 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).

TIP

Главный 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 по умолчанию.
Staging area Git — как eza --git отображает статус файлов

Минус: не везде установлен. 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 для удаления

Проверка знанийKnowledge check
Junior DE замечает в логе мониторинга: 'disk free /var = 8%, alert'. На сервере 500GB disk. Какие команды и в каком порядке использовать для диагностики и восстановления?
ОтветAnswer
Систематика расследования. (1) Подтвердить ситуацию: `df -h` — посмотреть, действительно ли /var переполнен. (2) Найти, что съедает: `sudo du -hd 1 /var | sort -h | tail -10` — топ-папки. (3) Рекурсивно идти вглубь: `sudo du -hd 1 /var/<биггест> | sort -h | tail -10`. Обычно виновник — /var/log (плохо настроенная ротация), /var/lib/docker (старые образы), /var/lib/postgresql (БД не помещается), или /var/cache (apt накопил). (4) Альтернативный визуальный подход: `sudo dust /var -d 3` или `sudo ncdu /var` для интерактивной чистки. (5) Решение зависит от находки: для логов — настроить logrotate (модуль 15), для Docker — `docker system prune -a -f --volumes`, для cache — `sudo apt clean`, для БД — миграция на больший диск или удаление старых данных. (6) Профилактика на будущее: cron-задача, проверяющая `df` и алертящая при >80%. Подробнее про мониторинг и автоматизацию — в модулях 14-15.

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 5. Что делает команда `du -hd 1 /var | sort -h`?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 5