Linux 中的 Dash Shell 是什么?
没有多少人知道 Debian Linux 发行版中常见的 dash shell。这是一个快速介绍。
当你想到 shell 家族时,Dash 是最不为人所知的名字之一。但 Dash 并不是要取代你当前的 shell,而是在底层工作的。
您肯定有很多与 Dash 相关的问题,例如它的用例是什么、它与常规 shell 有何不同等等。让我们深入了解达世币。
什么是达世币外壳?
Dash 代表 Debian Almquist Shell。它是 Bourne Shell 的 POSIX 兼容实现。它取代了默认脚本中的/bin/sh,并提供更好的执行速度,同时消耗更少的资源。
如果您使用基于 Debian 的发行版,则默认情况下您已经在使用 Dash。你可能会说,Bash 是我的默认 shell。你对默认 shell 的看法是正确的,所以让我解释一下这个矛盾的说法。
在 Ubuntu 6.10 发布之前,当默认脚本想要执行 /bin/sh 作为符号链接来激发 bash 时,会使用 Bash。
随着 bash 随着时间的推移变得越来越大,效率受到影响,Dash 被实现来取代默认脚本中的 /bin/sh。
Dash(Debian Almquist Shell)比 bash 更简单,也更精简。 Dash 并不适合交互式会话,而是在幕后工作以提高效率。
现在,我们来看看达世币的优势:
与 bash 相比,您可以获得显着的性能改进
与其他 shell 相比,它使用的磁盘空间更少,这对于在存在潜在问题时用于清理的包装器脚本非常重要。
Dash 仅依赖于 libc(核心系统库),而 bash 需要有终端支持库,没有它们,你甚至无法运行脚本。这意味着,达世币可以在损坏的系统上更好地工作!
Dash 和 Bash 的性能比较
正如我上面提到的,破折号意味着高效,但确切的数字是多少,或者它快了多少倍,只能从测试中得出。
因此,我将对 bash 和 dash 进行比较,以便您可以更好地了解其性能。
测试启动时间
我将使用一个简单的 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
当我执行上面的脚本时,它给出了以下结果:
使用 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 所需的一些功能。