「Dash」の版間の差分
(同期) |
(→チェックするべき場所: 翻訳を修正) |
||
(5人の利用者による、間の13版が非表示) | |||
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]] は近代的な 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 を確認=== |
Dash に含まれていない Bash の機能 ('bashism') は {{ic|/bin/bash}} を明示的に指定していないと動作しなくなります。以下の手順に従うことで修正が必要なスクリプトがないか確認することができます。 |
Dash に含まれていない Bash の機能 ('bashism') は {{ic|/bin/bash}} を明示的に指定していないと動作しなくなります。以下の手順に従うことで修正が必要なスクリプトがないか確認することができます。 |
||
− | + | {{Pkg|checkbashisms}} パッケージをインストールしてください。 |
|
− | ==== |
+ | ====チェックするべき場所==== |
− | * |
+ | * {{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 |
+ | 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://wiki.ubuntu.com/DashAsBinSh |
− | * https://wiki.ubuntu.com/DashAsBinSh |
2023年6月2日 (金) 05:33時点における最新版
関連記事
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
シバンを含む 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 でもインストールできます。