こ こはシェル入門です。

シェル入門


 「sh」とはシェルと呼ばれる、UNIX系OSでの操作環境を構築する 代表的なスクリプトの一種です。UNIX系OSでは、bashやtcshといったシェルがよく使用されます。他にもkshや、zshなど、様々なシェル が存在します。ここでいうシェルとは、スクリプト言語とは違い、様々なシェル環境でのUNIX系OSの環境の操作に主眼を置いています。シェルにはロ グインシェルといわれるものと、非ログインシェルといわれるものの2つに大別することができます。ここではこのシェルについて説明していきたいと思いま す。



1.シェル覚え書き

 シェルを使用する上で知っておいてもらいたいことを幾つか述べたいと思います。
  1. シェルとは…
  2. シェルの特徴
  3. 基本操作法
ここでは上記リストに沿って、知っておいて欲しいことを少々説明していきます。



1.シェルとは…
 シェル(shell)とは、UNIX系OSでコマンド操作の基本的なルールを示すもののことです。このシェルには、sh、bash、tcshというよ うに実に様々な種類があります。OSの機能の一部であり、ユーザーからの指示を受けて解釈し、 プログラムの起動や制御などを行うプログラムのことを指します。このような機能はどのOSにもありますが、UNIX系OSのシェルの特徴はカーネルから完全に独立している点にあります。
 ご飯を食べるのに箸を使うか、フォークを使うか、もしくはスプーンを使うのか。それと同じで、コマンド操作を行うのにbashを使うか、tcshを使う か、shを使うのか、ということと考えてください。



2.シェルの特徴
 シェルの特徴として、ログインシェルと非ログインシェルの存在が挙げられます。ログインシェルとは、UNIX系OSにログインした時点で適用されるシェ ルのことです。非ログインシェルは、UNIX系OSにログインしてから、任意に適用するシェルのことです。ログインシェルとしては、sh、bash、 csh、tcsh、ksh、zsh等があります。非ログインシェルは、ash、esh、hush、osh、psh、sash等があります。これら様々な種 類 のシェルは、大別してB(Bourne)シェル系とCシェル系の2種類があります。Bシェル系は、sh、bash、ksh、zsh、Cシェル系はcsh、 tcshが代表的です。現在、よく使用されているシェルとしては、bashとtcshでしょうか。



3.基本操作法
 UNIX系OSでシェルを用いる場合、ターミナル上で「bash」や、「tcsh」と入力し、Enterキーを押すだけで、そのシェル環境を使用するこ とができます。ただしこれはPathが通っている場合に有効な方法です。「bash」なら絶対パスで「/bin/bash」、「tcsh」なら絶対パスで 「/bin/tcsh」と入力する必要があります。基本的にこれら様々なシェルは/binディレクトリに格納されています。自分の用いたいシェルのパスが 通っていない場合で、絶対パスが知りたい場合は「which」コマンドを用いましょう。「which bash」というように、「which」に続いて空白を入れた後、コマンド名を入力しEnterキーを押すことで、そのコマンドの絶対パスを知ることがで きます。
 Enterキーを押して新たに使用したシェル環境から抜け出す場合は「exit」コマンドを使用してください。元のシェル環境に戻ることだできます。



2.シェルの使い方

 シェルの使い方は次の通りです。
  1. シェル環境を確認する
  2. シェル環境を選択する
  3. シェル環境を設定する
 非常に簡単ですよね。しかし、Linux初めての人にとっては「?どういうこと?」と感じる人も少なくないと思います。書物やホームページでは、自分 が知らないことでも「知ってて当然」というように思われていて、あまり解説がされていない内容があったりします。ほんとに初めての人は「シェル?? な んのこと?」と思って当然です。…ということで、ここではそういう世の中の不親切な部分を補完していきます。補完補完…



1.シェル環境を確認する
 
ターミナル上で、「echo $SHELL」と入力しEnterキーを押すと、「/bin/bash」といったように自分のログインシェルが表記されます。ログインシェルとは、パソコ ンにログインした際に最初に適用されるシェル環境のことです。現在、広域なシェアを持つRed Hat系のLinuxでは標準で「bash」が設定されていることと思います。Red Hat系に限らず、Linux標準のシェルとしてbashはよく用いられています。
  1. ユーザが入力したコマンドをシェルが解釈する。  
  2. カーネルにそのコマンドを実行するための環境生成をシェルが要求する。(このシェルを親シェルとする)  
  3. カーネルは親シェルの複製(子シェル)を生成する。  
  4. 子シェルはユーザの入力したコマンドを自身に読込み、実行する。親シェルは子シェルの実行が終了するのを待つ。
  5. <>
  6. 子シェルは実行を終了すると親シェルに終了通知する。親シェルはユーザにプロンプトを返し、次の入力を待つ。
 通常、シェルはCUI(マンドラインユーザーインターフェース)を持つが、GUIを持つものは特にグラフィカル・シェルと呼ぶ。

 シェルはUNIXで 使用される呼称であり、より一般的にはコマンドインタプリタと(*)呼ぶ。しかし、Unixの普及やMS-DOSなど他のOSでも使用されたことにより現 在では一般的な名称となっている。ただし通常「シェル」と言った場合は、POSIX系のOSにおけるシェルを指すことが多い。
 UNIXライクなOSでは、シェルがユーザプログラムとして実装されており、また好きなシェルを差し替えて使用することができ、このことは UNIX発表当時においてはUNIXの特徴の一つとなっていた。


2.シェル環境を選択する

 ターミナル上で、「cat /etc/shells」と入力しEnterキーを押すと、
[inoue@kurumi inoue]$ cat /etc/shells
/bin/sh
/bin/bash
/bin/bash2
/bin/tcsh
/bin/csh
/bin/ksh
/bin/zsh
というように、現在の自分のマシン環境で使用可能なシェルの一覧を取得することができます。自分にあったシェルを選択しましょう。



3.シェル環境を設定する
 「/etc/passwd」という設定ファイルで、自分のログイ ンシェルを確認、もしくは直接変更することができます。また、直接設定ファイルを編集しなくとも、「chsh」というコマンドを用いてログインシェルを変 更することもできます。むしろ、シェル環境を変更するにはこのコマンドを用いる方が簡単でしょう。OS    によっては、「chsh」ではなく、「ypchsh」でないとログインシェルが変更できない場合があるのでこの点にはご注意ください。このコマンドによっ てユーザーがパソコンにログインして初めに実行されるコマンドが決定します。 スーパーユーザーはどのユーザーのアカウントのログインシェルも変更することができます。一般ユーザーは自分のアカウントのログインシェルのみ変更するこ とができます。このコマンドは次回にログインした際から機能を発揮します。
 「chsh」を例にとって、ログインシェルの変更の流れを追うと、初めにターミナル上で「chsh」と打ちます。すると「Old shell: /bin/csh」というように、現在使用しているシェルのフルパスが表示されます。次いで「New shell:」と表示されるのでそこに自分の使用したいログインシェルを打ち込んでEnterキーを押せば、ログインシェルの変更は完了です。
 PATHさえ通っていれば、「bash」、「tcsh」とターミナル上でコマンドを打つだけで、対応したシェル環境に一時的に移行することができます。 PATHが通っていない場合は、「which」コマンドを使いましょう。「which bash」というようにコマンドを打つと、「/bin/bash」と表示されます。「which」コマンドを使用すれば、コマンドのフルパスがわかるの で、これで「/bin/bash」とターミナル上で打てば、「bash」環境でコマンドを使用することができるようになります。一度打ったシェル環境から 抜け出すには「exit」コマンドを実行すればよいです。



3.シェルの種類

 ここでは、数多く存在するシェルの利点・欠点・特徴・操作法等を比較検討し、皆さんに合ったシェルを捜す手助けをしたいと思います。
  (管理人としてはbashをお勧めします。zshも捨てがたいですが…)
使用OSによ り、若干その特徴・操作法は異なります!!しかも呼称は勝手に筆者が呼んでいる読み方です。



名称
sh
呼称
シェル
特徴
シェルの中で最も基本的なものがこのshです。
shは標準のシェルであり、 POSIX(IEEE Std1003.2) で標準化されている。 全てのシステムの shで完全にPOSIX 対応しているわけではない。そして対話機能が貧弱なため、ログインシェルとして使用されることは少ない。主にスクリプトとして使用されている。
ほぼ全てのUNIX環境に存在するために、シェルスクリプトはsh構文で記述することが一般的である。
(システムがハングアップした後の再起動時に fsck が失敗したりすると/bin/shで作業する必要があるときもある)。 FreeBSDなどではashと呼ばれる機能強化したものが使用されています。 kshやbash が/bin/shとして使われているシステムもある。



名称
ash
呼称
エー シェル
特徴
Bourne Shell互換のシェル。Kenneth Almquistにより作られたbsh(元祖シェル)互換のコンパクトなシェル。FreeBSDやLinuxでときどき使われている。



名称
bsh(bourne shell)
呼称
ビー シェル(ボーンシェル)
特徴
AT&Tで研 究開発されたシェル。Steven R. Bourneによって書かれたため、Bourne Shellと呼ばれる。
最も標準的なshell。ほとんどのPOSIXなOSに入っていると思われる。対話機能が貧弱なのでシェルスクリプトで使う事が非常に多い。動作速度は極 めて速いです。
BSDでは機能拡張したashがあります。



名称
bash(bourne again shell)
呼称
ビー エーシェル、バッシュ(ボーンアゲインシェル)
特徴
Bourne Again SHellの略。Bourne Shellの改良版。bshの上位互換シェル。GNUシステム用の標準シェルとしてMIT(マサチューセッツ工科大学)のBrian Fox氏やChet Ramey氏が開発したシェルで、機能的にはkshとよく似ており、無償であるのが特徴で す。Bourne Shellの派生型としては最も有名で、多くのUNIXシステムに搭載されている。また、Linuxでは標準のシェルとして採用されている。

bashは、1988年1月10日にBrian Foxが記述した初版が発表され、Brian Fox氏が1993年まで改良を続けた。後にChet Rameyが加わり、現在の公式管理者となっている。1996年12月23日、多くの新しい機能が取り込まれたbash-2.0がリリースされた。この バージョンでは、さまざまな標準への対応も強化されている。

bashの特徴。コマンドライン編集。コマンドライン補完。コマンドライン入力履歴、bash初期化スクリプト。bsh(元祖シェル)にコマンドライン編 集機能を追加したもので、GPLで配布されている.

GNUプロジェクトによって開発されたシェル。Korn Shellの演算機能、cshの対話機能などを取り込んだ、高機能なシェル。GNUプロジェクトの標準シェルになっている。しかし、サイズが大きくまた若 干遅いとされる。

コマンドラインでの編集機能が充実しているため、kshとはよく似ている。GNUのソフトとして配布されており、 特にLinuxで標準シェルとして採用されていることで広まっている。 bshで貧弱だった、 ユーザーインターフェイスとしての機能を強化するため、 ヒストリー機能、エイリアス等が追加されている。

bashにはTabキーによる補完機能というものがあります。例えば、「ba」と入力した時点でTabキーを2回押すと、「ba」ではじまるコマンドの一 覧が表示されます。例えば次のようにです。
banner    barstat   basename  bash      bashbug   batch
ここで「bat」まで入力してTabキーを2回押すと、「batch」と残りの文字が自動的に補完されます。これはコマンドだけでなく、ファイル、ディレ クトリにもこのTabキーによる補完機能が実行できるので、コマンドの入力ミスや、存在しないコマンドの実行など、間違えた操作を未然に防ぐことができま す。是非ともこの「Tabキーによる補完機能」を使いこなしましょう。

bashにはコマンドライン編集機能というものがあります。慣れるまで時間がかかるかもしれませんが、覚えると非常に便利なので、挑戦してみましょう。

bash でのショートカットキー一覧
コマン ドプロンプト上でのキー操作
キー操 作結果
「Ctrl」+ 「b」
1文字分カーソルを 左に移動する
「Ctrl」+ 「f」 1文字分カーソルを 右に移動する
「Ctrl」+ 「a」 カーソルを行頭に移 動する
「Ctrl」+ 「e」 カーソルを行末に移 動する
「Ctrl」+ 「u」 行頭からカーソル位 置の文字まで削除する
「Ctrl」+ 「k」 カーソル位置から行 末の文字まで削除する
「Ctrl」+ 「h」 カーソル位置の左の 1文字を削除する
「Ctrl」+ 「d」 カーソル位置の文字 を削除する




名称
bash2
呼称
ビー エーシェルトゥー、バッシュトゥー
特徴




名称
csh
呼称
シー シェル
特徴
C言語風の文法が特徴のシェル。カリフォルニア大学バークレイ校の William Joy氏が中心になって開発 されたシェルとして有名。Bill Joy氏が開発したシェルで、bshよりも高機能でジョブ制御やエイリアス等の機能を持っている。名前の由来はBシェルの次に作られたからという説と、 文法がC言語に似ているからという説がある。
対話機能に優れ、演算機能や配列/文字列操作、C言語のような構文も扱うことができる。
BSD系の標準shellである。FreeBSDでは4.xから標準がtcshとなっている。
初めてヒストリやエイリアス機能を持ったshellでもある。
スクリプト機能は貧弱である。
BSD UNIXで採用されたシェル。C言語風の構文を持ち、 初めてヒストリ機能やエイリアス機能が導入されたシェルである。 スクリプト言語としては Bourneシェル系より劣っている。 デフォルトのログインシェルとして設定されているシステムも多いものの現在では使用されなくなりつつある。



名称
ccsh
呼称
シー シーシェル
特徴
C言語風のシェル



名称
dish
呼称
ディッ シュ
特徴
 分散型シェル。



名称
Esh
呼称
イー シェル
特徴
Lisp風シェル。



名称
fosh
呼称
フォッ シュ、エフオーシェル
特徴
非常に軽い、インタラクティブシェル。



名称
Gsh
呼称
ジー シェル
特徴
グラフィカルなシェル(必要用件Tcl/Tk8.0環境)



名称
Gush
呼称
ガッ シュ、ジーユーシェル
特徴
GNUユーザー用のシェルと思われる。(推測)



名称
Jsh
呼称
ジェイ シェル
特徴
Java用のシェル。



名称
kiss
呼称
キス
特徴
the Keep It Simple Shellの略。
非常にシンプルで簡素なシェル。



名称
ksh(korn shell)
呼称
ケー シェル(コーンシェル)
特徴
Korn SHellの略。System V標準のシェル。Bourne Shellの機能の拡張版。bshの上位互換シェル。David G. Korn氏が開発したシェルで、IEEE1003.2 POSIXシェル標準への準拠が強化されている。Kシェルは商用プロダクトである。David G. Kornによって開発され、cshlのように、組み込み演算機能、配列、文字列操作などのプログラミング機能がある。商用なのでLinuxユーザーにとっ ては疎遠である。
ヒストリ機能やコマンドライン編集機能が追加されている。 SystemV 系では標準であり商用だが、 パブリックドメインのpdkshもある。
人気が無いためか、あまり使われていない。



名称
lsh
呼称
エル シェル
特徴
MS-DOS風のシェル。



名称
orabash
呼称
オラ ビーエーシェル、オラバッシュ
特徴
Oracle(SQL:データベース)への接続機能を組み込んだ bash。



名称
pash
呼称
パッ シュ
特徴
フルスクリーンシェル。



名称
pdksh
呼称
ピー ディーケーシェル
特徴
Public Domain Korn SHellの略。kshのクローン。Bourne Shellの機能の拡張版。



名称
pgbash
呼称
ポスト グレビーエーシェル、ポストグレバッシュ、ピージービーエーシェル、ピージーバッシュ
特徴
PostgreSQL Bourne Again Shellの略。bashにPostgreSQL用のインターフェイスを組みこんだシェル。SQL文をシェルコマンドとして実行可能。



名称
pqbash
呼称
ピー キューバッシュ、ポストグレバッシュ
特徴
bashにPostgreSQLへの接続機能を組み込んだもの。
pgbashのアイデアの元。



名称
rsh(Restricted Shell)
呼称
アール シェル、リストリクティッドシェル
特徴




名称
sash(Standalone Shell)
呼称
サッ シュ、スタンドアロンシェル
特徴




名称
scsh
呼称
エス シーシェル
特徴
scheme shellの略。



名称
smash
呼称
スマッ シュ
特徴
small shellの略。
非常に小さなシェルとして有名。



名称
tcsh(TENEX C Shell)
呼称
ティー シーシェル、テネックスティーシェル
特徴
Cシェルの機能拡張版。コマンド、ファイル名の補完機能、コマンドライ ン編集機能などがcshに比べ追加されている。
BSD系の標準shellである。プログラマブル補完機能を持つ。スクリプト機能は貧弱。
C シェルを元に機能拡張したシェル。 エラーメッセージの日本語カタログが面白いのが最大の特徴かもしれません。



名称
tksh
呼称
ティー ケーシェル
特徴
kshにTclを組み合わせて作られたシェル。



名称
tsh
呼称
ティー シェル
特徴
The Icon-Throwing Shellの略。
グラフィカルなシェル。
アイコンを投じるような処理を行うことができるのが特徴。



名称
vsh
呼称
ヴイ シェル、ヴィジュアルシェル
特徴
ヴィジュアルシェル。



名称
vshnu
呼称
ヴィ ジュアルシェルニュー
特徴
a visual shell for novice usersの略。



名称
zsh
呼称
ゼット シェル
特徴
csh+ksh という形で開発された究極・最強を謳ったのシェル。sh、bash、csh、tcshの機能をほぼ網羅している。
非常に強力なshellです。
Bシェル系の構文とCシェル系の構文の両方をサポートしています。
bash,kshの機能にくわえて、プログラマブル補完機能や独自のファイル名展開機能があります。
ハッカーを自称する人に人気があるようです。
多機能ゆえ、他の物とくらべると多少動作が重いかもしれません。
ksh, bash のほとんどの機能に加えて プログラマブル補完機能や独自のファイル名展開機能を持っています