シェル(shell)とは何か - bash / zsh / sh とカーネルの関係

シェル(shell)とは何か - bash / zsh / sh とカーネルの関係

シェルって何だろう?

「bash」「zsh」「シェルスクリプト」——コマンドを学び始めると、こういう言葉によく出会う。でも「シェルそのものが何なのか」は意外と説明されないまま進んでしまいがち。

この記事では、シェル(shell)とは何か、bash / zsh / sh は何が違うのか、そしてシェルとカーネルがどう協力しているのかを、ライナとライニー先輩の会話でやさしく整理していく。

この記事でわかること

  • シェル(shell)が「人間とOSの通訳」である理由
  • シェルとカーネルの役割分担
  • bash / zsh / sh の違いと、どれを使えばいいか
  • 今自分が使っているシェルを確認するコマンド
  • ログインシェルを安全に切り替える方法

1. シェルとは何か?

結論: シェルは、あなたが打ったコマンドを受け取ってOSの中心(カーネル)に伝え、結果を返す「通訳役」のプログラム。

リナ: ライニー先輩、そもそも「シェル」って何ですか? bashとかzshとか、名前は聞くんですけど…
ライニー先輩: いい質問だね。シェル(shell)は、リナが打ったコマンドを受け取って、OSの中心にいる「カーネル」に伝える通訳プログラムなんだ。
リナ: 通訳…?
ライニー先輩: そう。リナは「ls」って打つよね。でもカーネルは「ls」という文字をそのまま理解するわけじゃない。シェルがその文字を解釈して、「ファイル一覧を出すプログラムを実行して」とカーネルに依頼する。そして結果をリナが読める形で画面に返してくれる。
リナ: なるほど! 私とOSの間に立ってくれてるんですね。
ライニー先輩: その通り。「shell(貝殻)」という名前も、カーネル(kernel=核)を包む外側、という意味から来ているんだ。

シェル=コマンドインタプリタ

シェルの正式な役割は「コマンドインタプリタ」。打ち込まれた文字列を解釈し、対応するプログラムを起動する。ターミナル(画面)とシェル(解釈役)は別物だと意識すると混乱しにくい。

2. シェルとカーネルの関係は?

結論: カーネルがハードウェアを直接管理する「核」、シェルはその核と人間をつなぐ「外側の窓口」。役割が分かれている。

リナ: カーネルって、さっきから出てくるけど何者なんですか?
ライニー先輩: カーネルはOSの一番中心にある部分。メモリやCPU、ディスクといったハードウェアを直接管理している、まさに「核」だね。
リナ: じゃあ、私たちが直接カーネルに話しかけたらダメなんですか?
ライニー先輩: 直接は難しいんだ。カーネルは強力すぎて、扱いを間違えるとシステム全体が壊れかねない。だから間にシェルを置いて、安全に・人間にわかる言葉でやり取りするようになっている。
リナ: 受付の人を通して偉い人にお願いするみたいな感じですね。
ライニー先輩: まさにそのイメージ。流れを整理するとこうなるよ。
あなた → ターミナル → シェル → カーネル → ハードウェア
(入力)  (表示)    (解釈)  (実行)   (CPU/メモリ/ディスク)

3つの登場人物

  • ターミナル: 文字を入力・表示する「画面」
  • シェル: コマンドを解釈してカーネルに渡す「通訳」
  • カーネル: ハードウェアを動かすOSの「核」

3. bash / zsh / sh は何が違う?

結論: shは最も古い基本形、bashはその後継で最も普及、zshはbash互換で機能が豊富。中身は同じ「シェル」の仲間。

リナ: で、bashとかzshって何なんですか? ぜんぶシェルなんですよね?
ライニー先輩: そう、ぜんぶ「シェルの種類」なんだ。同じ通訳でも、得意なことや書き方が少しずつ違う。代表的な3つを見てみよう。
リナ: お願いします!
ライニー先輩: まず sh。これは一番古くからある基本のシェルで、「sh」は shell の略。今は多くの環境で、より新しいシェルへの別名(リンク)になっていることも多いよ。
リナ: bashは?
ライニー先輩: bash は "Bourne Again SHell" の略で、sh を強化した後継版。多くのLinuxで標準シェルとして採用されていて、いま一番よく使われている。困ったらまず bash、で大丈夫。
リナ: じゃあ zsh は?
ライニー先輩: zsh(Z Shell)は bash とほぼ互換性がありつつ、入力補完やテーマがすごく強力なシェル。macOS の標準シェルにもなっているね。見た目や使い勝手を育てたい人に人気だよ。
シェル 読み方 特徴 立ち位置
sh エスエイチ 最も基本的・最小限 古典・スクリプトの基準
bash バッシュ sh の後継、最も普及 多くのLinuxで標準
zsh ゼットシェル bash 互換+高機能 macOS 標準・カスタム派に人気

まず迷ったら bash

初心者のうちは bash で十分。Web上の解説やコマンド例も bash 前提のものが多く、学習がスムーズに進む。慣れてきたら zsh などへ乗り換えを検討すればいい。

各シェルのより詳しい比較は bash/zsh/fish の違いと選び方 でも解説している。

4. いま使っているシェルを確認するには?

結論: echo $SHELL でログインシェル、ps -p $$ で今動いているシェルがわかる。

リナ: 私、自分がどのシェルを使ってるのか分かってないかも…
ライニー先輩: 確認するコマンドがあるよ。まずはログインシェル(ログイン時に起動するシェル)を見てみよう。
echo $SHELL
/bin/bash

$SHELL には、ログイン時に起動するシェルのパスが入っている。上の例なら bash を使っている。

いま実際に動いているシェルを確認したいときは次のコマンドを使う。

ps -p $$
  PID TTY          TIME CMD
 2451 pts/0    00:00:00 bash

$$ は「いま動いているシェル自身のプロセスID」を表す特別な変数。ps -p $$ で、そのシェルが bash なのか zsh なのかを直接確認できる。echo $SHELL(設定上のシェル)と結果が違うこともあるので、両方知っておくと安心。

使える(インストール済みの)シェル一覧は次で確認できる。

cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/zsh
/usr/bin/zsh

ターミナルの使い方 のページでは、コマンドの打ち方そのものを基礎から練習できる。シェルの確認コマンドも実際に試してみよう。

5. ログインシェルを変えるには?

結論: chsh -s で変更できる。指定するシェルは /etc/shells に載っているものだけにする。

リナ: bash から zsh に変えてみたくなりました! どうやるんですか?
ライニー先輩: chsh(change shell)コマンドを使うよ。ただし、変更前にいくつか注意点があるんだ。

まず、変えたいシェルが /etc/shells に載っているか確認する(載っていないシェルは指定できない)。確認できたら次のように変更する。

chsh -s /bin/zsh

変更は次回ログインから反映される。

安全に試すコツ

  • /etc/shells載っていないパスを指定しない(ログインできなくなる原因になる)
  • いきなり変更せず、まず zsh とだけ打って一時的に起動し、使い心地を試してから決める
  • 元に戻したいときは chsh -s /bin/bash で bash に戻せる
リナ: なるほど。まず zsh って打って試してから、気に入ったら chsh で本採用ですね!
ライニー先輩: 完璧な順番だね。これでリナも、自分の手元のシェルを自信を持って選べるようになったよ。

まとめ

  • シェルは、人間のコマンドをカーネルに伝える「通訳役」のプログラム
  • カーネルはハードウェアを動かす「核」、シェルはその外側の窓口
  • sh は基本形、bash は最も普及した後継、zsh は bash 互換で高機能
  • echo $SHELLps -p $$ で今のシェルを確認できる
  • chsh -s でログインシェルを変更できる(/etc/shells の範囲で)

次に読む