sh、bash 和 dash 几种 shell 的区别是什么?

2023-11-20

在调试基于 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 终端类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sh、bash 和 dash 几种 shell 的区别是什么? 的相关文章

随机推荐

  • Response响应方法详解

    Response 响应 服务器把请求的处理结果告知客户端 在B S架构中 响应就是把结果带回浏览器 响应对象 在项目中用于发送响应的对象 常用状态码 状态码 说明 200 执行成功 302 它和307一样 都是用于重定向的状态码 只是307
  • M3U8文件简介及在线播放器

    m3u8文件格式 M3U8是Unicode版本的M3U 用UTF 8编码 M3U 和 M3U8 文件都是苹果公司使用的 HTTP Live Streaming HLS 协议格式的基础 这种协议格式可以在 iPhone 和 Macbook 等
  • QSpinBox修改样式 去掉上下键

    1 找到QSpinBox控件 右键 改变样式表 将以下代码粘贴进去 QSpinBox border 1px solid 242424 QSpinBox up button QSpinBox down button width 0px 修改前
  • Dev-C++之开启装逼效果

    Dev C 是个不错的C IDE 在10年前 它是很不错 在现在 它是个以界面丑陋和调试像吃粑粑这两点著称 如下图 实在是丑到离谱 丑到无法忍受 可是没办法呀 人家CCF规定比赛用这个 你个小蒟蒻吵什么 我现在就来讲讲怎么把你的Dev C
  • 【Android -- 面试】Android 知识点(四大组件)

    目录 文章目录 目录 Activity Fragment Service Broadcast Receiver ContentProvider Activity 1 说下 Activity 的生命周期 参考回答 在 Activity 的生命
  • Syntax Error: Error: PostCSS received undefined instead of CSS string

    Syntax Error Error PostCSS received undefined instead of CSS string Module Error from node modules sass loader dist cjs
  • 异步Buck和同步Buck的特点

    1 介绍 随着时代的发展 工业 车载 通信 消费类等产品都提出了小型化 智能化的需求 相应的 对于这些系统中的电源模块提出了小型化的要求 目前 市场上依然存在很多异步Buck电源管理芯片使用的场景 针对这些应用 采用同步Buck电源管理芯片
  • 今日热榜前 5 的 GitHub 项目

    今日开源热榜 Top5 项目目录 1 纪念左耳朵耗子 2 你的第二大脑 3 大模型开发人员需要记住的数 4 短链接管理工具 5 StableStudio 01 纪念左耳朵耗子 MegaEase 创始人兼 CEO 陈皓 网名 左耳朵耗子 于上
  • VSCode搭建ARM(STM32开发环境)

    目录 需要用到的工具 软件安装 下载安装 Visual Studio Code 下载安装 STM32Cubemx 下载安装 ARM GCC交叉编译工具链 下载安装 Msys2 下载安装 OpenOCD 下载安装 Make 开发环境配置 ms
  • 虚拟机扩容,解决虚拟机磁盘根目录不足

    当你打开虚拟机时会提示 你的磁盘根目录不足 这表明你需要对自己的虚拟机进行扩容 详细步骤如下 第一步 你需要将自己的虚拟机关机 即关闭电源 第二步 右键你需要扩容的虚拟机 然后点击设置 第三步 点击硬盘 第四步 点击右边进行扩容 将磁盘容量
  • 小米手机无法调试应用解决Installation failed with message Failed to establish session.

    小米手机性价比高 有些问题也很尖锐 比如我的5S用了黑科技 试验品 超声波指纹解锁 识别率就很低 每次解锁都要哈口气 真后悔 而且最近又遇到新问题 我的小米5S无法通过android studio调试应用 卖批啊 但即使这样也比蓝绿工程的O
  • Java集合之单列集合

    分类 集合分为单列集合 Collection 和双列集合 Map 单列集合的体系结构 List集合和Set集合的区别 List系列集合 添加元素是有序的 添加的顺序 而非数据的大小顺序 可重复 有索引 Set系列集合 添加的元素是无序的 添
  • erlang escript使用

    Erlang scripting support 让erlang可以向unix script 一样做脚本使用 script name script arg1 script arg2 escript escript flags script
  • 使用Flask+mysql开发一套自己的搜索引擎(附源码)

    使用Flask mysql开发一套自己的搜索引擎 附源码 前言 主要是针对在内网办公的朋友 可以把这一套部署到单机或者公司服务器 做一些名词查询 语言翻译的功能 如果需要的话可以扩展一下 搞成一套类似于内网网盘的软件 这个我们下期再讲 这期
  • 手游幻想神域服务器显示,幻想神域手游最详细攻略介绍

    幻想神域 是一款公测于2018年的动漫手游 是角色扮演类的游戏 游戏凭借二次元的日系风格 Q萌的人物画风 饱满的人物设定而吸引了很多玩家 游戏玩得多的人得心应手 但是玩得比较少的可能会有点摸不着头脑 那么接下来就给大家介绍一下 幻想神域 的
  • 接口的幂等性设计

    在高并发或者是安全要求下 后端接口会有多次执行的结果与一次执行的结果要一致的要求 这种接口就叫幂等性接口 需要用到幂等性的接口比较常见的就是用户下单支付等 防止出现重试时对业务造成巨大灾害的危险 下文为设计方案的各个要点 前端幂等控制 按钮
  • Qt使用QChart制作多路虚拟示波器

    使用QT做虚拟示波器 共16通道 波形是重叠在一起 不同颜色区分 想用写好的TCP传输来让单片机与电脑通信 解刨数据 放入到示波器中进行显示 准备工作 首先我缺一个绘图的控件 于是在网上找了找 网上给我介绍的有三种 分别是qcustompl
  • C、C++、C#、python、java编程—函数

    C资料 菜鸟教程 C语言中文网 C community C 资料 菜鸟教程 cplusplus C community C 资料 菜鸟教程 microsoftC 文档 python资料 菜鸟教程 python标准库 Java资料 菜鸟教程
  • 【Ansible故障解决】解决Ansible初始连接host服务器需验证问题

    Ansible故障解决 解决Ansible初始连接host服务器需验证问题 一 ansible介绍 二 修改ansible cfg配置文件 1 ansible的配置文件修改 2 修改配置文件中的其他部分 3 编辑主机清单 三 测试ansib
  • sh、bash 和 dash 几种 shell 的区别是什么?

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