シェル(shell)とは何か - bash / zsh / sh とカーネルの関係
この記事でできるようになること
- シェルとカーネルの役割の違いを説明できる
- bash / zsh / sh が何を指すのかを区別できる
前提知識(先に読むと理解しやすい記事)
シェルって何だろう?
「bash」「zsh」「シェルスクリプト」——コマンドを学び始めると、こういう言葉によく出会う。でも「シェル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。そのものが何なのか」は意外と説明されないまま進んでしまいがち。
この記事では、シェル(shell)とは何か、bash / zsh / sh は何が違うのか、そしてシェルとカーネルOS の中核となるプログラム。ハードウェアとソフトウェアの橋渡しをする。がどう協力しているのかを、リナとライニー先輩の会話でやさしく整理していく。
この記事でわかること
- シェル(shell)が「人間とOSの通訳」である理由
- シェルとカーネルの役割分担
- bash / zsh / sh の違いと、どれを使えばいいか
- 今自分が使っているシェルを確認するコマンド
- ログインシェルユーザーがログインした直後に起動される最初のシェル。を安全に切り替える方法
1. シェルとは何か?
結論: シェルは、あなたが打ったコマンドを受け取ってOSの中心(カーネル)に伝え、結果を返す「通訳役」のプログラム。
シェル=コマンドインタプリタ
シェルの正式な役割は「コマンドインタプリタ」。打ち込まれた文字列を解釈し、対応するプログラムを起動する。ターミナル(画面)とシェル(解釈役)は別物だと意識すると混乱しにくい。
2. シェルとカーネルの関係は?
結論: カーネルがハードウェアを直接管理する「核」、シェルはその核と人間をつなぐ「外側の窓口」。役割が分かれている。
あなた → ターミナル → シェル → カーネル → ハードウェア (入力) (表示) (解釈) (実行) (CPU/メモリ/ディスク)
3つの登場人物
- ターミナル: 文字を入力・表示する「画面」
- シェル: コマンドを解釈してカーネルに渡す「通訳」
- カーネル: ハードウェアを動かすOSの「核」
3. bash / zsh / sh は何が違う?
結論: shは最も古い基本形、bashはその後継で最も普及、zshはbash互換で機能が豊富。中身は同じ「シェル」の仲間。
| シェル | 読み方 | 特徴 | 立ち位置 |
|---|---|---|---|
| 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に載っているものだけにする。
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 があり、確認と変更のコマンドまで押さえられた。
echo $SHELL と ps -p $$ で確認できる。chsh -s ですね。でも、その前に zsh と打って試してから決めます!今日の3行まとめ
結論: 今日のポイントは、シェルとカーネルの関係、bash/zsh/shの違い、確認・変更コマンドの3つだ。
- シェルはカーネルとの通訳役 - コマンドを解釈してカーネルに伝え、結果を返す
- sh・bash・zsh はシェルの種類 - sh は基本形、bash は一番普及した後継、zsh は bash 互換で高機能
- 確認は
echo $SHELL・ps -p $$、変更はchsh -s- 変更先は/etc/shellsにあるものだけ選べる