Что происходит, когда вы запускаете команду в Linux?
Большинство пользователей Linux часто не знают о внутренней работе операционной системы. Возможно, вы долгое время выполняете команды Linux в оболочке, но задумывались ли вы, что происходит за кулисами, когда вы нажимаете Enter ?
К концу вы получите краткое представление о том, как оболочка обрабатывает введенную команду в Linux.
Обработка команды
Когда вы вводите команду, первое, что делает оболочка, – это разбивает всю команду на «токены». Затем оболочка будет искать имя программы, принадлежащее первому токену в командной строке.
Если он не найдет его ни в одном из каталогов в пути поиска, определенном в переменной среды $ PATH или в локальном каталоге с помощью оператора . , Или это не псевдоним оболочки или функция оболочки, оболочка выдаст ошибку . Если он действительно находит допустимую команду, оболочка затем перебирает каждый из других токенов и решает, является ли это переменной, параметром оболочки или аргументом команды.
Если оболочка определяет, что это переменная или параметр, например оператор ~ для домашнего каталога, оболочка развернет их или заменит их исходными значениями в команде.
Когда оболочка расширила любые параметры или переменные, она передаст командную строку команде, запустив программу с ее аргументами. Оболочка не определяет, действительны ли какие-либо аргументы. Это работа команды.
Запуск команды
Когда оболочка запускает другую команду, как она возвращается к той же подсказке, которую вы использовали раньше? Оболочка создает свою копию, и этот процесс называется разветвлением. Эта копия оболочки заменяет себя командой со всеми аргументами, которые были обработаны ранее. Это называется «exec», а объединенный процесс известен как «fork-and-exec».
Например, когда вы запускаете команду ls , процесс оболочки разветвляется с помощью метода fork () и создает другой экземпляр оболочки. Из двух процессов оболочки, запущенных в системе, дополнительная оболочка выполнит ls с помощью функции exec () , преобразовав себя в экземпляр команды ls.
Тем временем исходная оболочка ожидает завершения команды. Вот почему вы можете использовать управление заданиями, чтобы приостанавливать задания и запускать задания в фоновом режиме в оболочке.
Сообщение о статусе выхода
Команды Linux сообщают, успешно ли они выполнялись, через свой статус выхода. Как следует из названия, программы сообщают о своем статусе выхода по завершении работы. Они делают это через $? переменная окружения, которая содержит статус выхода последней запущенной команды.
По соглашению, статус выхода 0 указывает на успешное выполнение, в то время как любое значение, кроме 0, обычно означает ошибку. Ваша оболочка также может указывать ненулевой статус выхода в командной строке в зависимости от того, как настроено ваше приглашение.
На приведенном выше снимке экрана показан пример настраиваемой подсказки Zsh, которая показывает статус выхода из ошибки 127 из-за несуществующей команды.
Теперь вы знаете, как работают команды Linux
Теперь, когда вы знаете, как оболочка Linux обрабатывает команду, выполняет ее и выполняет, а также как программы сообщают о своем статусе выхода, вы можете более эффективно использовать командную строку.
Несколько оболочек Linux доступны пользователям бесплатно. Хотя каждый из них выполняет более или менее одинаковую работу, они отличаются во многих аспектах. Вы можете попробовать установить в своей системе несколько оболочек и решить для себя, какая из них вам больше подходит.