Какие exit-коды в Linux вы знаете и как их использовать?

«Какие exit-коды в Linux вы знаете и как их использовать?» — вопрос из категории Linux, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Exit-коды (коды возврата) — это стандартный механизм в Linux для передачи результата выполнения процесса. Я активно использую их в скриптах автоматизации и CI/CD пайплайнах для контроля потока выполнения.

Основные коды и их значение:

  • 0: Успешное завершение. Это сигнал для следующей команды в пайплайне (&&) о том, что можно продолжать.
  • 1: Общая ошибка или неуспешное завершение (например, сбой в пользовательском скрипте).
  • 2: Неправильное использование встроенной команды shell (например, неверный аргумент).
  • 126: Команда найдена, но не является исполняемой (проблема с правами chmod +x).
  • 127: Команда не найдена (command not found).
  • 130 (128+2): Процесс завершен сигналом SIGINT (обычно Ctrl+C).
  • 137 (128+9): Процесс принудительно убит сигналом SIGKILL (kill -9).
  • 143 (128+15): Процесс корректно завершен сигналом SIGTERM (стандартный сигнал kill).

Практическое использование в скриптах:

#!/bin/bash
# Пример скрипта деплоя с проверкой кодов возврата

echo "Запуск сборки..."
if ! docker build -t myapp:latest .; then
    echo "[ERROR] Сборка Docker-образа завершилась с кодом $?. Прерывание."
    exit 1 # Возвращаем свой код ошибки для пайплайна
fi

echo "Пуш образа в registry..."
docker push myapp:latest
# Если push упадет, его exit code !=0 прервет скрипт из-за настроенного 'set -e'

echo "[SUCCESS] Все шаги выполнены."
exit 0

В CI/CD (например, GitLab CI) проверка $? позволяет реализовать сложную логику: продолжить при определенных ошибках или остановить пайплайн.