コンテンツにスキップ

「Dash」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
同期
Kgx (トーク | 投稿記録)
同期
 
(5人の利用者による、間の14版が非表示)
1行目: 1行目:
[[Category:コマンドシェル]]
[[Category:コマンドラインシェル]]
[[en:Dash]]
[[en:Dash]]
{{related articles start}}
[[Wikipedia:ja:Debian Almquist shell|Dash]] はミニマルな POSIX 互換シェルです。Bash よりもずっと高速に動作し、使用するメモリを少なく抑えることができます。ほとんどの POSIX 互換スクリプトはスクリプトの一番最初の行に {{ic|/bin/sh}} を指定しており、{{ic|/bin/sh}} がシェルとして動作しますが、Arch ではデフォルトで {{ic|/bin/bash}} へのシンボリックリンクになっています。
{{related|コマンドラインシェル}}
{{related|Bash}}
{{related articles end}}


[[Wikipedia:ja:Debian Almquist shell|Dash (Debian Almquist shell)]] は近代的な POSIX 互換の [[wikipedia:Bourne_shell|{{ic|/bin/sh}} (sh, Bourne shell)]] の実装です。
== インストール ==


Dash は [[Bash]] 互換ではありませんが、Bash は POSIX とほぼ互換であるようにしているため、Dash も互換性があります。
[[公式リポジトリ]]から {{Pkg|dash}} は[[インストール]]できます。


Dash が優れている点は次の通りです。
== DASH をデフォルトシェルとして使う ==

*実行速度が速い。Bash などのシェルに比べて [https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-shell-faster-than-bash 4倍高速] に動作します。
*使用するリソースが少ない (ディスク容量, RAM, CPU)。Bash などよりもずっと小さくコンパクトです (インストール容量は Bash の 6.5 MB に比べて 134.1 kB で、ソースコードの行数は 176 kSLOC に対して 13 kSLOC です)
*セキュリティが高い。古くに開始されたプロジェクトであり、シンプルながら長い実績があります。そして [https://git.kernel.org/cgit/utils/dash/dash.git/stats/?period=q&ofs=10 多くの開発者] が携わっている [https://git.kernel.org/cgit/utils/dash/dash.git/log/ 活発に開発されている] プロジェクトでもあります。攻撃されるような部位は少なく、コードを見ている目はたくさんあります。
* 従来の {{ic|/bin/sh}} だけを必要とする場合

==インストール==

{{Pkg|dash}} パッケージから[[インストール]]できます。または {{AUR|dash-static-musl}} パッケージをインストールしてください。

==DASH を /bin/sh として使う==

ほとんどの POSIX 互換スクリプトはスクリプトの一番最初の行に {{ic|/bin/sh}} を指定しており、{{ic|/bin/sh}} がシェルとして動作しますが、Arch ではデフォルトで {{ic|/bin/bash}} へのシンボリックリンクになっています。


{{ic|/bin/sh}} から {{ic|/bin/dash}} にシンボリックリンクを貼り直すことでシステムのパフォーマンスを向上させることができます。ただその前に、明示的に {{ic|#!/bin/bash}} を指定してないスクリプトが、ちゃんと POSIX 互換であり Bash の機能を使っていないことを確認する必要があります。
{{ic|/bin/sh}} から {{ic|/bin/dash}} にシンボリックリンクを貼り直すことでシステムのパフォーマンスを向上させることができます。ただその前に、明示的に {{ic|#!/bin/bash}} を指定してないスクリプトが、ちゃんと POSIX 互換であり Bash の機能を使っていないことを確認する必要があります。


=== bashism を確認 ===
===bashism を確認===


Dash に含まれていない Bash の機能 ('bashism') は {{ic|/bin/bash}} を明示的に指定していないと動作しなくなります。以下の手順に従うことで修正が必要なスクリプトがないか確認することができます。
Dash に含まれていない Bash の機能 ('bashism') は {{ic|/bin/bash}} を明示的に指定していないと動作しなくなります。以下の手順に従うことで修正が必要なスクリプトがないか確認することができます。


[[AUR]] から {{AUR|checkbashisms}} をインストールしてください。
{{Pkg|checkbashisms}} パッケージをインストールしてください。


==== チェックするべき場所 ====
====チェックするべき場所====


* インストールしたスクリプトの {{ic|#!/bin/sh}} シバン:
* {{ic|#!/bin/sh}} シバンを含む PATH 内のすべてのスクリプト:
$ checkbashisms -f -p $(grep -IrlE '^#! ?(/usr)?/bin/(env )?sh' /usr/bin)


$ IFS=:; rdo grep -Irl '#!/bin/sh' $PATH |xargs -r checkbashisms
=== /bin/sh の再リンク ===

* {{ic|pacman -Qlq}} を使うことで pacman でインストールしたファイルを全て一覧することができます。

===/bin/sh の再リンク===


機能が破壊されないことを確認できたら、{{ic|/bin/sh}} のリンクを変更しても安全なはずです。再リンクを行うには次のコマンドを使用:
機能が破壊されないことを確認できたら、{{ic|/bin/sh}} のリンクを変更しても安全なはずです。再リンクを行うには次のコマンドを使用:
# ln -sfT dash /bin/sh
# ln -sfT dash /usr/bin/sh
Bash を更新すると {{ic|/bin/sh}} が上書きされることがあります。上書きされないようにするために、{{ic|/etc/pacman.conf}} {{ic|[options]}} セクションに以下追加してください:
Bash がアップデートされるとデフォルトのシンボリックリンクで {{ic|/bin/sh}} が上書きされます。上書きされないようにするに以下の [[Pacman#フック|pacman フック]]を使って、アップデート後に {{ic|/bin/sh}} のリンク再度作成するようにしてください:
[Trigger]
NoUpgrade = usr/bin/sh
Type = Package
NoExtract = usr/bin/sh
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

このフックは {{AUR|dashbinsh}} でもインストールできます。


== 参照 ==
==参照==


*https://mailman.archlinux.org/pipermail/arch-dev-public/2007-November/003053.html
http://article.gmane.org/gmane.linux.arch.devel/11418:
*https://launchpad.net/ubuntu/+spec/dash-as-bin-sh
* https://mailman.archlinux.org/pipermail/arch-dev-public/2007-November/003053.html
* https://launchpad.net/ubuntu/+spec/dash-as-bin-sh
*https://wiki.ubuntu.com/DashAsBinSh
* https://wiki.ubuntu.com/DashAsBinSh

2025年2月21日 (金) 21:16時点における最新版

Dash (Debian Almquist shell) は近代的な 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 シバンを含む PATH 内のすべてのスクリプト:
$ IFS=:; rdo 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 フックを使って、アップデート後に /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 でもインストールできます。

参照