Dash
関連記事
Dash は近代的な POSIX 互換の /bin/sh
(sh, Bourne shell) の実装です。
Dash は Bash 互換ではありませんが、Bash は POSIX とほぼ互換であるようにしているため、Dash も互換性があります。
Dash が輝くのは、
- 実行速度が速い。Bash などのシェルに比べて 4倍高速 に動作します。
- 使用するリソースが少ない (ディスク容量, RAM, CPU)。Bash などよりもずっと小さくコンパクトです (インストール容量は Bash の 6.5 MB に比べて 134.1 kB で、ソースコードの行数は 176 kSLOC に対して 13 kSLOC です)。
- セキュリティが高い。古くに開始されたプロジェクトであり、シンプルながら長い実績があります。そして 多くの開発者 が携わっている 活発に開発されている プロジェクトでもあります。攻撃されるような部位は少なく、コードを見ている目はたくさんあります。
- 従来の
/bin/sh
だけを必要とする場合
インストール
dash パッケージからインストールできます。または dash-static-muslAUR パッケージをインストールしてください。
DASH を /bin/sh として使う
ほとんどの POSIX 互換スクリプトはスクリプトの一番最初の行に /bin/sh
を指定しており、/bin/sh
がシェルとして動作しますが、Arch ではデフォルトで /bin/bash
へのシンボリックリンクになっています。
/bin/sh
から /bin/dash
にシンボリックリンクを貼り直すことでシステムのパフォーマンスを向上させることができます。ただその前に、明示的に #!/bin/bash
を指定してないスクリプトが、ちゃんと POSIX 互換であり Bash の機能を使っていないことを確認する必要があります。
bashism を確認
Dash に含まれていない Bash の機能 ('bashism') は /bin/bash
を明示的に指定していないと動作しなくなります。以下の手順に従うことで修正が必要なスクリプトがないか確認することができます。
checkbashisms パッケージをインストールしてください。
チェックするべき場所
- インストールしたスクリプトの
#!/bin/sh
シバン:
$ find /usr/bin/ -type f -perm -o=r -print0 | xargs -0 gawk '/^#!.*( |[/])sh/{printf "%s\0", FILENAME} {nextfile}' | xargs -0 checkbashisms
pacman -Qlq
を使うことで pacman でインストールしたファイルを全て一覧することができます。
/bin/sh の再リンク
機能が破壊されないことを確認できたら、/bin/sh
のリンクを変更しても安全なはずです。再リンクを行うには次のコマンドを使用:
# ln -sfT dash /usr/bin/sh
Bash がアップデートされるとデフォルトのシンボリックリンクで /bin/sh
が上書きされます。上書きされないようにするには、以下の pacman フックを使って、アップデート後に /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 でもインストールできます。