Linux入門:コマンド操作のきほん
シェルとターミナルの違いを理解する
設定を書いたのに、効かない
設定ファイルにエイリアスを書き足したのに反映されない。日本語のファイル名が化ける。ssh で入ったときだけ色が違う。この手のトラブルは原因がまったく別の場所にあるのに、どれも「ターミナルの調子が悪い」と一括りにされがちです。
切り分けの鍵は、ターミナルとシェルが別物だと知っていることです。
窓の担当と、解釈の担当
| 名前 | 担当 | 具体例 |
|---|---|---|
| ターミナル | 文字の表示とキー入力 | iTerm2, Windows Terminal, GNOME Terminal |
| シェル | 入力を解釈してコマンドを実行 | bash, zsh, sh |
| カーネル | 実際にプロセスを作り、ファイルを読む | Linux kernel |
ターミナルは窓にすぎません。打った文字をシェルに渡し、返ってきた文字を画面に描いているだけです。実際にコマンドを動かしているのはシェルで、その先で本当に仕事をするのがカーネルです。
ssh でサーバーに入ったときは、手元に残るのは窓だけになり、シェルとカーネルは接続先のものに入れ替わります。手元の設定が向こうで効かないのは、そのためです。
自分が今どのシェルにいるか
ターミナル
ps -p $$
# PID TTY TIME CMD
# 4821 pts/0 00:00:00 bash$$ は、今動いているシェル自身の番号です。その番号を ps に渡すと、実体が bash なのか zsh なのかが分かります。
ターミナル
cat /etc/shells
# /bin/sh
# /bin/bash
# /usr/bin/zshこちらは、そのマシンで使えるシェルの一覧です。macOS は Catalina 以降 zsh が既定、多くの Linux では bash が既定になっています。設定ファイルの名前はシェルごとに違う(~/.bashrc と ~/.zshrc)ので、書き足す前に自分がどちらにいるかを確かめます。
崩れたときに、どちらを疑うか
- 文字化けや色がおかしいときは、ターミナル側の設定(フォントと文字コード)を疑う
- エイリアスやプロンプトが効かないときは、シェル側の設定ファイルを疑う
- コマンドが見つからないと言われたら、シェルが持つコマンドの探し先の設定を疑う
- 権限で弾かれたら、それはカーネルが持つ仕組みなので、設定ファイルをいくら直しても変わらない
どの層の話かを先に決めると、探す場所が 1 つに絞れます。ちなみに exit はシェルを終わらせるだけで、ターミナルの窓を閉じるのは別の操作です。ここが分かれていることも、同じ理由からです。
編集 ゆめさく編集部