ターミナルとシェル
ターミナルとシェルはともにコマンドを使う際に出てくる単語であるため混同しやすいですが、実際は全く異なるものです。
ターミナル
本来はユーザがコンピュータへ入出力を行う際に使用するハードウェアのことを指します。そこから転じて、ターミナルの動作をソフトウェアとして実装したターミナルエミュレータのことをターミナルと呼びます。「ターミナル」「ターミナルエミュレータ」「端末エミュレータ」などは同じもので、入出力のためのインターフェイスを提供するソフトウェアのことを指します。
ターミナルはあくまで入出力の画面を提供するソフトウェアであり、コマンドを解釈したり、カーネルに伝えたり、実行したりしているわけではありません。
例としてmacOSで使えるターミナルとしてはターミナル.app、iTerm2、kitty、Hyperなどがあります。
シェル
OSにはカーネルというOSとしての重要な機能を備えた核となるようなプログラムがあります。ただし、カーネルを直接ユーザが操作することはできません。そこでカーネルとユーザの間のインターフェイスを担っているのがシェルになります。シェルはカーネルとユーザの間の仲介をしてくれていて、ユーザからの入力を受け取って、それをカーネルに伝えてくれたり、実行結果を出力したりしてくれます。実際にコマンドを実行するのはカーネルになります。
シェルの種類としてはsh、bash、zsh、csh、tcshなどがあります。
まとめ
ターミナルは入出力の画面を提供しているソフトウェアで、人間で言うところの外見になります。シェルはユーザとカーネルの間の橋渡しをするソフトウェアで、外見というよりは中身の部分になります。イメージとしてはカーネルの周りにシェルがあって、シェルの表面にターミナルがあって、それに対して人間が操作するといった感じでしょうか。
すでに書いたようにターミナルとシェルにはそれぞれ種類があり、全く違うソフトウェアですので、好みのターミナル、好みのシェルを組み合わせて使うことができます。ターミナルとシェルを独立に変更できることからも、両者が全く異なるものであることがわかっていただけるかと思います。
コメント