Так же просто, как «ls -l»?

Для обычного пользователя терминала ввод «ls» — это обычная задача все время в Linux, команда «ls» используется часто. Но вы когда-нибудь задавались вопросом, как система делает то, что она делает, всего с несколькими буквами? На самом деле, если мы используем другое «двухбуквенное слово», мы можем увидеть ту же информацию, но более удобочитаемую.

В следующих строках объясняется, что происходит со следующей командой:

ls -l

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

Теперь давайте посмотрим, что на самом деле происходит более подробно.

Во-первых

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

  1. Ищет первую команду (первую часть введенной полной команды), это первое слово в строке, опуская начальные пробелы и переходя к следующему пробелу, символу табуляции или символу конца строки. Затем это хранится отдельно.
  2. Shell будет искать, есть ли псевдонимы для идентифицированной команды. Псевдоним представляет собой разновидность одной команды, использующую другую, чтобы упростить задачу, сделать ее более удобной в использовании. Исходная команда в системе может иметь псевдонимы, созданные в данном случае программистом Ubuntu, пользователем root (например, пользователем-администратором в случае сервера) или конечным пользователем системы. Если какой-либо псевдоним найден, команда будет заменена соответствующим псевдонимом.

3. Затем оболочке необходимо найти исполняемый файл, соответствующий сохраненной команде. Для этого он ищет переменные среды, чтобы увидеть, определена ли переменная PATH, если да, будет следовать каждому из значений этой переменной и пытаться увидеть, находится ли файл в некоторых папках, указанных каждым значением.

4. Если оболочка найдет исполняемый файл для команды в какой-либо папке ПУТИ, она заменит исходную команду, в нашем случае «ls», на полный путь к ней, сначала папку, а затем имя команды . Например:

/бин/л

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

5. Выполняется некоторая дополнительная проверка, оболочка проверяет, может ли файл быть выполнен пользователем, то есть есть ли у пользователя права на выполнение этой команды.

Второй

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

В нашем случае оболочка идентифицирует «-l» как второе слово в полной команде и будет использовать его в качестве параметра для команды «ls».

Третий

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

/bin/ls —color=auto -l

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