Linux 中的 Dash Shell 是什么?
说到 shell 家族,Dash 是最不为人所知的名字之一。但Dash并非要取代您当前的 shell,而是在后台运行。
您一定有很多与 Dash 相关的问题,例如它的用例是什么、它与常规 shell 有何不同等等。那么让我们深入了解 Dash。
什么是 Dash shell?
Dash 代表 Debian Almquist Shell。它是符合 POSIX 标准的 Bourne Shell 实现。它取代了默认脚本中的 /bin/sh,并提供更快的执行速度,同时消耗更少的资源。
如果您使用的是基于 Debian 的发行版,那么您已经默认使用 Dash。您会说,Bash 是我的默认 shell。您对默认 shell 的看法是正确的,所以让我来解释一下这个矛盾的说法。
在 Ubuntu 6.10 发布之前,当您的默认脚本想要执行 /bin/sh 作为符号链接来激发 bash 时,就会使用 Bash。
随着 bash 变得越来越大,其效率受到影响,并且 Dash 被实现来替换默认脚本中的 /bin/sh。
Dash ( Debian Almquist Shell ) 比 bash 更简单、更轻便。Dash 不适用于交互式会话,而是在后台运行,效率更高。
现在,我们来看看Dash的优点:
- 与 bash 相比,性能有显著提升
- 与其他 shell 相比,它占用的磁盘空间更少,这对于在存在潜在问题时用于清理的包装脚本来说很重要。
- Dash 仅依赖 libc(核心系统库),而 bash 需要终端支持库,没有它们,您甚至无法运行脚本。这意味着,Dash 可以在损坏的系统上更好地工作!
Dash 与 Bash 的性能比较
正如我上面提到的,dash 的目的是为了提高效率,但具体的数字是多少或者快了多少倍只能通过测试来得出。
因此我将对 bash 和 dash 进行比较,以便您更好地了解它的性能。
测试启动时间
我将使用一个简单的 shell 脚本,它将跟踪打开 shell 1000 次但不执行任何操作的准确时间。
因此让我们从 bash 开始。
#!/bin/bash
for i in $(seq 1 1000);
do bash -c ":" ;
done
为了跟踪时间,我使用了时间实用程序。它给出了以下结果:
使用的脚本将调用bash运行1000次无操作的shell,大约需要3秒。
现在,让我们对 dash 做同样的事情。对上面的相同脚本进行少量更改,即可为 dash 进行测试。
#!/bin/dash
for i in $(seq 1 1000);
do dash -c ":" ;
done
当我执行上述脚本时,它给出了以下结果:
当使用 dash 执行相同的脚本时,仅花费1.1 秒,还不到使用 bash 所需时间的一半。
使用 ShellBench 脚本测试性能
ShellBench是 POSIX shell 的基准测试实用程序,可为您提供各种测试,通过这些测试您可以根据不同的参数测试 shell。
ShellBench 在无限循环中运行一组给定的命令 1-2 秒,然后返回每秒的执行次数。
由于我只在 dash 和 bash 之间进行测试,因此我的命令如下:
./shellbench -s bash,dash sample/*
您可以清楚看到,dash 在性能方面更加出众。
最后的话
Dash 在性能方面优于 bash,但由于它不是为交互而设计的,因此无法使用。Ubuntu 仍然使用 bash 作为登录 shell,并且严重依赖它,因为 dash 仍然缺少完全替代 bash 所需的一些功能。