Почему bash используется в сценариях загрузки?

Почему программы, запущенные при загрузке / завершении работы, записываются в сценарии bash ?

Если скомпилированный язык (или более быстрый интерпретируемый язык, например Python), то его время работы будет короче.

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

«Назад в день», не было autoconf, dpkg, rpm. Вы загрузили программное обеспечение, иногда из UUCP, скомпилировали продукт и определили – с вашими собственными соглашениями – где устанавливать продукт. Приобретение продукта до системы загрузки / выключения считалось обязанностью системного администратора. Системный администратор напишет rc скрипт и поместит его в соответствующее место для этой системы ( /etc/inittab , /etc/rcN.d/ , /etc/rc.local , /etc/inetd.conf ). С меньшим количеством не-linux-систем на переднем плане появление rpm и dpkg делает некоторые из этих локальных решений менее важными.

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

Как я уже упоминал ранее, разные ОС UNIX имели разные способы загрузки. Написание короткого сценария оболочки для вашей собственной системы было намного проще, чем писать разработчики для каждого возможного вкуса UNIX, который подходил (опять же, это было даже до автоконфигурации): SysV, Ultrix, Irix, HP-UX, SunOS, Solaris, NextStep, NonStop и т. Д. По большей части они попадали в два или три механизма, но каждый из них имел свой собственный поворот.

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

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

Большая часть процесса загрузки связана с IO: ожиданием загрузки файлов с диска или ожиданием инициализации устройств. Было бы не так много, чтобы выиграть от использования скомпилированного языка.

Использование ash вместо bash ускоряет процесс загрузки. Пепел спроектирован так, чтобы быть быстрее и меньше, чем bash, чего он добивается, имея меньше возможностей (POSIX и не намного больше). Редко, пепел запускается быстрее, что дает измеримое преимущество, потому что процесс загрузки разделен между многими сценариями. Использование большего количества Python, вероятно, сделает процесс загрузки более медленным, потому что интерпретатор Python больше и требует больше времени для каждого процесса.

В системах Unix обычно есть один или несколько сценариев для каждой подсистемы или демона, которые необходимо инициализировать. Системные администраторы часто изменяют эти сценарии. Работа распределяется между многими небольшими программами, которые поступают из разных источников (по одной на подсистему). Для многих небольших простых программ оболочка довольно быстро; не было бы многого, если бы можно было использовать скомпилированный язык, но гибкость была бы огромной.

Изменение сценария bash проще, чем поиск источников для исполняемых файлов.

Сценарии запуска чаще, чем нет, являются специфическими для распространения, поэтому важно изменить модификацию.

Если вы считаете, что сценарии bash медленные, вы можете посмотреть тире и писать POSIX-совместимые сценарии sh, которые запускаются в тире.