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

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

Во-первых, вы должны начать с определения некоторых ключевых понятий:

Оболочка:

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

Ядро

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

Что делает команда «ls»?

Не вдаваясь в подробности того, как команда «ls» делает то, что она делает, что она делает? Команда «ls» просто выводит список содержимого вашего каталога. Например: если ввести в терминале «ls», будут перечислены все файлы:

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

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

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

Итак, что именно происходит, когда мы вводим «ls -l» в оболочку?
Мы можем определить эту последовательность шагов, через которые проходит процесс во время его выполнения:

  1. Оболочка считывает команду с помощью функции «getline ()». Оболочка написана в основном на языке программирования C. Функция getline () - это стандартная функция C, которая, как вы, наверное, догадались, получает строку из любого места, в нашем случае из командной строки оболочки.
  2. Bash как интерпретатор команд проверяет, есть ли в его собственном языке такие специальные слова: ключевые слова оболочки или встроенные функции оболочки (ls отсутствует среди ключевых слов оболочки, затем он проверяет псевдонимы и заменяет псевдоним на его значение).
  3. он ищет исполняемый файл ls в путях, указанных переменной env PATH. Обычно это /bin/ls.
  4. Он разветвляет (fork ()) новый процесс и выполняет его код (exec ()). Процесс env наследуется от родительского процесса новому процессу «ls».
  5. Новый процесс становится лидером сеанса и начинает работать на переднем плане (попадание перемещается на задний план).
  6. Распечатывает вывод и завершает работу, отправляет сигнал wait (), и родительский процесс bash полностью завершает его.
  7. После выполнения команды «ls» оболочка выполняет команды выключения, освобождает память и повторно запрашивает у пользователя ввод.

Возвращаясь к контексту заголовка этой статьи, в котором была сделана ссылка на 'ls -l', после того, как процесс найдет команду, он перейдет к поиску флага '-l', который используется для систем unix. для вывода содержимого каталога в длинном формате.

И это все для этого блога, спасибо, что прочитали его, и мы надеемся, что он вам помог. Если у вас есть вопросы, напишите нам в Twitter @jcamilovillah и @ oscardeleon95.
Никогда не прекращайте учиться!