Dash
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
。
安装
安装 dash 或 dash-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 提供。