Команды оболочки написаны на каком языке?

Есть много команд оболочки, например,

ls, cd, cat etc.

какой язык программирования используется при написании этих команд? Как они составлены?

Мое понимание:

Shell is a program which takes command; ** does this mean that it interprets those commands(like ls is interpreted by shell program)?**

Еще один вопрос, на каком языке написана программа Shell?

Ответ 1

Большинство основных утилит в linux написаны в C. Это можно проверить в busybox source code, который поддерживает большинство базовых команд Linux, написанных в C. Так что команда ls, cd... и т.д. Находится в C

Как оболочка интерпретирует проверку ниже ссылки

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

http://www.math.iitb.ac.in/resources/manuals/Unix_Unleashed/Vol_1/ch08.htm

Ответ 2

Эти программы в основном написаны на языке программирования C, как и ядро ​​linux.

Ответ 3

Программы представляют собой обычный исполняемый файл, написанный на любом языке (в основном C).

Оболочка принимает введенную команду, которая является просто строкой. Затем он ищет определенные последовательности символов, которые имеют особое значение для оболочки, такие как переменные среды, которые являются $, за которым следует слово или переадресация, которые являются >, за которым следует путь. После того, как эта подстановка была предварительно сформирована, у нее есть строка, которая разбивается на пробелы, чтобы сгенерировать имя исполняемого файла и параметры. Затем оболочка будет искать исполняемый файл в списке каталога в переменной среды PATH. Затем оболочка использует системные вызовы для создания процесса из исполняемого файла с параметрами.

Например, чтобы выполнить команду ls $HOME, оболочка сначала распознает, что $HOME является переменной окружения и подставляет ее значение в этом случае /home/user, оставляя команду ls /home/user. Затем он разделяет команду на пространство, чтобы получить исполняемое имя ls и параметр /home/user. Оболочка находит первый исполняемый файл, который соответствует ls обычно /bin/ls. Затем он использует эфирные вызовы spawn()/posix_spawn() или fork() и exec() для создания нового процесса.