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

Чтобы понять, что на самом деле происходит, когда вы набираете ls -l в оболочке, вам нужно понять, что такое оболочка по отношению к ядру.

ядро — это компьютерная программа, которая действует как ядро ​​операционной системы компьютера и контролирует все в системе.

Оболочка — это компьютерная программа, которая работает как интерфейс для доступа к службам, предоставляемым операционной системой.

Допустим, мы хотим ввести команду «ls», за которой следует флаг «-l». Как оболочка будет выполнять эту команду?

  1. Запустить оболочку
  2. Получить пользовательский ввод
  3. Анализ пользовательского ввода
  4. Проверить токены
  5. Выполнить команду
  6. Повторение

При входе в оболочку первое, что вы видите, это приглашение командной строки (ShellyIsHomeBabe$). Подсказка хранится как встроенная переменная окружения оболочки. Здесь пользователь будет вводить данные.

Как выглядит исходное приглашение оболочки:

inoubli@HI:~$

Как выглядит приглашение нашей оболочки:

ShellyIsHomeBabe$

2. Получение пользовательского ввода

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

ShellyIsHomeBabe$ ls -l

3. Анализировать пользовательский ввод

Теперь, когда строка сохранена в буфере, мы воспользуемся функцией strtok , чтобы разбить строку на отдельные токены. В этом примере "ls -l" — это предыдущая строка, которую ввел пользователь, и она будет разбита на две строки:"ls" "- l” , чтобы их можно было интерпретировать индивидуально. Примечание. Параметр -l — один из многих параметров, предоставляемых командой ls. См. здесь все параметры команды.

4. Проверить токены

Далее оболочка проверит токен один за другим, чтобы увидеть, является ли он псевдонимом, встроенной командой или членом PATH. Но сначала,

Что такое псевдоним?

Вы можете подумать, если псевдоним похож на ярлык имени. Если в вашей оболочке используется повторяющаяся команда и вы хотите создать для нее псевдоним, он будет отредактирован и сохранен в файле ~./bashrc вместе с другими перечисленными псевдонимами. Это начальный процесс проверки исполняемой команды.

alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'

Что такое встроенный?

Если команда не является псевдонимом, следующим шагом процедуры является проверка того, является ли команда встроенной. Встроенные команды — это команды, которые существуют в оболочке. В нашей простой оболочке некоторые из встроенных функций включают exitи env.В этом случае "ls" не является встроенным, поэтому затем мы проверяем, является ли он частью PATH.

Что такое ПУТЬ?

PATH — это переменная среды (часть среды), которая указывает, где в каталогах находятся исполняемые файлы и команды. Мы проверяем наличие команды в PATH с помощью системного вызова stat. Этот системный вызов определит, является ли ls исполняемым файлом в папке /bin, поскольку весь путь объединяется. Поскольку команда "ls"хранится в папке /bin/ls и представляет собой программу, которую мы можем запускать независимо от нашего текущего рабочего каталога , переходим к следующему шагу.

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

5. Выполнить команду

Наконец, мы можем запустить нашу команду. В простой оболочке мы используем системный вызов execve, чтобы разветвить текущий процесс и запустить /bin/ls программа в дочернем процессе. Затем он добавляет флаг “-l”, после чего список всех файлов отображается в длинном формате.

6. Повторить

После успешного вывода процесс начинается сначала с приглашением (ShellyIsHomeBabe$), которое автоматически печатается в ожидании следующего ввода. Этот цикл будет продолжаться до тех пор, пока пользователь выполняет команды, пока не будет выполнена команда exit или не будет введена CTRL-D. Выход и/или CTRL-D завершит программу и вернет вас в вашу локальную оболочку.

ShellyIsHomeBabe$ exit
inoubli@HI:~$

Авторы

Нейфер Амин и Иноубли Хафед