Поиск по сайту:
Природа не терпит неточностей и не прощает ошибок (Р. Эмерсон).

Как использовать коды выхода Linux для устранения неполадок в вашей системе Linux

16.04.2025
Как использовать коды выхода Linux для устранения неполадок в вашей системе Linux

Коды завершения, также известные как коды возврата или статусы завершения, — это числовые сигналы, которые программа, команда или скрипт отправляют операционной системе (или вызывающему процессу) по завершении работы. Вам не нужно просматривать потенциально длинные файлы журналов, чтобы диагностировать сбой — код завершения часто даёт быстрое представление о характере проблемы.

Общепринятое соглашение гласит, что при успешном выполнении программы она возвращает код завершения 0. Любое другое число, обычно в стандартном диапазоне от 1 до 255, указывает на то, что что-то пошло не так.

Самый простой способ проверить код завершения последней выполненной команды в Unix-подобных оболочках (таких как Bash или Zsh) — проверить специальную переменную оболочки $?. Например, сначала выполните любую команду, а затем проверьте её код завершения:

ls /nonexistent_directory
echo $?

 

Команда echo $? выводит числовой код завершения, сохранённый в переменной $? . Если вы видите 0, это означает, что предыдущая команда выполнена успешно. Неравное нулю значение, например 1, 2 или 127, указывает на ошибку, а конкретное число даёт представление о типе проблемы — возможно, отсутствует файл, каталог или разрешения.

 

Отладка вашего скрипта С помощью кодов Выхода

Коды завершения особенно полезны при написании сценариев оболочки. Они помогают сценарию определить, всё ли прошло успешно, и решить, что делать дальше.

Вот простой пример, который копирует файл в папку с резервными копиями и сообщает, успешно ли выполнено копирование:

#!/bin/bash
# Попробуйте скопировать файл
cp important_file.txt backup/

# Проверьте, успешно ли выполнено копирование, используя код завершения ($? содержит код завершения из последней команды).
if [ $? -eq 0 ]; then
    echo "Резервное копирование выполнено успешно!"
else
    echo "Ошибка резервного копирования с кодом завершения $?"
    exit 1  # Завершите работу скрипта с кодом ошибки, указывающим на то, что что-то пошло не так.
fi

 

Читать  Как создать псевдонимы в Bash

Когда команда cp выполняется, она возвращает код завершения. Код завершения 0 означает, что всё прошло успешно. Если код не равен 0, что-то пошло не так, и скрипт выводит сообщение об ошибке и завершает работу с кодом 1.

 

Установка ваших собственных кодов выхода

Помимо проверки кодов завершения команд, вы можете определить собственные коды завершения для обозначения различных типов ошибок. Это сделает ваши скрипты более информативными и позволит пользователям понять, какая именно проблема возникла.

Рассмотрим этот сценарий:

#!/bin/bash
# Убедитесь, что указан аргумент (имя файла).
if [ -z "$1" ]; then
    echo "Использование: $0 <filename>"
    exit 1  # Код завершения 1 указывает на то, что аргумент не был указан.
fi

# Проверьте, существует ли файл, указанный в качестве первого аргумента.
if [ ! -f "$1" ]; then
    echo "Ошибка: Файл не найден"
    exit 2  # Пользовательский код завершения 2 указывает на то, что файл не был найден.
fi

 

Если кто-то запустит ваш скрипт и он выйдет из строя, можно обратиться к коду завершения, чтобы определить точную ошибку. В этом примере код завершения 1 означает, что пользователь не указал обязательный аргумент, а код завершения 2 явно указывает на то, что файл не был найден. Такой структурированный подход особенно полезен, когда ваш скрипт является частью более крупной системы или когда другой скрипт зависит от его результатов.

 

Список распространенных кодов выхода

Хотя разные программы могут определять собственные коды завершения, во многих инструментах командной строки, особенно в Linux и Unix-подобных системах, вы увидите некоторые общие закономерности. Вот некоторые из наиболее часто встречающихся:

  • 0: Всё хорошо! Программа запустилась без проблем.
  • 1: Что-то пошло не так, но ошибка не является конкретной. Это своего рода универсальный код выхода.
  • 2: Неправильное использование встроенных команд оболочки. Это может произойти, если вы неправильно используете команду, например, забываете обязательные параметры.
  • 126: Команда существует, но у вас нет разрешения на её выполнение.
  • 127: Команда не найдена. Это означает, что команда не существует или не находится в пути системы. Перепроверьте правильность написания.
  • 128: Неверный аргумент выхода. Вы использовали число, которое не имеет смысла в качестве кода выхода.
  • 130: Программа завершена с помощью Ctrl + C. Это происходит, когда вы останавливаете программу вручную.
  • 137: Состояние нехватки памяти (OOM).
  • 255: Программа попыталась вернуть код завершения, выходящий за допустимый диапазон.
Читать  Как выполнить скрипт Bash в терминале

 

У некоторых конкретных программ есть свои уникальные коды завершения. Например, grep возвращает 0, если находит совпадения, 1, если не находит совпадений, и 2, если возникает ошибка. Кроме того, разработчики могут использовать практически любое число (обычно от 0 до 255 в Unix-подобных системах).

 

Объединение команд в цепочку на основе успеха или неудачи

Bash также предоставляет два удобных оператора && и ||, которые позволяют объединять команды в зависимости от того, завершилась предыдущая команда успешно или нет:

  • && (оператор И): запускает следующую команду только в том случае, если предыдущая команда выполнена успешно (с кодом завершения 0).
  • || (оператор ИЛИ): запускает следующую команду только в том случае, если предыдущая команда завершилась с ошибкой (с ненулевым кодом завершения).

 

Например, предположим, что вы хотите создать каталог, а затем сразу же перейти в него. Если создание каталога не удаётся или переход в него не работает, вы можете вывести сообщение об ошибке:

mkdir new_directory && cd new_directory || echo "Не удалось создать каталог и получить к нему доступ"

 

Здесь mkdir new_directory пытается создать папку. Если это удаётся, код немедленно запускается cd new_directory. Если какой-либо из этапов не выполняется, оператор || срабатывает и выводит сообщение об ошибке.

 

Выводы

Коды завершения могут показаться незначительной деталью, но они являются частью того, что делает инструменты командной строки такими мощными. Они создают общий язык для общения программ об успехах и неудачах, что важно для создания сложных систем.

Читать  Время выполнения сценария оболочки в Linux

Если вы только начинаете работать с командной строкой, начните с того, что возьмите за правило проверять, echo $? когда команды ведут себя не так, как ожидалось. Вскоре вы начнёте использовать коды завершения в своих скриптах и оцените эту простую, но эффективную систему коммуникации.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Поделиться в соц. сетях:



Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

**ссылки nofollow

Это может быть вам интересно


Рекомендуемое
Google внедряет новый механизм безопасности на устройствах Android, который автоматически…

Спасибо!

Теперь редакторы в курсе.