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

ls — это команда оболочки, которая выводит список файлов и каталогов в каталоге. С опцией -l ls выведет список файлов и каталогов в формате длинного списка.

Что это за оболочка?

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

Когда мы вообще что-либо вводим в командной строке, ls или как-то иначе, Shell выполняет трехэтапный процесс поиска.

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

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

Наконец, после замены любых соответствующих псевдонимов и в случае невозможности идентификации встроенной команды, оболочка продолжает сопоставлять входные данные с идентификатором процесса. Linux работает с двумя классами контента — файлами и процессами.

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

Shell(вызывающий процесс/родительский процесс) вызовет fork() для создания своей копии (дочерний процесс). Клонированный/дочерний процесс будет иметь собственный идентификатор системного процесса. Запуск программы в отдельном процессе защищает родительский/текущий процесс, если программа вызывает какие-либо проблемы при выполнении.

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

Родительский процесс ждет, пока дочерний процесс не завершит свое выполнение.

По завершении дочерний процесс завершится

и управление будет возвращено родительскому процессу. После выполнения ls вас встретит подсказка, и вы сможете ввести следующую команду.