2.1.1 · блок 2
Терминал и операционная система
Терминал и операционная система
Зачем это нужно
ML-модель в ноутбуке живёт на вашем ноутбуке. ML-сервис в продакшене живёт на Linux-сервере без графического интерфейса. Подключиться к нему можно только через SSH и терминал. DevOps и SRE каждый день работают в shell: смотрят логи, перезапускают процессы, проверяют место на диске.
Если вы боитесь чёрного экрана с мигающим курсором — этот урок снимет страх. Базовые команды Linux нужны каждому MLE так же, как import pandas.
Основные идеи
Файловая система. Linux — иерархия каталогов от / (root). Важные пути:
/home/user/— домашний каталог пользователя./etc/— конфигурационные файлы./var/log/— логи./tmp/— временные файлы.
Команды навигации:
pwd # где я нахожусь
ls -la # список файлов (включая скрытые)
cd /var/log # перейти
mkdir -p models # создать каталог
cp train.py train.py.bak
mv old/ archive/
rm file.txt # удалить (осторожно!)
Права доступа. У каждого файла есть владелец, группа и права: read (r), write (w), execute (x). ls -l показывает -rw-r--r--: владелец читает/пишет, остальные только читают. Скрипт запуска inference должен быть executable: chmod +x serve.sh.
Процессы. Каждая запущенная программа — процесс с PID:
ps aux | grep python # найти python-процессы
top # интерактивный монитор (CPU, RAM)
kill 12345 # отправить SIGTERM процессу
kill -9 12345 # жёсткое завершение (крайняя мера)
ML-сервис, «зависший» на загрузке модели, — первое, что проверяют через ps и top.
Переменные окружения (env). Конфигурация, которую приложение читает при старте:
export MODEL_PATH=/opt/models/fraud_v2.pkl
export DATABASE_URL=postgresql://...
echo $MODEL_PATH
env | grep MODEL
Секреты передают через env, а не хардкодят в Python. В systemd-unit (следующий урок) env задают явно. Файл .env удобен локально, но не коммитится в Git.
Перенаправление и pipes:
python train.py > output.log 2>&1 # stdout и stderr в файл
tail -f output.log # следить за логом в реальном времени
cat access.log | grep "500" | wc -l # pipe: ошибки 500 → подсчёт
Как это выглядит на практике
On-call получает алерт: inference-сервис не отвечает. По SSH заходит на сервер:
ssh deploy@ml-prod-01.company.com
cd /opt/scoring-service
ps aux | grep gunicorn # процесс жив?
df -h # диск не переполнен?
ls -la models/ # файл модели на месте?
export LOG_LEVEL=debug
./scripts/healthcheck.sh # локальная проверка
Диск заполнен на 100% — логи не пишутся, сервис падает. du -sh /var/log/* находит виновника, логи ротируют, сервис перезапускают.
Что сделать после занятия
- [ ] На Linux или WSL выполните: навигация, создание файла,
chmod, запуск Python-скрипта с env-переменной. - [ ] Найдите процесс
pythonчерезps, завершите его черезkill. - [ ] Перенаправьте вывод учебного скрипта в файл и найдите строку через
grep.