02 · Инженерия и архитектура2.1 · Linux и инфраструктура2.1.1лёгкий

Терминал и операционная система

Зачем это нужно

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.

Официальные материалы