Dash

出自 ArchWiki

Dash (Debian Almquist shell)/bin/sh (sh, Bourne shell) 的现代 POSIX 兼容实现。

Dash 与 Bash 不兼容,但 Bash 尝试主要与 POSIX 兼容,从而也与 Dash 兼容。

Dash 的优势在于

  • 执行速度。大约比 Bash 和其他 shell 快 4 倍
  • 非常有限的资源(磁盘空间、RAM 或 CPU)。尽可能精简 - 比 Bash 和其他 shell 小得多(安装大小 134.1 kB 对比 6.5 MB,代码行数 13 kSLOC 对比 176 kSLOC)。
  • 安全性。Dash 是一个历史悠久、小型化的项目,功能简单且历史悠久;它仍然非常 活跃,并且有 许多 活跃的开发者。因此,Dash 具有更小的攻击面,同时仍有很多人关注其代码。
  • 如果只需要经典的 /bin/sh

安装

安装 dashdash-static-muslAUR

将 Dash 用作 /bin/sh

大多数 POSIX 兼容的脚本在脚本的第一行指定 /bin/sh,这意味着它将运行 /bin/sh 作为 shell,在 Arch 中默认情况下,/bin/sh 是指向 /bin/bash 的符号链接。

您可以将 /bin/sh 重新符号链接到 /bin/dash,这可以提高系统性能,但首先您必须验证所有非显式声明 #!/bin/bash 的脚本都不需要任何 Bash 的特性,并且所有 /bin/sh 脚本都安全地符合 POSIX 标准。

识别 bashism

Dash 中未包含的 bash 特性(“bashism”)将无法工作,除非显式指向 /bin/bash。以下说明将帮助您找到可能需要修改的任何脚本。

安装 checkbashisms

常见的检查位置

  • PATH 中所有带有 #!/bin/sh shebang 的脚本
$ IFS=:; grep -Irl '#!/bin/sh' $PATH |xargs -r checkbashisms
  • pacman -Qlq 可用于列出所有 pacman 安装的文件。

重新链接 /bin/sh

一旦您验证它不会破坏任何功能,就可以安全地重新链接 /bin/sh。为此,请使用以下命令

# ln -sfT dash /usr/bin/sh

Bash 的更新将使用默认的符号链接覆盖 /bin/sh。为了防止这种情况,请使用以下 pacman hook,它将在每次受影响的更新后重新链接 /bin/sh

[Trigger]
Type = Package
Operation = Install
Operation = Upgrade
Target = bash

[Action]
Description = Re-pointing /bin/sh symlink to dash...
When = PostTransaction
Exec = /usr/bin/ln -sfT dash /usr/bin/sh
Depends = dash

这由 dashbinshAUR 提供。

参见