При отладке образа Docker на основе Debian после входа в контейнер и нажатия клавиши со стрелкой вверх в терминале терминал отображает ^[[A, стрелка вниз отображает ^[[B, стрелка вправо отображает ^[[C, и стрелка влево отображает ^[[D , нажатие клавиши удаления также отображает несколько специальных символов. Очень странно, при ближайшем рассмотрении оказывается, что sh, используемый терминалом при входе в контейнер, можно переключить на bash (переключиться на bash можно, набрав в терминале команду bash).
И sh, и bash являются распространенными оболочками Unix. На самом деле, есть еще одна, называемая dash. Далее давайте посмотрим на связи и различия между ними.
ш
sh — это аббревиатура от Shell, которая является оболочкой по умолчанию в системе Unix/Linux и одной из старейших оболочек. sh — это стандартная оболочка POSIX, и существует множество различных версий и реализаций, таких как оболочка Bourne и оболочка POSIX.
бить
bash — это сокращение от Bourne-Again Shell, расширенной версии sh с большим количеством функций и опций. bash предоставляет такие функции, как автозавершение команд, история, псевдонимы и управление заданиями. bash является оболочкой по умолчанию в большинстве дистрибутивов Linux и системах macOS.
бросаться
dash — это аббревиатура от Debian Almquist shell, облегченной оболочки, полученной из NetBSD и разработанной специально для дистрибутива Debian. По сравнению с bash, dash имеет более компактный код и более быстрый запуск, но предлагает меньше функций. В системах Debian dash обычно используется как /bin/sh (вместо bash), потому что dash более совместим с POSIX и запускается быстрее.
Во многих Linux /bin/sh указывает на /bin/bash, то есть /bin/sh является мягкой ссылкой на /bin/bash.
# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Oct 15 2017 /bin/sh -> bash
В системах Debian и дистрибутивах на основе Debian /bin/sh указывает на /bin/dash.
# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Oct 15 2017 /bin/sh -> dash
Метод переключения sh на использование bash вместо dash также очень прост, потому что /bin/sh — это программная ссылка, просто измените ее, чтобы она указывала на /bin/bash, выполните следующую команду
# ln -sf /bin/bash /bin/sh
Если вы хотите переключиться на тире, выполните следующую команду
# ln -sf /bin/dash /bin/sh
Если вы создаете образ Docker и хотите использовать bash по умолчанию после входа в контейнер на основе этого образа, вы можете добавить следующую строку в соответствующий Dockerfile
RUN ln -sf /bin/bash /bin/sh
Если виртуальная машина использует sh или dash по умолчанию, если вы хотите использовать bash по умолчанию после входа в систему, вы можете использовать команду chsh для изменения типа оболочки по умолчанию для указанного пользователя.Команда выглядит следующим образом:
chsh -s /bin/bash user
Измените пользователя в команде на свое собственное имя пользователя, и при следующем входе в систему в качестве типа терминала оболочки по умолчанию будет использоваться bash.