跳转至内容

Dash

来自 ArchWiki

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

安装

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

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.