Что происходит, когда вы набираете ls -l в оболочке?

Имейте в виду, что для понимания этой статьи вам потребуются некоторые предварительные знания о том, как работает оболочка Unix.

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

Оболочка похожа на бесконечный цикл, печатающий приглашение, ожидающее ввода пользователем какой-либо команды или ввода, в тот момент, когда вы пишете ls -l, оболочка будет принимать эти параметры через некоторые функции.

Первая функция разделит эти параметры на две отдельные строки текста или «токены» (token1 = ls и token2 = -l). Это полезно, поскольку первый токен указывает команду, которую мы хотим выполнить, а второй будет аргументами этой команды. См. справочную страницу для синопсиса и различных аргументов.

Затем оболочка проверит, является ли первый токен существующей командой, сохраненной в PATH (путь представляет собой список каталогов, в которых сохранены команды, утилиты и программы). Эта переменная среды отображается, например, в bash с помощью echo $PATH. Содержит разделенный двоеточиями список каталогов, в которых оболочка ищет команды, имена которых не содержат косую черту.

Перед этим оболочка использует системный вызов fork, который используется для создания нового процесса, называемого дочерним процессом, который выполняется одновременно с процессом. который вызывает вызов fork() (родительский процесс). После создания нового дочернего процесса оба процесса будут выполнять следующую инструкцию после системного вызова fork().

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

После процесса fork, если команда найдена, оболочка будет использовать системный вызов execve, этот системный вызов будет выполнять команду и параметры.

Расширения псевдонимов

Оболочка идентифицирует первую команду и проверяет наличие псевдонимов для указанной команды. Итак, что такое псевдоним?

Псевдоним – это команда в различных интерпретаторах командной строки (оболочках), позволяющая заменить слово другой строкой. Он в основном используется для сокращения системной команды.

Если псевдоним найден, оболочка проверяет, существуют ли какие-либо псевдонимы для этого псевдонима.

Печать командной строки (PS1) и $

Переменная среды PS1 используется для формата приглашения . Это интерактивная подсказка по умолчанию для командной строки: она отображает имя пользователя, имя хоста и полное имя каталога пользователя. Последним шагом после выполнения команды «ls -l» является печать приглашения командной строки (PS1) с разрывом строки.

Ссылка: https://www.geeksforgeeks.org/introduction-linux-shell-shell-scripting/