Dash
Dash (Debian Almquist shell) 是 /bin/sh (sh, Bourne shell) 的一个现代 POSIX 兼容实现。
Dash 与 Bash 不兼容,但 Bash 尽量与 POSIX 兼容,因此也与 Dash 兼容。
Dash 的优势在于
- 执行速度。大约比 Bash 等快 4 倍。
- 资源极其有限 (磁盘空间、RAM 或 CPU)。尽可能精简 - 比 Bash 等更小 (安装后 134.1 kB vs 6.5 MB,13 kSLOC vs 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/shshebang 的脚本
$ 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 提供。