Linux: продвинутое¶
Зачем это DE?¶
Data Engineer живёт в Linux: серверы, контейнеры, SSH, cron. Понимание процессов, сетей, дисков и systemd — разница между «перезагрузил и заработало» и «нашёл корень проблемы за 5 минут».
Процессы¶
ps и top¶
Bash
# Все процессы
ps aux | head -20
# По конкретному имени
ps aux | grep postgres
# top с сортировкой по памяти
top -o %MEM
# htop — удобная альтернатива
htop
Управление процессами¶
Bash
# Фоновый запуск
long_script.sh &
# Список фоновых задач
jobs
# Вернуть в foreground
fg %1
# Завершить процесс
kill PID # SIGTERM (мягкое)
kill -9 PID # SIGKILL (жёсткое, последний шанс)
# Завершить по имени
pkill -f "python etl_pipeline.py"
nohup и disown¶
Bash
# Процесс продолжает работу после закрытия SSH
nohup python pipeline.py > pipeline.log 2>&1 &
# Или: отвязать уже запущенный процесс
python pipeline.py &
disown %1
/proc — информация о процессах¶
Bash
# Память процесса
cat /proc/PID/status | grep VmRSS
# Лимиты процесса (max open files и др.)
cat /proc/PID/limits
# Переменные окружения
cat /proc/PID/environ | tr '\0' '\n'
Диски и файловые системы¶
df и du¶
Bash
# Использование дисков
df -h
# Размер директорий
du -sh /var/log/*
# Топ-10 самых больших директорий
du -h --max-depth=1 /var | sort -rh | head -10
Поиск больших файлов¶
Bash
# Файлы > 1 GB
find / -type f -size +1G -exec ls -lh {} \; 2>/dev/null
# Старые логи
find /var/log -name "*.log" -mtime +30 -exec ls -lh {} \;
iostat — I/O дисков¶
Сети¶
Основные команды¶
Bash
# Сетевые интерфейсы и IP
ip addr show
# Таблица маршрутизации
ip route
# DNS-резолв
dig example.com
nslookup example.com
# Проверка доступности
ping -c 3 google.com
# Трассировка маршрута
traceroute google.com
Порты и соединения¶
Bash
# Кто слушает порт 5432
ss -tlnp | grep 5432
# или
lsof -i :5432
# Все установленные TCP-соединения
ss -tn state established
# Проверить открыт ли порт
nc -zv db-host 5432
curl — отладка HTTP¶
Bash
# GET с заголовками
curl -v https://api.example.com/health
# POST JSON
curl -X POST https://api.example.com/data \
-H "Content-Type: application/json" \
-d '{"key": "value"}'
# Скачать файл
curl -o data.csv https://example.com/data.csv
# Замерить время ответа
curl -o /dev/null -s -w "Connect: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" \
https://api.example.com/health
systemd¶
Управление сервисами¶
Bash
# Статус
systemctl status postgresql
# Старт/стоп/рестарт
sudo systemctl start postgresql
sudo systemctl stop postgresql
sudo systemctl restart postgresql
# Автозапуск при загрузке
sudo systemctl enable postgresql
sudo systemctl disable postgresql
# Логи сервиса
journalctl -u postgresql -f # follow
journalctl -u postgresql --since today
journalctl -u postgresql -n 100 # последние 100 строк
systemd timer — замена cron¶
INI
# /etc/systemd/system/etl-pipeline.service
[Unit]
Description=Daily ETL Pipeline
[Service]
Type=oneshot
User=etl
ExecStart=/home/etl/pipeline/run.sh
StandardOutput=journal
StandardError=journal
INI
# /etc/systemd/system/etl-pipeline.timer
[Unit]
Description=Run ETL daily at 3:00
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true # запустить если пропустили (сервер был выключен)
[Install]
WantedBy=timers.target
Отладка¶
strace — системные вызовы¶
Bash
# Что делает процесс (какие файлы открывает, сетевые вызовы)
strace -p PID -e trace=open,read,write -f
# Запустить с трассировкой
strace -o trace.log python pipeline.py
lsof — что открыл процесс¶
Bash
# Открытые файлы процесса
lsof -p PID
# Кто открыл файл
lsof /var/log/postgresql.log
# Кто использует порт
lsof -i :8080
dmesg — сообщения ядра¶
Полезные однострочники для DE¶
Bash
# Количество строк в CSV
wc -l data.csv
# Уникальные значения столбца (2-й)
awk -F',' '{print $2}' data.csv | sort -u | wc -l
# Быстрый просмотр структуры CSV
head -1 data.csv | tr ',' '\n' | cat -n
# Размер БД PostgreSQL
sudo -u postgres psql -c "SELECT pg_size_pretty(pg_database_size('dwh'));"
# Мониторинг в реальном времени
watch -n 5 'psql -c "SELECT count(*) FROM orders WHERE order_date = current_date"'
# Параллельная обработка файлов
ls *.csv | xargs -P 4 -I {} python process.py {}
Что запомнить¶
| Область | Ключевые инструменты | Когда |
|---|---|---|
| Процессы | ps, top, kill, nohup | Отладка зависших пайплайнов |
| Диски | df, du, iostat | Заполнился диск, медленный I/O |
| Сети | ss, curl, nc, dig | Не подключается к БД/API |
| systemd | systemctl, journalctl, timers | Управление сервисами, расписание |
| Отладка | strace, lsof, dmesg | Глубокий troubleshooting |