Что такое Dash Shell в Linux?
Немногие знают об оболочке Dash, которая обычно присутствует в дистрибутиве Debian Linux. Вот краткое введение.
Дэш — одно из наименее известных имен, когда речь заходит о семействе оболочки. Но Dash не предназначен для замены вашей текущей оболочки и работает «под капотом».
У вас должно быть много вопросов, связанных с Dash, например, каков вариант его использования, чем он отличается от вашей обычной оболочки и так далее. Итак, давайте углубимся в Dash.
Что такое оболочка Dash?
Dash означает Debian Almquist Shell. Это POSIX-совместимая реализация Bourne Shell. Он заменяет /bin/sh в сценариях по умолчанию и обеспечивает лучшую скорость выполнения, потребляя при этом меньше ресурсов.
Если вы используете дистрибутив на основе Debian, вы уже используете Dash по умолчанию. Вы бы сказали, что Bash — моя оболочка по умолчанию. Вы правы насчет оболочки по умолчанию, поэтому позвольте мне объяснить это противоречивое утверждение.
До выпуска Ubuntu 6.10 Bash использовался, когда ваши сценарии по умолчанию хотели выполнить /bin/sh как символическую ссылку, чтобы спровоцировать bash.
Поскольку bash со временем стал больше, эффективность снизилась, и Dash был реализован для замены /bin/sh в сценариях по умолчанию.
Dash (Debian Almquist Shell) менее сложен и удобен, чем bash. Dash не предназначен для интерактивных сессий и работает скрытно, обеспечивая гораздо большую эффективность.
Теперь давайте посмотрим на преимущества Dash:
Вы получаете значительный прирост производительности по сравнению с bash.
Он использует меньше дискового пространства по сравнению с другими оболочками, что важно для сценариев-оболочек, предназначенных для очистки при наличии основной проблемы.
Dash полагается только на libc (основную системную библиотеку), тогда как bash нуждается в библиотеках поддержки терминала, и без них вы даже не сможете запустить скрипт. Это означает, что Dash может работать намного лучше на сломанных системах!
Сравнение производительности между Dash и Bash
Как я уже упоминал выше, тире должно быть эффективным, но каковы точные цифры или во сколько раз оно быстрее, можно узнать только в результате теста.
Поэтому я буду сравнивать bash и Dash, чтобы вы могли лучше понять его производительность.
Тестирование времени запуска
Я собираюсь использовать простой скрипт оболочки, который будет отслеживать точное время открытия оболочки 1000 раз без выполнения каких-либо операций.
Итак, начнем с bash.
#!/bin/bash
for i in $(seq 1 1000);
do bash -c ":" ;
done
Для отслеживания времени я использовал утилиту времени. Это дало мне результаты, как показано ниже:
Используемый скрипт вызовет bash для запуска оболочки без каких-либо операций 1000 раз, и это заняло около 3 секунд.
Теперь давайте сделаем то же самое для тире. С некоторыми изменениями в том же сценарии, что и выше, он будет готов к тестированию на приборной панели.
#!/bin/dash
for i in $(seq 1 1000);
do dash -c ":" ;
done
Когда я выполнил приведенный выше скрипт, он дал мне следующий результат:
Тот же сценарий, выполненный с помощью тире, занял всего 1,1 секунды, что вдвое меньше, чем при использовании bash.
Тестирование производительности с помощью скрипта ShellBench
ShellBench — это утилита для тестирования оболочек POSIX, которая предоставляет вам различные тесты, с помощью которых вы можете тестировать оболочки по различным параметрам.
ShellBench выполняет заданный набор команд в бесконечном цикле в течение 1-2 секунд, а затем возвращает количество выполнений в секунду.
Поскольку я тестирую только Dash и Bash, моя команда будет следующей:
./shellbench -s bash,dash sample/*
Как вы можете ясно видеть, Dash намного превосходит его по производительности.
Заключительные слова
Dash превосходит bash по производительности, но его нельзя использовать, поскольку он не предназначен для взаимодействия. Ubuntu по-прежнему использует bash в качестве оболочки входа и во многом полагается на него, поскольку в Dash по-прежнему отсутствуют некоторые функции, необходимые для полной замены bash.