シェル

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Shell and the translation is 100% complete.
Other languages:
Resources

シェルは、ユーザにテキストベースのインターフェースを提供する、コマンドラインインタプリタです。仮想コンソール内の (または、シリアル接続を介した端末エミュレータ内の) コマンドラインインターフェースとして、またはリモートシェルとして (例えば SSH を介して)、さらにはスクリプトインタプリタとして (あらかじめ書かれたコマンドを実行することによって)、使用することができます。

典型的には、シェルはユーザが端末でログインした後に開始する最初のプログラムです。/etc/passwd ファイルは、システム上のユーザごとのログインシェルを定義する情報を含んでいます。ログイン後は、ユーザは端末から他のシェルを起動したり、ログインシェルを変更したり、特定の端末エミュレータの下で使用するシェルを指定したりすることができます。

Gentoo では、/bin/sh ファイルはデフォルトシステムシェルへのシンボリックリンクになっているため、複数の異なる POSIX シェルから 1 つ選んでリンクすることができます。ハンドブックに従ってインストールした後は、デフォルトのシェルは bash になっているでしょう。

関連
日常的な使用のためのヒントについては端末エミュレータの記事も参照してください。
メモ
スクリプトを書くときには、最初の行でシバンを使うことによって、正しいインタプリタを参照することに注意を払うできです。例えば、#!/bin/sh で始まるスクリプトは bash 特有のコードを一切含めずに、POSIX の構成要素のみを使用するべきです。

コマンドラインインターフェース

Unix (系)コマンドラインインターフェース (CLI) は、現代的なコンピュータとやり取りするための、強力で成熟したパラダイムです。CLI はグラフィックベースのモデルに対していくつかの特筆すべき強みを維持していて、そのため多くのプロフェッショナルに選ばれるツールとなっています。

CLI は一般的に端末エミュレータ (または仮想コンソール) 内で実行するシェルを通してアクセスされる、標準化されたテキストベースのインターフェースを提供します。

CLI には、CRT スクリーン技術よりもさらに昔のテレタイプ端末に始まる、豊かな歴史があります。この長い歴史により洗練されたシステムが生み出され、UNIX OS とともにその特性の多くを発展させてきました。今日では、テキストはほとんど常にキーボードで入力され、出力はスクリーンに提示されます。

学習曲線は GUI のそれよりも険しいかもしれませんが、最小限のスキルを一度身に付ければ、CLI は、システム上で利用可能なすべてのコマンドをユーザの指先一つで利用できるように提供します。メニューを読んだり遷移する必要はありません。

CLI ツールは、オプションを組み合わせて期待する機能を達成できるように、シンプルで覚えやすいインターフェースを提供する傾向にあります。CLI は一般的に、ツール間の緊密な連携を可能にするために標準的なインターフェースに従います。また、man ページを利用して、あるいはより手軽には --help を利用して、ツールのマニュアルへのアクセスも可能にしています。

現代的なシェルはパイプなどの強力なしくみが利用でき、さまざまなツールがこれを利用してシームレスに連携することができます。さらに、複数の CLI ユーティリティを利用して、出力のフィルタリングとソートを行うことも可能です。

CLI ユーティリティには、実行後に基本的な入力を求めたり、そのコマンドに固有のサブシェルを開いたりするような、対話的なものもあります。多くのユーティリティはコマンドライン、標準入力、ファイル、デバイス、またはネットワークから入力を受け取ります。そして、コマンドラインに出力するか、そうでなければ出力をファイルにリダイレクトしたり、他のコマンドにパイプしたりすることができます。

利用可能なソフトウェア

Gentoo はシェルの選択肢を提供しています。以下はその一部です:

名前 パッケージ ホームページ 説明
bash app-shells/bash https://tiswww.case.edu/php/chet/bash/bashtop.html Bourne Again Shell は Gentoo のデフォルトのシェルです。Gentoo のデフォルトパッケージマネージャである Portage によって使用されています。
dash app-shells/dash http://gondor.apana.org.au/~herbert/dash/ Debian Almquist Shell。小さく高速で posix 準拠の、(/bin/sh の置き換えとして) スタートアップスクリプトに適したシェルです。
fish app-shells/fish https://fishshell.com/ Friendly Interactive SHell です。
ksh app-shells/ksh http://www.kornshell.com/ オリジナルの Korn Shell の 1993 リビジョン (ksh93) です。
mksh app-shells/mksh https://www.mirbsd.org/mksh.htm 活発に開発されている Korn Shell の自由な実装で、スクリプティングによく適しています。
pwsh app-shells/pwsh-bin https://learn.microsoft.com/powershell/ 多くのシェルは「すべてはファイルである」と仮定します。PowerShell は「すべてはオブジェクトである」と仮定する、オブジェクト指向のシェルです。今は MIT ライセンスが付与されており、Linux 上で利用可能です。
tcsh app-shells/tcsh http://www.tcsh.org/ Berkeley C Shell (csh) の改良版。
yash app-shells/yash https://yash.osdn.jp/ Yet Another SHell は C99 (ISO/IEC 9899:1999) で書かれた POSIX 準拠のコマンドラインシェルです。
zsh app-shells/zsh http://www.zsh.org/ 多くのユーザにインタラクティブシェルとして選ばれている、高度なシェルです。

さらなるシェルの選択肢については、app-shells パッケージカテゴリか、次のコマンドの出力を確認してください (eix が必要です):

user $eix -cC app-shells

設定

関連
環境をセットアップする方法についてはログインの記事も参照してください。

システムデフォルトのシェルを変更する

重要
/bin/shbash 以外のものに変更すると、例えば #!/bin/sh で始まるのに bash 特有のコードを使用しているような、よくない書き方をされているスクリプトでまれに問題が起こることがあります。bug #526268

システム管理者は app-alternatives/sh の USE フラグを使用して、システムデフォルトのシェルを変更することができます。このユーティリティパッケージは、/bin/sh を別の POSIX 準拠シェルへのシンボリックリンクで置き換えることによって、システムのシェルを変更します。

USE flags for app-alternatives/sh /bin/sh (POSIX shell) symlink

+bash Symlink to app-shells/bash
busybox Symlink to sys-apps/busybox
dash Symlink to app-shells/dash
ksh Symlink to app-shells/ksh
lksh Symlink to lksh from app-shells/mksh
mksh Symlink to mksh from app-shells/mksh

/bin/sh の特定の選択を設定するには、/etc/portage/package.use を使用してください:

ファイル /etc/portage/package.use
# /bin/sh を app-shells/dash にある dash へのシンボリックリンクにする
app-alternatives/sh -bash dash

ユーザのシェルを変更する

重要
fish などの一部のシェルは、ログインシェルとして直接設定すると問題が発生する場合があります。回避策については section#Caveats の記事を参照してください。

ユーザのデフォルトのシェル (ログインシェルとも呼ばれます) は、chsh コマンドを使用して個人単位で変更することができます。現在のユーザのログインシェルを変更するには、chsh を入力して、新しいシェルへのパスを入力してください。下の例では、 Larry the cow (Larry) という名前のユーザが、自身のログインシェルを /bin/bash から /bin/zsh に変更しようとしています:

user $chsh
larry のログインシェルを変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
	ログインシェル [/bin/bash]: /bin/zsh

chsh は、任意のユーザのログインシェルを変更するために、スーパーユーザアカウントから使用することもできます。

トラブルシューティング

表示が文字化けしている

条件によっては、シェルの出力が文字化けすることがあります。これを修復するための手順については端末エミュレータの記事を参照してください。

関連項目