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

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

この記事でできるようになること

  • シェルとカーネルの役割の違いを説明できる
  • bash / zsh / sh が何を指すのかを区別できる

前提知識(先に読むと理解しやすい記事)

シェルって何だろう?

「bash」「zsh」「シェルスクリプト」——コマンドを学び始めると、こういう言葉によく出会う。でも「シェル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。そのものが何なのか」は意外と説明されないまま進んでしまいがち。

この記事では、シェル(shell)とは何か、bash / zsh / sh は何が違うのか、そしてシェルとカーネルOS の中核となるプログラム。ハードウェアとソフトウェアの橋渡しをする。がどう協力しているのかを、リナとライニー先輩の会話でやさしく整理していく。

この記事でわかること

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 は「変数」の一つだ。変数とは、値を入れておく名前付きの箱のこと。この箱には、ログイン時に起動するシェルのパスファイルやディレクトリの場所を表す文字列。(ファイルやフォルダファイルをまとめて整理する入れ物。Windows や macOS の「フォルダ」と同じもの。の住所。/bin/bash のように / で区切って書く)が入っている。上の例なら bash を使っている。

いま実際に動いているシェルを確認したいときは次のコマンドを使う。ps は、いま動いているプログラムを一覧表示するコマンドだ。

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

「プロセス」とは、いま動いているプログラム 1 つ分のこと。プロセスID はその 1 つずつに付く通し番号だ。$$ は「いま動いているシェル自身のプロセス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 で本採用ですね!
ライニー先輩: 完璧な順番だね。これでリナも、自分の手元のシェルを自信を持って選べるようになったよ。

リナ、echoでつまずく

結論: $SHELLは大文字と小文字を区別する。小文字の$shellと打つと変数が見つからない。何も表示されない。

リナ: 教わったとおりにやってみます。echo $shellっと…あれ、何も出ません。
echo $shell

リナ: 画面が空っぽです。どうしてでしょう?
ライニー先輩: 惜しい! 正しい変数名は大文字の$SHELLだよ。$shellという変数はないから、何も出なかったんだ。
echo $SHELL
/bin/bash
リナ: 大文字にしたら出ました! ミスなく打つのが大事なんですね。
ライニー先輩: そのとおり。シェルは打った文字をそのまま受け取るんだ。だから、間違えずに打つことが大事なんだよ。

ミニ課題

結論: 今日学んだコマンドを実際に打って確認しよう。

ライニー先輩: 今日学んだことを確認するために、ミニ課題に挑戦してみよう。

課題1: ログインシェルを確認しよう

やること: ログインシェルのパスを確認するコマンドを打とう。

ヒント1(方向づけ)を見る

ログイン時に起動するシェルは、ある変数に入っている。その変数を表示してみよう。

ヒント2(コマンド名)を見る

echoコマンドで$SHELLという変数を表示するよ。

答えを見る
echo $SHELL
/bin/bash

課題2: 今動いているシェルをプロセスから確認しよう

やること: 今動いているシェルのプロセスを確認しよう。

ヒント1(方向づけ)を見る

プロセスを表示するコマンドを思い出そう。合言葉は「今動いているシェル自身のプロセスID」だよ。

ヒント2(コマンド名)を見る

psコマンドを-p $$オプション付きで使うよ。

答えを見る
ps -p $$
  PID TTY          TIME CMD
 2451 pts/0    00:00:00 bash

課題3: 使えるシェルの一覧を確認しよう

やること: このシステムにインストールされているシェルの一覧を表示しよう。

ヒント1(方向づけ)を見る

シェルの一覧が書かれているファイルがある。中身を表示してみよう。

ヒント2(コマンド名)を見る

catコマンドで/etc/shellsファイルを表示するよ。

答えを見る
cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/zsh
/usr/bin/zsh

振り返り

結論: シェルは通訳役、カーネルは核。種類は bash / zsh / sh があり、確認と変更のコマンドまで押さえられた。

リナ: 今日わかったことをまとめます。シェルは私とカーネルの間に立つ通訳役で、bash や zsh はその種類なんですね。
ライニー先輩: よく整理できているね。そして自分がどのシェルを使っているかは echo $SHELLps -p $$ で確認できる。
リナ: 変えたいときは chsh -s ですね。でも、その前に zsh と打って試してから決めます!
ライニー先輩: 完璧だよ。次は ターミナルの使い方 で、コマンドの打ち方そのものを練習してみよう。

今日の3行まとめ

結論: 今日のポイントは、シェルとカーネルの関係、bash/zsh/shの違い、確認・変更コマンドの3つだ。

  1. シェルはカーネルとの通訳役 - コマンドを解釈してカーネルに伝え、結果を返す
  2. sh・bash・zsh はシェルの種類 - sh は基本形、bash は一番普及した後継、zsh は bash 互換で高機能
  3. 確認はecho $SHELLps -p $$、変更はchsh -s - 変更先は/etc/shellsにあるものだけ選べる

次に読む

この記事を共有

次の一手