AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1059474
Accepted
guettli
guettli
Asked: 2018-07-26 11:53:53 +0800 CST2018-07-26 11:53:53 +0800 CST 2018-07-26 11:53:53 +0800 CST

关于 bash 与 dash 的速度是否有具体数字?

  • 772

根据这篇文章,dash被选为/bin/sh因为bash速度较慢:Dash as /bin/sh

是否有具体数字说明速度快多少dash?

bash如果您使用而不是dash启动 Ubuntu ,需要多长时间?

上述链接的论点今天仍然有效吗?对于背景:system-v init 使用了很多 shell 脚本,但 systemd 没有。

这个问题与综合基准测试中的速度无关。这关乎最终用户的整体显着利益。关于 dash 与 bash 速度的综合基准无法回答这个问题。

bash benchmarks dash-shell
  • 1 1 个回答
  • 2236 Views

1 个回答

  • Voted
  1. Best Answer
    Sebastian Stark
    2018-07-26T12:31:02+08:002018-07-26T12:31:02+08:00

    此测试不代表启动过程,但您可以通过制作一个小测试脚本来简单地尝试自己,我称之为shspeed:

    $ cat shspeed
    for a in `seq 10000`; do ( :; ); done
    

    这只是一个接一个地分叉 10000 个子壳。现在用 bash 和 dash 运行它并计时:

    $ time dash shspeed
    dash shspeed  0,70s user 0,33s system 107% cpu 0,965 total
    
    $ time bash shspeed
    bash shspeed  1,59s user 0,76s system 108% cpu 2,180 total
    

    所以,它在我的硬件上要快得多,它是大约 1 年的戴尔 XPS 13 9365。你可以想象它在低端硬件上会产生更大的差异。此外,这个测试只是关于一个 for 循环并产生一个子 shell。也许对于某些测试,结果会更加显着。

    当然,您可以忽略这一点并说您不在乎生成 10000 个子壳的速度有多快。好吧,有些人似乎在乎:)

    对于您的特定引导过程,它可能不会产生任何明显的差异。/bin/bash如果您使用as/bin/sh并用秒表测量差异,我认为没有问题。

    请查看@wjandrea 的这些链接以获取有关此事的详细说明:https ://wiki.ubuntu.com/DashAsBinSh ,将 sh 链接到 dash 有什么意义?

    以 systemd 为单位的 shell 速度

    在你修改你的问题之后,听起来你对哪个 shell 更快并不感兴趣,但更多的是为什么我们仍然坚持让启动过程快半秒(左右),特别是现在我们不使用 shell 脚本与我们在 sysv-init 成为标准时所做的相同程度。

    由于我不参与 Ubuntu 的政治,我将尝试给出一个在我看来的答案:

    1. 如果您可以通过简单地使用指向另一个 shell 的符号链接来加快半秒的速度,那是值得的。

    2. 让默认 shell 只做 POSIX 要求默认 shell 做的事情是有意义的,以保持事情的可移植性。想象一下,一个发行版在初始化脚本中使用了另一个发行版(还没有)的 bash 功能。

    3. (d)ash 也被添加到能够修复标准脚本中的 bashisms,并在未来避免它们。/bin/sh是一个商定的标准,大型基础设施所依赖的东西。我不想用具有更大代码库和不需要的功能的东西来代替。

    4. 使用更少的 CPU 周期和内存总是值得的。甚至 systemd 单元也经常在后台运行 shell 脚本。

    所有这些对于普通用户来说可能无关紧要,但间接地他们得到的是一个整体更稳定的分布。

    为什么不猛击?

    这更像是一种观点:就我个人而言,我永远不会选择用破折号编写脚本。它仅提供非常基本的结构。对于更大的软件,我宁愿选择 bash 或 zsh(或者根本不是 shell 的东西)。我可能想使用哪些功能:高级参数扩展、shell 算法、数组,也许还有更多。

    这不应该发生在主要用于启动守护进程或安装软件的脚本中。那些应该使用最少的指令集并保持脚本的可读性和简单性。但是,如果 bash 的所有优点都对他们可用,那么它很可能会发生。

    /bin/sh应该主要用于在相当方便的环境中运行外部程序,而不是用于复杂的软件系统。

    概括

    /bin/sh由 dash 实现的,带来了一种兼容 POSIX 的快速稳定的脚本语言,它可以很好地作为系统 shell 脚本的标准和默认解释器。永远不会为了方便功能而牺牲这些属性。

    从程序员的角度来看,它实现了“做一件事,把它做好”的口头禅。

    它主要不是优化,而是职责分离。

    它已经存在,因此无需额外的努力来保持它。

    带着最终用户帽子来看这个问题会提出一个问题:什么样的最终用户?桌面用户不在乎,但他们仍然会受益于更稳定(也许更快)的发行版。包维护者会非常关心,并且那些受益于可靠的系统解释器,它具有少量、定义明确和经过良好测试的功能集。程序员不应该关心,因为他们可能不会在/bin/sh.

    PS:bash 二进制文件的大小几乎是 dash 二进制文件的 10 倍!

    • 15

相关问题

  • 同时复制到两个位置

  • 如何在 shell 脚本中创建选择菜单?

  • 从 bash 迁移到 zsh [关闭]

  • bashrc 还是 bash_profile?

  • 备份 bash 脚本未压缩其 tarball

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve