Linux
Linux для дата-инженера¶
Большинство DE-инфраструктуры работает на Linux. Даже если ты разрабатываешь на Windows/Mac, твои контейнеры, серверы и кластеры — это Linux.
Файловая система¶
Ключевые директории¶
| Путь | Назначение |
|---|---|
/ |
Корень файловой системы |
/home/user |
Домашняя директория пользователя |
/etc |
Конфигурации системы и сервисов |
/var/log |
Логи системы и приложений |
/tmp |
Временные файлы (очищается при перезагрузке) |
/opt |
Стороннее ПО |
/usr/bin |
Системные утилиты |
/proc |
Виртуальная ФС с информацией о процессах |
Навигация и работа с файлами¶
Bash
# где я?
pwd
# содержимое директории (подробно)
ls -la
# размер директории
du -sh /var/log
# свободное место на дисках
df -h
# найти файл
find / -name "*.log" -mtime -1
# создать директорию с вложенными
mkdir -p /opt/etl/data/raw
Права доступа¶
Bash
# формат: владелец-группа-остальные (rwx)
ls -la pipeline.py
# -rwxr-xr-- 1 etl_user etl 1234 Apr 01 10:00 pipeline.py
# изменить права
chmod 755 pipeline.py # rwxr-xr-x
chmod +x script.sh # добавить право на выполнение
# изменить владельца
chown etl_user:etl pipeline.py
| Число | Права | Значение |
|---|---|---|
| 7 | rwx | Чтение, запись, выполнение |
| 6 | rw- | Чтение, запись |
| 5 | r-x | Чтение, выполнение |
| 4 | r-- | Только чтение |
Пользователи и группы¶
Bash
# текущий пользователь
whoami
# информация о пользователе
id etl_user
# создать пользователя
sudo useradd -m -s /bin/bash etl_user
# добавить в группу (например, docker)
sudo usermod -aG docker etl_user
# переключиться на другого пользователя
sudo su - etl_user
Группа docker
Чтобы запускать Docker без sudo, пользователь должен быть в группе docker: sudo usermod -aG docker $USER. Потребуется перелогин.
Процессы¶
Bash
# список процессов
ps aux
# найти конкретный процесс
ps aux | grep airflow
# в реальном времени (top с красивым UI)
htop
# убить процесс
kill PID # мягко (SIGTERM)
kill -9 PID # принудительно (SIGKILL)
# что занимает порт
lsof -i :8080
# или
ss -tlnp | grep 8080
Systemd и сервисы¶
Systemd — менеджер сервисов в большинстве Linux-дистрибутивов.
Bash
# статус сервиса
sudo systemctl status postgresql
# запустить / остановить / перезапустить
sudo systemctl start postgresql
sudo systemctl stop postgresql
sudo systemctl restart postgresql
# включить автозапуск
sudo systemctl enable postgresql
# журнал сервиса
sudo journalctl -u postgresql -f --since "1 hour ago"
SSH¶
Bash
# подключение к серверу
ssh user@192.168.1.100
# с указанием ключа
ssh -i ~/.ssh/id_ed25519 user@server.example.com
# копирование файла на сервер
scp data.csv user@server:/opt/etl/data/
# копирование директории
scp -r ./output/ user@server:/opt/etl/output/
# туннель (прокинуть порт БД)
ssh -L 5432:localhost:5432 user@server
SSH-ключи¶
Bash
# генерация ключа
ssh-keygen -t ed25519 -C "etl@company.com"
# копирование публичного ключа на сервер
ssh-copy-id user@server
Мониторинг и диагностика¶
Bash
# использование CPU и памяти
htop
free -h
# использование дисков
df -h
iostat -x 1
# сетевые соединения
ss -tlnp
# DNS
nslookup example.com
dig example.com
# проверка доступности хоста
ping -c 3 server.example.com
# HTTP-запрос
curl -s http://localhost:8080/health | jq .
# скачать файл
wget https://example.com/data.csv
Переменные окружения¶
Bash
# просмотр
echo $HOME
env | grep PG
# установка (текущая сессия)
export DATABASE_URL="postgresql://user:pass@localhost/db"
# установка навсегда (~/.bashrc или ~/.zshrc)
echo 'export DATABASE_URL="postgresql://user:pass@localhost/db"' >> ~/.bashrc
source ~/.bashrc
cron (планировщик задач)¶
Формат: минута час день_месяца месяц день_недели команда
Text Only
# каждый день в 3:00 — запуск ETL
0 3 * * * /opt/etl/run_pipeline.sh >> /var/log/etl.log 2>&1
# каждый понедельник в 8:00 — отчёт
0 8 * * 1 /opt/etl/weekly_report.sh
# каждые 15 минут
*/15 * * * * /opt/etl/check_data.sh
cron и переменные окружения
cron запускает команды в минимальном окружении. Если скрипт зависит от переменных вроде DATABASE_URL, либо объяви их в скрипте, либо используй source ~/.bashrc в начале.
Проверь себя¶
Источники¶
- Linux man pages — официальная документация команд
- systemd documentation — официальная документация systemd