Terminal
shell

シェル、ターミナル、コンソール、コマンドライン

More than 3 years have passed since last update.

いろいろ混同されがちなやつ。筆者もまったく混乱してないとは主張しがたい。

この記事は初版を2014年1月に書きはじめ、いまのバージョンを2015年4月頃に書いてたけど、擬似端末/仮想コンソールあたりの理解が怪しいのでお蔵入りになってました。ので、そのあたりの説明は微妙。

コマンドライン(command-line)

文字でコマンドを打ち込んで操作するインターフェイスのこと。

シェル(shell)

人間様がOSを操作するためのインターフェイスのこと。貝のようにOSの(カーネル)を守ってるからシェルと呼ぶんだって噂。

大別すると コマンドラインシェルグラフィカルシェル がある。

Unixシェル

UNIXやUNIX-likeなOSで利用されるコマンドラインシェル。現代ではGNU BashZ Shellなどが知られる。

Shellにもいくつかの系統があるが、主にBシェル(Bourne Shell)の系統が主流。BashもBシェルの流れをくむ。

Unixシェルは入力された文字列をプログラムとして解釈するコマンドラインインタプリタとしての機能を持ち、シェルコマンドを羅列したテキストファイルを シェルスクリプト として実行することができる。

Unixのグラフィカルシェル

X Window Systemの上に構築されたシェル。どこからどこまでを担当するものをシェルと呼ぶのか明確な定義はないので、デスクトップ環境ウィンドウマネージャと同義だと思っても概ね間違ってなさそうな感触がある。

あまりシェルと呼ばれることはないけどGNOMEKDEがメジャーどころで、シェルと呼ばれたりするのあUbuntuのUnityGNOME Shellなんかがある。 (つまるところ、よくわからんのよね)

Windowsのシェル

コマンドラインシェルとしてcmd.exe(コマンドプロンプト)やPowerShellが、グラフィカルシェルとしてExplorerがある。

CygwinMSYS2でUnixシェルをインストールすることもできる。

コマンドラインシェルとしてBashやZShellもインストールできるほか、Windows用に開発されたNYAOSといふものもある。

Explorerは重い! と言ってグラフィカルシェルも代替シェルに入れ替へるひとたちも居るけど、まあそのあたりは自己責任で。

端末(terminal)

単語としては単に「末端」とか「終着駅」みたいな意味なんだけど、この場合は遠隔地からコンピュータを利用する機械のこと。「ビデオ端末(video terminal)」とも。

420px-Televideo925Terminal.jpg

↑みたいな機械。写真は http://commons.wikimedia.org/wiki/File:Televideo925Terminal.jpg より。(パブリックドメイン)

2000年以降に初めてぱそこんに触れた筆者にはむかしむかしのことはよくわからないのだけれど、ミニコンピュータって種類の電算機が隆盛を誇ってた時代があって、VAX/VMSってコンピューターとOSがあった時代もあったそうな…

端末エミュレータ

端末をとりまく環境は極めてややこしい。

MacOSXの「ターミナル(Terminal.app)」とかLinuxのGnome Terminalとか、WindowsのTeraTermなどは、端末エミュレータなどと分類される。

「エミュレータ」を名乗ってるからには、↑の写真みたいな機械の「まねっこ」をしてる。

具体的にはVT100シリーズ↓が参照されることが多い。

220px-Terminal-dec-vt100.jpg

この手の技術に関しての日本語での入門的な記事はText-Terminal-HOWTOにあるので、興味があれば読まれたい。

コンソール

「ターミナル」がコンピュータを遠隔利用するための機械なのに対して、コンソールは直接操作するための装置。しかし現代のコンピューターではディスプレイやキーボードを直接繋いだり、ノートブック型やタブレット型のようにそもそも一体化してるので何がなんだかといふ感じだ。

このあたり、擬似端末とか仮想コンソールとか非常にややこしい概念がいろいろ登場するのだけれど、はっきり言って筆者の説明能力を超えるので割愛したい。

OSやサーバー管理以外の文脈で俗に「コンソール」と呼ばれるものは「ターミナル」を指すことが多い気がする。

シリアルコンソール

tty

ttyはもともと Teletype の略。

(このあたりの理解がぁゃιぃので割愛)

まとめ

非常にざっくりとまとめると

  • 標準出力を文字として表示したり、キーボード入力を取得したりするのが ターミナル(エミュレータ)
  • 主にターミナルを介してコマンドを打ち込んでプログラムを実行するのが Unixシェル
  • ターミナルにコマンドを打ち込む行が コマンドライン (そのまんま)
  • Unix系OSでのターミナルエミュレータは 擬似端末 を通じてシェルとやりとりする

誤解されやすいことベースでまとめると

  • ターミナルはコマンドを解釈しない (それは シェル)
  • ターミナルのショートカットキーとシェルのショートカットキーは別
    • Ctrl+a, Ctrl+e, Ctrl+rなどはシェルが解釈する (正確にはBashではreadlineが)
    • MacのTerminal.appなどのCommand+t(新規タブ), Command+v(テキスト貼り付け)などはターミナルが解釈する
  • パーソナルコンピューターにはコンソールと呼ぶべきものは ない
    • あるいはコンピューター(計算機)とコンソール(制御卓)が一体化してる
    • 俗に「ターミナル」が「コンソール」と呼ばれることが多い気がする
    • コンソールターミナルユニット for VT100のような製品もある

ターミナルに関する話題はかなり興味深くて、224桁問題 - SGR(1006)形式の拡張マウストラッキングについて - Qiitaのような、近年になって普及が進んだ仕様もあり目が離せない。

あとがき

この記事はターミナルの検索結果 - Qiitaが悲しいことになってるので書いた。これで明日から 新入社員相手にどや顔できますね コンソール・シェル・ターミナルを混同しなくなりますね。