web-dev-qa-db-ja.com

「ターミナル」、「シェル」、「tty」、「コンソール」の正確な違いは何ですか?

これらの用語は、大まかに使用すると、ほとんど同じことを指していると思います。

  • ターミナル
  • シェル
  • tty
  • コンソール

これらの各用語は正確に何を指しているのですか?

1278
Lazer

端末は電線の端にあり、シェルはカメの家、ttyは奇妙な略語、コンソールは一種のキャビネットです。

とにかく、語源的に言えば。

UNIXの用語では、短い答えは

  • 端末= tty =テキスト入力/出力環境
  • コンソール=物理端末
  • シェル=コマンドラインインタープリター

コンソール、ターミナル、ttyは密接に関連しています。もともとは、コンピューターとやり取りできる機器を意味していました。UNIXの初期の頃は、タイプライターに似た テレプリンター スタイルのデバイスで、テレタイプライターと呼ばれることもありました。 、または省略形の「tty」。 「ターミナル」という名前は電子的な観点から来ており、「コンソール」という名前は家具という観点から来ています。 UNIXの歴史のごく初期には、電子キーボードとディスプレイが端末の標準になりました。

UNIXの用語では、ttyは特定の種類の デバイスファイル であり、多数の追加コマンドを実装します( ioctls )読み取りと書き込みを超えて。最も一般的な意味では、端末はttyと同義です。一部のttyは、ハードウェアデバイスに代わってカーネルによって提供されます。たとえば、キーボードからの入力とテキストモード画面への出力、またはシリアルラインを介して送信と入力が送信されます。 pseudo-ttysと呼ばれることもある他のttyは、 terminal emulators と呼ばれるプログラムによって(薄いカーネルレイヤーを通じて)提供されます。 XtermX Window System で実行)、 Screen (レイヤーを提供する)プログラムと別の端末間の分離の例)、 Ssh (あるマシンの端末と別のマシンのプログラムを接続する)、 Expect (端末の相互作用をスクリプト化するため)など.

Wordターミナルは、通常キーボードやディスプレイなどのコンピューターと対話するための、デバイスのより伝統的な意味を持つこともあります。たとえば、X端末は シンクライアント の一種であり、キーボード、ディスプレイ、マウス、およびその他の人間の操作周辺機器を実際のより強力な別のコンピュータで実行されるアプリケーション。

consoleは一般的に物理的な意味での端末であり、ある意味では、マシンに直接接続されているプラ​​イマリ端末です。オペレーティングシステムでは、コンソールは(カーネルで実装された)ttyとして表示されます。 LinuxやFreeBSDなどの一部のシステムでは、コンソールがいくつかのttyとして表示されます(特別なキーの組み合わせでこれらのttyを切り替えます)。問題を混乱させるために、特定の各ttyに付けられる名前は、「コンソール」、「仮想コンソール」、「仮想端末」、およびその他のバリエーションにすることができます。

仮想端末が「仮想」である理由と、「実際の」端末は何/なぜ/どこにありますか?


Shell は、ユーザーがログインしたときに表示される主要なインターフェースであり、その主な目的は他のプログラムを起動することです。 (元のメタファーがシェルがユーザーのホーム環境であるということか、シェルが他のプログラムが実行されているものであるかはわかりません。)

UNIXサークルでは、シェルコマンドラインシェル を意味するように特化しており、起動したいアプリケーションの名前を入力し、その後に名前を続けますアプリケーションが動作する必要のあるファイルまたは他のオブジェクトのリスト、およびEnterキーを押します。他のタイプの環境では、単語「シェル」を使用しません。たとえば、ウィンドウシステムには、「シェル」ではなく、「 ウィンドウマネージャー 」と「 デスクトップ環境 」が含まれます。

多くの異なるUNIXシェルがあります。対話的に使用するための一般的なシェルには、 Bash (ほとんどのLinuxインストールのデフォルト)、 zsh (パワーとカスタマイズ性を強調)、 fish (シンプルさを強調する)。

コマンドラインシェルには、コマンドを組み合わせるためのフロー制御構造が含まれています。対話型のプロンプトでコマンドを入力することに加えて、ユーザーはスクリプトを作成できます。最も一般的なシェルには、 Bourne_Shell に基づく共通の構文があります。 「シェルプログラミング」について説明する場合、シェルはほとんどの場合、ボーンスタイルのシェルであることを意味します。スクリプト作成によく使用されますが、高度なインタラクティブ機能がないシェルには、 Kornシェル(ksh) および多くの ash バリアントがあります。ほとんどのUnixライクなシステムには、Bourneスタイルのシェルが/bin/sh、通常はash、ksh、またはbashとしてインストールされています。

UNIXシステム管理では、ユーザーのShellは、ログイン時に呼び出されるプログラムです。通常のユーザーアカウントにはコマンドラインシェルがありますが、アクセスが制限されているユーザーは 制限付きのShell またはその他の特定のコマンド(ファイル転送専用アカウントなど)。


ターミナルとシェルの間の分業は完全には明らかではありません。主なタスクは次のとおりです。

  • 入力:端末はキーを制御シーケンスに変換します(例: Left →\e[D)。シェルは制御シーケンスをコマンドに変換します(例:\e[Dbackward-char)。
  • 行編集、入力履歴、補完はシェルによって提供されます。
    • 端末は代わりに独自の行編集、履歴、および完了を提供し、実行の準備が整ったときにのみ行をシェルに送信します。この方法で動作する唯一の一般的な端末は、EmacsのM-x Shellです。
  • 出力:シェルは、「display foo」、「前景色を緑に切り替える」、「カーソルを次の行に移動する」などの指示を出します。ターミナルはこれらの指示に従って動作します。
  • プロンプトは純粋にシェルの概念です。
  • シェルは、(リダイレクトされない限り)実行するコマンドの出力を見ることはありません。出力履歴(スクロールバック)は純粋に端末の概念です。
  • アプリケーション間コピーペーストはターミナルから提供されます(通常、マウスまたは次のようなキーシーケンスを使用します) Ctrl+Shift+V または Shift+Insert)。シェルには、独自の内部コピー/貼り付けメカニズムもある場合があります(例: Meta+W そして Ctrl+Y)。
  • ジョブコントロール (バックグラウンドでプログラムを起動して管理する)は、ほとんどがシェルによって実行されます。ただし、次のようなキーの組み合わせを処理するのは端末です。 Ctrl+C 前景の仕事を殺すために Ctrl+Z 一時停止します。

端末またはコンソールは、ユーザーがホストと対話できるハードウェアの一部です。基本的に、テキスト画面と連動したキーボード。
最近では、ほぼすべての端末とコンソールが「仮想」のものを表しています。

端末を表すファイルは、伝統的にttyファイルと呼ばれます。 UNIXシステムの「/ dev」ディレクトリの下を見ると、仮想コンソール(例:Linux上のtty1)、仮想端末(例:pts/0)に接続された多くのttyファイルが見つかります。または物理的に接続されたハードウェア(たとえば、ttyS0は、ホストの最初のシリアルポートに接続されている場合、物理的なシリアル端末です)。

consoleは、ホストに(またはホストの一部に)物理的に接続されているハードウェアの一部である必要があります。これはシステムで特別な役割を果たします。これは、メンテナンスのためにシステムにアクセスする主要なポイントであり、一部の特別な操作はコンソールからのみ実行できます(例:single user mode)。 terminalは、ハードウェアのリモート部分である可能性があり、通常はそうです。

最後に、Shellcontrolling ttyを介してユーザーと対話し、ユーザーに他のプログラムを起動する方法を提供する特別なプログラムです(例:bash、csh、tcsh)。

ターミナルエミュレーターは、物理ターミナル(xterm、gnome-terminal、minicomなど)をエミュレートするプログラムです。

したがって、Linuxシステム(X11の下)で「テキストウィンドウ」を見ると、次のように見えます:端末エミュレータvirtual terminalttyファイルで識別され、その中でシェル

199
andcoz

短い説明:

コンソールは端末です。システムには1つのコンソールと、場合によっては複数の端末があります。コンソールは通常、たとえば起動中など、コンピューターを管理するための主要なインターフェイスです。

端末は、コマンドラインプログラムの入出力を送受信できるセッションです。コンソールはこれらの特殊なケースです。

TTYは本質的に疑似デバイスであり、それをカーネルリソースと呼びます。これは、特定の端末にアクセスするためにプロセスによって使用されます。 TTYは、シリアルポートなどのハードウェアに関連付けることも、仮想にすることもできます。たとえば、ユーザーがネットワーク経由でログインしたときに作成できます。

シェルは、プログラムの制御と実行に使用されるプログラムです。端末を介してインタラクティブに使用されることがよくあります。いくつかのシェルプログラムが存在し、Bashは間違いなく今日最も一般的に使用されているシェルです。他のシェルには、順不同で、ボーンシェル、Cシェル、ダッシュ、Tsch、Ksh、および人気の高まるzshが含まれます。他にもたくさんあります。

GUIがある場合は、ターミナルプログラムを使用して、サイズの変更可能なNiceボーダーを描画したり、スクロールバーを追加したり、ターミナルセッションのテキストをフォーマットしたりできます。これらは端末エミュレータと呼ばれることが多く、TABコンセプトを介して複数のセッションを処理できる場合があります。ターミナルエミュレータは、シェルを起動して、コマンドラインで対話的に作業できるようにします。

51
Johan

A[〜#〜] tty [〜#〜](ie[〜#〜] t [〜# 〜]ele[〜#〜] ty [〜#〜]pewriter)は、人々に聴覚障害者、難聴者、または言語障害者は、テキストメッセージの入力を許可することにより、電話を使用して通信します。通信するには、会話の両端にTTYが必要です。
または
[〜#〜] tty [〜#〜]isterminalテキストメッセージの入力に使用されます。


Shell:種子の外側の保護カバー部分、つまりカーネル。
または
システムの中心または重要な部分へのフレームワークまたは外部構造。
enter image description here


Consoleは、キーボードとモニターをコンピューターに物理的に接続することを意味します。

36
Premraj

すでに2つのすばらしい答えがありますが、「“ virtual terminal”」というフレーズに関する情報を追加したいと思います。一般的に、それは端末の外観/機能を提供するものを意味します。 e。 a terminal-emulator 広い意味で。しかし、Linux(1994–95)の初期には、一部の開発者によって 「仮想コンソール」(いくつかの無関係なユーザーインターフェイス) と同じ意味で使用されていました。この使用法はドキュメントで持続します。 2つの異なる用語がtty1、tty2…を指すために使用されました(使用されています)。今日(≈1996以降)「仮想端末」は pty -ベースの端末エミュレータを指す場合もあります。

Linuxのvt(テキストモードのシステムコンソールのドライバー)は、カーネルの最初の部分でした。当初はメインフレームへの接続に使用されていましたが、この意味で「仮想端末」であるため、この名前が付けられました。仮想コンソールを制御するコード vt.c にも存在します。 Linuxカーネルエンジニアは一貫してWordの「コンソール」を使用してtty1、tty2…を示し、それらに「vc_」プレフィックスを使用しました。たとえば、vc_allocate関数があります。一方、kbdconsole-toolsなどのユーザー空間ツールの開発者は、「仮想コンソール」(VC)と「仮想端末」(VT)を同じ意味で使用していました。 Ī̲ Andries E. Brouwer に連絡し、初期の開発者が使用した用語を明確にするように依頼しました(1994–95)。 Andriesがいくつかの回答を提供してくれました。彼は、VTとVCは同義であり、「分割できない」略語です。->一般に、仮想コンソールは仮想端末ですが、逆は当てはまりません。これらの「仮想端末」は仮想コンソールではありません疑似端末(Andriesが述べているように、これらはVTではありません)。仮想コンソールとは異なり、カーネルはコンソールアプリケーションの端末機能、疑似端末 コンソールアプリケーションとユーザー空間で実行される端末作成プログラムの間の通信を調整するためにPTY「デバイス」を使用 。例は、Xベースの端末エミュレータとsshdで、各ログインセッションの疑似端末。疑似端末は「コンソール」と呼ばれない場合があります。これは間違いです。

30
Incnis Mrsi
  • 端末=シェルセッションへの出力用のディスプレイと入力用のキーボードを提供するインターフェイス。

  • シェル=文字列として入力されたコマンドを実行するインタープリター

  • コンソール:実際に使用する2種類のコンソール

    • 物理コンソール=システムとの対話に使用されるハードウェアディスプレイとキーボード

    • 仮想コンソール=それぞれが独立したログインセッションをサポートできる複数の論理コンソールの1つ。

  • tty(テレタイプ、つまり端末)。 =端末は基本的に、inputおよびoutput.messageにテキストを使用する単なるユーザーインターフェイスデバイスです。

16
Rakib

あなたは歴史に飛び込む必要があります。

紙とキーボードを備えたタイプライターのようなデバイスがありました。これらはテレタイプ(「テレ」は「リモート」を意味するため、「リモートでタイプ」を意味します)または略してttysと呼ばれていました。 70年代には、ガラスttysと呼ばれるCRTモニターを備えたデバイスによって廃止されました。

どのコンピュータでも、ステータスとエラーを報告する(そしておそらくコマンドを受け入れる)方法が必要です。ほとんどの場合、コンピュータに直接接続されているconsoleを介して行われます。したがって、consoleには2つの意味があります。ステータスを報告するために使用されるものと、直接接続されるものです。

UNIXは対話型システムです。複数のユーザーがそれに接続してアプリケーションを起動する場合があります。最初のコンピューターは、そのためにテレタイプ(tty)を使用していました。各ユーザーは、シリアル回線接続でマシンにテレタイプを接続していました。このようなテレタイプはterminalと呼ばれます。 UNIXには、「端末の後ろに座っているユーザー」を処理する特別なサブシステムも用意されています。これは、最初の端末がテレタイプだったため、ttyとも呼ばれます。 Unixでは、各プロセスをttyに接続できます。つまり、端末の近くに座っているユーザーがいます。詳細は http://www.linusakesson.net/programming/tty/ を参照してください。

ユーザーは、カーネルにアプリケーションを実行するように指示する方法が必要です。 Shell(sh、bash、csh、kshなど)がそのために使用されます。 Shellttyで実行され、ユーザーからのコマンドを受け入れ、カーネルに実行を要求します一部のアプリ。

ただし、端末は常に物理的にマシンに接続されているわけではありません。端末がユーザーからのキーストロークを受け入れてどこかに送信することを「エミュレート」するアプリケーションがあるかもしれません(xtermとsshが良い例です)。カーネルには疑似端末というAPIがあります。したがって、あなたのttyは実際の端末ではなく実際にいくつかのアプリケーションに接続されているかもしれません。 XtermはX11を使用してテキストを表示し、sshはそのためにネットワーク接続を使用します。

IBM PCにはキーボードとビデオカードがあります(これらはコンソールと呼ばれることもあります)。 Linuxはさまざまなことを実行できます。

  • 「エラーとステータスを報告するエンジン」として使用:Linuxコンソール。カーネルにconsole =/dev/ttyS0を渡すと、COM1に接続されているものをコンソールとして使用し、そうでない場合はPCコンソールを使用します。
  • 端末をエミュレートするために使用する、いわゆる仮想端末(vty)。

また、コンソールで端末のエミュレートを停止し、一部のアプリに与えることもあります。アプリはビデオモードを切り替えて、それを排他的に使用する場合があります(X11またはsvgalibがそれを行う場合があります)。

だから、ここに現代の意味があります:

  • ターミナル:実際のユーザーがその後ろに座っているもの。物理端末(レア)または疑似端末(xterm、ssh)または仮想端末(Linuxではvty)
  • シェル:ユーザーがシステムと対話するのに役立つアプリケーション(bash、tcshなど)。
  • tty:端末をサポートする端末またはカーネルサブシステム。
  • コンソール:ステータスとエラーが報告されるもの(/dev/console)またはコンピューターに接続された物理キーボードとビデオディスプレイ。
12
user996142

ここに短い答えがあります-

Kernel-実際のハードウェアと直接通信する最新のオペレーティングシステムの最も内側の部分。

Shell-実際のカーネルのラッパー。コマンドを実行するときはいつでも、実際にはシェルと通信し、シェルは適切なカーネル命令を呼び出します。これとは別に、シェルはコマンド、適切なプログラムの検索、ファイル名の省略形、パイプコマンドなどを実行することができます。

ターミナル-初期のコンピューティングの時代では、コンピュータ(メインフレームとして知られている)は巨大でした。そのため、単一の処理ユニットを用意し、さまざまな場所から接続するのは簡単でした。ターミナルは、メインフレームに接続されたキーボードと出力デバイスを備えた実際のハードウェアです。

Console-OS管理のためにメインフレームに直接接続されている特殊なタイプの端末。

tty-メインフレームとの間でデータを送受信するために使用されるTeleTypewriter。ビデオ端末が利用可能になる前に使用されていました。しかし、従来はまだttyと呼ばれていました。命令もstty

長い詳細な答えはここにあります- ターミナル、コンソール、シェル、カーネル、コマンド-コンピューターのさまざまな部分

9

受け入れられた回答と The TTY demystified 記事は別として、私はこれら2つの記事を読むのが大好きでした。

これ 1つはNetBSDに基づいています。

Unixの石器時代に戻ると、コンピュータシステムはメインフレーム、点滅するライトの大きな箱で構成され、メモリ、大容量記憶装置、コンピューティングユニットがあり、ユーザーやオペレータが開始したプロセスを実行していました。ハードウェアは非常に高価だったため、システムは真のマルチユーザーシステムとして使用され、多くの人が同時にシステムを操作していました。それが通常持っていなかった-今日のUnixワークステーションとは異なり-固定モニターとキーボードでした。代わりに、コマンドをマシンに発行して出力を取得することは、最初にテレタイパーを使用し、後でCRT(陰極線管)端末を使用して、シリアル回線を介して行われました。テレタイパー-Unixの「tty」の出所-シリアルラインを介して押されたキーをホストに送信する電子タイプライターであり、内蔵プリンターを使用して、シリアルラインを介して文字ごとにテレタイパーに返信が返送されました。タイプライターのように紙に返信を書きます。

これ 1つはLinuxに基づいています。

端末は、通常のファイル、パイプ、およびソケットだけで実現できるものを超えた拡張入出力機能を提供するデバイスです。これらの機能は、人間がコンピュータとやり取りしやすくするように設計されており、互いに対話しようとするプログラムには役に立ちません。

7
Nishant

これについて一言見てみましょう...私は、UnixとLinuxをほぼ同義語で使用します。 Linuxの存在以前の歴史的なことを指す場合は、通常「Unix」と書きます。より最近の何か、またはLinuxのUnixフレーバーに固有の何かについて話す場合は、通常「Linux」と書きます。 」.

シェル

リストの中で、他と重複しない個別のコンセプトである唯一のものは、「シェル」です。シェルは、ユーザーと通信し、オペレーティングシステムの操作をユーザーに代わって実行することを目的とするプログラムです。

最も一般的なシェルは、ユーザーに何らかのプロンプトを送信し、ユーザーがテキストコマンドを入力するのを待って、そのコマンドを実行することからなる「コマンドライン」と呼ばれる手法を使用します。しかし、メニューベースのシェル、さらには(Windowsファイルエクスプローラーのような)グラフィカルシェルさえあります。

Unixでは、誰かが何かを「シェル」と呼ぶ場合、私が説明したように、それらはほぼ確実に何らかの形式のコマンドラインインターフェースを意味します。また、Unixの世界では、「シェル」と呼んでも、それが、後で説明するttyモデルを使用してユーザーと通信していない場合は、非常に奇妙です。

TTY

これはいくつかの異なる種類のものを参照する可能性があるため、混乱を招くものです。

Linuxには、「tty」と呼ばれる種類のデバイスがあります。それは、ユーザーであるか、ユーザーから何らかの方法で入力を受け取っているものとの双方向通信に使用されることが期待される抽象的なデバイスです。その抽象デバイスは、いくつかの物理デバイスに直接対応する場合があります。通信が表示され、ユーザーが入力できるウィンドウを誰かに提示するプログラムである場合があります。

しかし、この抽象的なデバイスが存在し、それが「tty」と呼ばれる理由は、「tty」が「teletype」の略であるためです。これは、紙に印刷するプリンターとキーボードを組み合わせた実際の物理デバイスでした。抽象「tty」デバイスがそれを使用しているプログラムに提示するモデルは、基本的に、もう一方の端にテレタイプがあるということです。あなたはそれに文字を送り、それらの文字はテレタイプに現れます。そこから文字を読み取る場合、それらの文字はキーボードで入力されたキーを表します。

古い紙プリンターベースのttyはすぐにビデオttyに取って代わられました。もちろん、それらにはロール紙はありません。そして、実際には、画面上の任意の文字を上書きすることが可能です。ただし、プログラムは、ある種の抽象的な「画面」インターフェイスをプログラムに提示するのではなく、さまざまなタスクを実行するエスケープシーケンスと呼ばれる特殊な文字ストリームを送信することが期待されています。通常、「カーソル」と呼ばれる抽象的なものが画面上を移動できます。送信された文字は、カーソル位置にあるものに置き換わり、カーソルは1文字先に移動します。多くの場合、エスケープシーケンスで印刷される文字の色も変更できます。

このモデルに従わない「ガラスtty」があり、そのためUnixの世界では扱いが不十分です。 IBM 3270ファミリーのビデオ端末は、このカテゴリーに分類されます。

Linux/Unixの人々が通常「シェルウィンドウ」と呼ぶのは、グラフィカルユーザーインターフェイスを使用したGlass ttyのエミュレーションです。内部的には、シェルウィンドウ内で実行されるプログラムは、仮想ttyデバイスと通信します。仮想ttyデバイスは、疑似ttyまたは疑似端末(別名pty)と呼ばれることもあります。

ターミナル

端末は、コンピュータと人間がインターフェースするはずの場所です。端末は完全にグラフィカルであり、プログラムがこれをエミュレートする機能を使用していても、ttyモデルに準拠していない場合があります。実際のすべての物理tty(ガラスまたはその他)は端末です。

コンソール

コンソールは、オペレーティングシステムが実行されているハードウェアに直接安全な方法で接続されることが一般的に想定されている特別な種類の端末です。

Linuxでは、コンソールは小さな方法で仮想化されているため、特別なキーストロークを使用して仮想コンソールを切り替えることができます。しかし、この仮想化は、カーネル内のソフトウェアによって実際のハードウェアで行われます。

「シリアルコンソール」と呼ばれるものを介してLinuxを使用する方法があります。これは、USBポートなどのシリアルポート(または一部の非常に小さいコンピューターや非常に古いコンピューターでは、RS-232ポート)を介してコンピューターに接続されているコンソールです。ある種の)およびかなり厳密な方法で古いテレタイプモデルに従います。

繰り返しになりますが、このコンソールは、誰かが接続できるようなネットワーク経由ではなく、直接物理的にコンピュータに接続されているという考えです。

5
Omnifarious