シェル
シェルは、ユーザにテキストベースのインターフェースを提供する、コマンドラインインタプリタです。仮想コンソール内の (または、シリアル接続を介した端末エミュレータ内の) コマンドラインインターフェースとして、またはリモートシェルとして (例えば 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/sh を bash 以外のものに変更すると、例えば
#!/bin/sh
で始まるのに bash 特有のコードを使用しているような、よくない書き方をされているスクリプトでまれに問題が起こることがあります。bug #526268システム管理者は app-alternatives/sh の USE フラグを使用して、システムデフォルトのシェルを変更することができます。このユーティリティパッケージは、/bin/sh を別の POSIX 準拠シェルへのシンボリックリンクで置き換えることによって、システムのシェルを変更します。
USE flags for app-alternatives/sh /bin/sh (POSIX shell) symlink
/bin/sh の特定の選択を設定するには、/etc/portage/package.use を使用してください:
# /bin/sh を app-shells/dash にある dash へのシンボリックリンクにする
app-alternatives/sh -bash dash
ユーザのシェルを変更する
ユーザのデフォルトのシェル (ログインシェルとも呼ばれます) は、chsh コマンドを使用して個人単位で変更することができます。現在のユーザのログインシェルを変更するには、chsh を入力して、新しいシェルへのパスを入力してください。下の例では、 Larry the cow (Larry) という名前のユーザが、自身のログインシェルを /bin/bash から /bin/zsh に変更しようとしています:
user $
chsh
larry のログインシェルを変更中 新しい値を入力してください。標準設定値を使うならリターンを押してください ログインシェル [/bin/bash]: /bin/zsh
chsh は、任意のユーザのログインシェルを変更するために、スーパーユーザアカウントから使用することもできます。
トラブルシューティング
表示が文字化けしている
条件によっては、シェルの出力が文字化けすることがあります。これを修復するための手順については端末エミュレータの記事を参照してください。
関連項目
- GNU Coreutils — provide many of the basic commands of the UNIX(like) OS.
- Login — logging in to a shell, and setting up the default environment.
- Recommended tools — lists system-administration related tools recommended for use in a shell environment (terminal/console)
- Terminal emulator — ビデオ端末を別のディスプレイアーキテクチャの中で (例えば X の中で) エミュレートします。
- util-linux — contains userspace utilities for Linux-specific system management, including device control, terminal logins, process management, and tty messaging.