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

如您所见,dash 在性能方面要优越得多。
最后的话
Dash 表现出色 bash 在性能方面但不能使用,因为它不是为交互而设计的。 Ubuntu 仍然使用 bash 作为登录 shell 并严重依赖它,因为 dash 仍然缺少一些需要替换的功能 bash 完全地。