服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - Sh、Bash 和 Dash 几种 Shell 的区别是什么?

Sh、Bash 和 Dash 几种 Shell 的区别是什么?

2023-08-29 10:40今日头条 Linux

在调试基于 Debian 的 Docker 镜像时,进入容器后在终端中按上箭头键后终端显示^[[A,下箭头显示^[[B,右箭头显示^[[C,左箭头显示^[[D,按删除键也是显示了几个特殊字符。很奇怪,仔细看了一下,原来进入容器的时候终端使用的 sh,切换为 bash 就好了(在终端输入 bash 命令就可以切换为 bash 了)。 sh 和 bash 都是常见的Unix shell,其实还有另外一

Sh、Bash 和 Dash 几种 Shell 的区别是什么?

在调试基于 Debian 的 Docker 镜像时,进入容器后在终端中按上箭头键后终端显示^[[A,下箭头显示^[[B,右箭头显示^[[C,左箭头显示^[[D,按删除键也是显示了几个特殊字符。很奇怪,仔细看了一下,原来进入容器的时候终端使用的 sh,切换为 bash 就好了(在终端输入 bash 命令就可以切换为 bash 了)。

sh 和 bash 都是常见的Unix shell,其实还有另外一个是 dash,接下来看下三者的联系和区别。

sh

sh 是 Shell 的缩写,是Unix/Linux系统的默认shell,也是最古老的shell之一。sh是标准的POSIX shell,有许多不同版本和实现,如 Bourne shell 和 POSIX shell。

bash

bash 是 Bourne-Again Shell 的缩写,是 sh 的增强版,具有更多的功能和选项。bash提供了命令自动补全、历史记录、别名、作业控制等特性。bash 是大多数 Linux 发行版及macOS 系统的默认 shell。

dash

dash 是 Debian Almquist shell 的缩写,是从 NetBSD 派生而来的轻量级 shell,专门为 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

如果想切换到 dash,执行如下命令

# ln -sf /bin/dash /bin/sh

如果是在制作 Docker 镜像,想进入基于此镜像的容器后默认使用 bash,可以在对应的 Dockerfile 中添加如下一行

RUN ln -sf /bin/bash /bin/sh

如果使用的虚拟机默认使用的 sh 或者 dash 的话,想要以后登录后都默认使用 bash,可以使用 chsh 命令来改变指定用户的默认 shell 类型,命令如下:

chsh -s /bin/bash user

将命令中的 user 改成自己的用户名,下次登录时,将会使用 bash 作为默认 shell 终端类型。

延伸 · 阅读

精彩推荐
  • Linux十分钟让你了解 Linux ABI

    十分钟让你了解 Linux ABI

    LCTT 译注:昨天,AlmaLinux 称将 放弃 对 RHEL 的 1:1 兼容性,但将保持对 RHEL 的 ABI 兼容,以便在 RHEL 上运行的软件可以无缝地运行在 AlmaLinux 上。可能有的同...

    Linux中国22023-08-01
  • Linux三个提高生产力的必备 Linux 速查表

    三个提高生产力的必备 Linux 速查表

    Linux 因其命令闻名,部分原因是 Linux 执行的几乎所有操作都可以从终端调用;另一部分原因是 Linux 是一个高度模块化的操作系统,它的工具被设计用于产...

    Linux中国8592021-08-09
  • Linux开发、运维不可不看的Linux调测工具【推荐】

    开发、运维不可不看的Linux调测工具【推荐】

    这篇文章主要介绍了开发、运维不可不看的Linux调测工具,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    达不优D8282022-09-06
  • Linux一张图看尽Linux内核运行原理

    一张图看尽Linux内核运行原理

    一张图看尽Linux内核运行原理,帮助大家了解Linux内核运行原理,通过这张图,你可以很方便地学习内核知识,需要的朋友可以参考下...

    Linux Story10942021-10-29
  • Linuxtelnet命令详解及使用示例

    telnet命令详解及使用示例

    telnet 是一种用于远程访问和管理计算机网络设备、服务器和服务的协议和命令行工具。本文为大家介绍下telnet命令详解及使用示例,有需要的朋友可以参考...

    新建文件夹-4312023-06-09
  • LinuxLinux DHCP协议实现过程

    Linux DHCP协议实现过程

    我特别喜欢 Linux 启动的时候屏幕上一行一行的提示。它把系统正在干的所有事情都告诉了我们,不像Windows,自检完了就给个进度条,背后干啥都不让我们...

    Linux教程网5722020-04-06
  • Linuxlinux下磁盘查看命令分享

    linux下磁盘查看命令分享

    fdisk是磁盘分区命令,详细命令的使用可查看相关文档 ...

    linux命令大全3792019-12-26
  • Linuxlinux mint 18虚拟机下设置1080P分辨率的方法

    linux mint 18虚拟机下设置1080P分辨率的方法

    下面小编就为大家带来一篇linux mint 18虚拟机下设置1080P分辨率的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看...

    Linux教程网8262021-12-15