В чем разница между оболочками sh, bash и dash?

При отладке образа 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.

Supongo que te gusta

Origin blog.csdn.net/luduoyuan/article/details/131152648
Recomendado
Clasificación