ターミナル、コンソール、シェル、コマンドラインの違いは何ですか?
簡潔な答え:
長い答え:
コンソールと端末は密接に関連しています。もともとは、コンピュータとやり取りできる機器のことでした。Unixの初期の頃は、 テレプリンター -タイプライター(テレタイプライターとも呼ばれる)、または略して「tty」に似たスタイルのデバイスを意味していました。 。 「端末」という名前は電子的な観点から付けられ、「コンソール」という名前は家具の観点から付けられました。 UNIXの歴史のごく初期に、電子キーボードとディスプレイが端末の標準になりました。
UNIXの用語では、terminalは特定の種類の デバイスファイルです。 は、読み取りおよび書き込みを超える多くの追加コマンド( ioctl )を実装します。一部の端末は、ハードウェアデバイスに代わってカーネルによって提供されます。たとえば、キーボードからの入力とテキストモード画面への出力、またはシリアル回線を介した入出力が提供されます。擬似端末または擬似端末と呼ばれることもある他の端末は、 terminal emulators というプログラムによって(シンカーネルレイヤーを介して)提供されます。ターミナルエミュレータには、次の種類があります。
Wordterminalは、コンピューター、通常はキーボードやディスプレイと対話するデバイスのより伝統的な意味を持つこともできます。たとえば、Xターミナルは一種の シンクライアント であり、その唯一の目的はキーボード、ディスプレイ、マウス、および場合によっては他の人間とのやり取りの周辺機器を駆動し、実際のアプリケーションは別のより強力なコンピューター。
consoleは、一般的に物理的な意味での端末であり、何らかの定義により、マシンに直接接続されたプライマリ端末です。コンソールは、オペレーティングシステムからは(カーネル実装)端末として表示されます。 LinuxやFreeBSDなどの一部のシステムでは、コンソールは複数の端末(tty)として表示されます(これらの端末間で特別なキーの組み合わせが切り替わります)。問題を混乱させるために、各特定の端末に付けられた名前は、「コンソール」、「仮想コンソール」、「仮想端末」、およびその他のバリエーションにすることができます。
仮想端末が「仮想」である理由、および「実際の」端末は何/なぜ/どこにあるのかを参照してください。 。
command lineは、ユーザーがコマンド(文字のシーケンスとして表されます。通常はコマンド名の後にいくつかのパラメーターが続きます)を入力し、 Return そのコマンドを実行するキー。
Shell は、ユーザーがログインしたときに表示される主なインターフェイスであり、主な目的は他のプログラムを起動することです。 (元の比phorがシェルがユーザーのホーム環境であるかどうか、またはシェルが他のプログラムが実行されているものであるかどうかはわかりません。)
UNIXサークルでは、Shellは、開始したいアプリケーションの名前を入力し、その後に名前が続くことを中心に、 コマンドラインシェル を意味するように特化しています。ファイルまたは他のオブジェクトのアプリケーションが動作する必要があり、Enterキーを押します。他のタイプの環境(最近のGnome Shellの例外を除く)は、通常、「シェル」という単語を使用しません。たとえば、ウィンドウシステムには、「シェル」ではなく「 ウィンドウマネージャ 」および「 デスクトップ環境 」が含まれます。
多くの異なるUNIXシェルがあります。 Ubuntuのデフォルトのシェルは Bash です(他のほとんどのLinuxディストリビューションと同様)。人気のある代替手段には、 zsh (パワーとカスタマイズ性を重視)および fish (シンプルさを重視)があります。
コマンドラインシェルには、コマンドを組み合わせるためのフロー制御構造が含まれています。対話型プロンプトでコマンドを入力することに加えて、ユーザーはスクリプトを作成できます。最も一般的なシェルには、 Bourne_Shell に基づく共通の構文があります。 「Shell programming」について議論するとき、シェルはほとんど常にBourneスタイルのシェルであると暗示されています。スクリプトによく使用されるが高度なインタラクティブ機能を欠くシェルには、 Korn Shell(ksh) および多くの ash バリアントがあります。ほとんどのUnixライクなシステムには、Bourneスタイルのシェルが/bin/sh
としてインストールされており、通常はash、ksh、またはbashです。 Ubuntuでは、/bin/sh
は Dash であり、ashの変形です(bashよりも高速でメモリ使用量が少ないために選択されます)。
UNIXシステム管理では、ユーザーのShellは、ログイン時に呼び出されるプログラムです。通常のユーザーアカウントにはコマンドラインシェルがありますが、アクセスが制限されているユーザーは 制限付きシェル またはその他の特定のコマンド(ファイル転送専用アカウントなど)。
ターミナルとシェル間の分業は完全には明らかではありません。主なタスクは次のとおりです。
\e[D
)。シェルは、制御シーケンスをコマンドに変換します(例:\e[D
→backward-char
)。M-x Shell
です。foo
」、「前景色を緑に切り替える」、「カーソルを次の行に移動する」などの指示を出します。端末はこれらの指示に基づいて動作します。視覚的な表現。
座って上司のように働くことができるもの。
多くのことを行うハードウェア。
コンソールのもう1つの例は、スーパー任天堂などのビデオゲームコンソールです(ここではActraiserをプレイできます)
基本的にコマンドを実行するためのアプリケーション。
基本的にコマンドを入力するもの。
ターミナル :技術的には、ターミナルエミュレータとも呼ばれるターミナルウィンドウは、コンソールをエミュレートするグラフィカルユーザーインターフェイス(GUI)のテキスト専用ウィンドウです。
私たちの言葉では、GUIアプリケーションから、ユーザーのコンソールにアクセスできます。
コンソール :コンピューターのコントロールを含む計器盤
Shell :Shellは、Linuxおよびその他のUnixライクなオペレーティングシステム用の従来のテキストのみのユーザーインターフェイスを提供するプログラムです。
Command-Line :コマンドラインは、コンピューターモニター(通常はCRTまたはLCDパネル)の全テキスト表示モードでコマンドプロンプトの右側のスペースユーザーがコマンドとデータを入力する
ここでの答えはとても良いようです。しかし、私の味にはあまりにもドライで技術的であるため、試してみます。
Terminalは何かの終わりであり、そこで終了します。たとえば、ある都市で地下鉄に乗る場合、降りる駅はターミナルです。または、空港では、人々が目的国に到着したときに出てくる場所がターミナルと見なされます。空港のターミナルが今日、人々を乗せる場所と飛行機から降りる場所の両方である理由は、明らかに経済的な理由です。
コンピューターの目的は、データを取得し、それを使って結果を吐き出すことです。したがって、端末は、計算の結果を取得できる任意のデバイスです(たとえば、画面)。最初のコンピューターでは、通常、入力(キーボード)と出力(画面)が単一のデバイスとして使用されていました。そのため、現在の端末はあらゆる入出力デバイスと見なされています。マウス、キーボード、スクリーン、カメラ、それらはすべて端末です。
シェルはOSのものです。コンピューターには、たとえばUbuntuのLinux部分であるカーネルがあります。カーネルは本当に低レベルであるため、シェルが提供されます。これは、ユーザーがカーネルと簡単にやり取りできるようにするプログラムです。それは、たとえばBASHのことです。
コンソール is(辞書から)
機械、電気機器などのコントロールを含む平らな表面.
そのため、音楽業界ではすべてのノブを備えたボード、またはスペースシャトルではコマンドテーブルはすべてコンソールと見なされます。スーパー任天堂とPS2は歴史的にコンソールとも呼ばれます。最初のそのようなエンターテインメントデバイスは、ボタンがたくさんある箱のように見えたからです。
コマンドラインは単なるインターフェイスであり、GUIの反対です。つまり、コンピューターには2種類のインターフェイスがあります。 CLI(コマンドラインインターフェイス)およびGUI(グラフィカルユーザーインターフェイス)。主な違いは、最初のものはキーボードから入力を取得し、2番目のものはマウスから入力を取得することです。
私の答えを要約するには:
Shellは、Linuxのbashのように、processes
コマンドとreturns
を出力するプログラムです。
端末はrun
a Shellであるプログラムで、過去には物理デバイス(端末がキーボード付きモニターである前に、それらはテレタイプ)で、その概念はGnome-Terminalのようにsoftwareに移されました。
Gnome-Terminalを開くと、Shellを実行する黒いウィンドウが表示されるので、コマンドを実行できます。
コンソールは特別な種類の端末であり、物理デバイスでもありました。 Linuxの例では、virtual console
があり、次の組み合わせでアクセスできます。 Ctrl + Alt + F1 to F7 。
コンソールは、キーボードとモニターを意味する場合があります物理的にこのコンピューターに接続されています。
これらの用語はよく一緒に使用されるため、人々はいずれかの用語を使用してコレクションを参照します。 (つまり、通常、コンテキストから、コマンドラインシェルへのインターフェイスを提供するターミナルウィンドウを意味することが明らかです)。
これが長引くのを防ぐために、私はxtermをXTerm/Gnome Terminal/Konsole/mrxvt/etc/etcの代用として言うだけです。bashでも同じです。
Consoleには他にも複数の特定の意味があるため、今のところは省略します。
ターミナル:ASCII/UTF8 /その他の文字の双方向ストリームを介して、通常はVT100または同様のエスケープコード処理でプログラムと人間のやり取りを提供するもの。 (たとえば、バックスペース、削除、矢印キーなどは、エスケープコードを生成します。プログラムは、エスケープコードを印刷して、カーソルを端末画面上で移動したり、太字テキストに切り替えたり、画面を色付けしたり、クリアしたり、スクロールしたりできます)。昔は、これは多くの場合、画面とキーボード、シリアルポートを備えた専用のアプライアンスでした。現在、通常はxtermのようなプログラムです。
端末との間で読み書きするプログラム用のデバイスファイルがあり、仮想端末にはデバイスファイルとしてアクセス可能なもう一方の側もあります。これは、btermが読み取れるようにxtermが入力を書き込む場所です。
仮想端末を含むすべての端末は、(rawではなく)cookedモードのときに基本的な行編集を提供します。これはカーネルコードによって処理されます。矢印キーでできる行編集を提供するのはbashです。 (cat
を実行し、カーネルが提供する基本的な行編集がどのようなものかを確認したい場合は、入力してみてください。Backspaceは機能します。
端末デバイスの背後には多くのカーネルコードがありますが、端末自体ではなく端末処理コードと呼ばれます。
編集:Gillesは、ttyをターミナルと呼ぶのが適切な使い方であると確信しました。端末エミュレーター、および端末に接続して実行される対話型プログラムはすべて、カーネルによって実装された端末セマンティクスに依存しています。 (この動作のほとんどはPOSIXによって標準化されており、Linux/* BSD /その他のUnixでも同じです。)フルスクリーンテキストエディタは、Unix ttyスタッフの動作とカーソル移動エスケープコード処理に依存します。ターミナルエミュレータのその他の多くの機能。
ただし、画面、キーボード、およびシリアルポートを備えた物理VT100は、端末のインスタンスです。シリアルポートのもう一方の端にあるUnixカーネルを完了する必要はありません。まったく異なるものは、エスケープコードとASCIIテキストを送信し、そこから同じものを受信することです。ただし、UNIX端末ではなく、VT100になります。ターミナルエミュレータとUnix ttyセマンティクスは、bashなどのプログラムが通常実行されるUnixターミナルの完全なパッケージを構成します。
コマンドラインは、ユーザーインターフェイスのスタイルです。ユーザーが何かを入力し、returnキーを押して何かを実行します。また、bashやMS-DOSなどのコマンドラインシェルの省略形としても使用されますが、fdiskなどについては「コマンドラインツールです」と言うこともできます。 UIにターミナルを使用するプログラムのみを考慮すると、2つの主要なファミリはコマンドラインとフルスクリーンテキスト(たとえば、viやemacs -nw
などのエディター)です。
通常、端末で実行されるコマンドラインプログラムは、ほとんど常に入力と出力をファイルにリダイレクトして動作しますが、エディターや電子メールクライアントなどの端末ベースのフルスクリーンプログラムはインタラクティブのみであり、動作しません。
Shellは、他のプログラムを起動するためのプログラムです。 Unixのコンテキストでは、コマンドラインシェル(つまり、Bourne ShellまたはC Shellに相当するもの)を意味するのが一般的です。 Unixシェルは、ファイル、つまりシェルスクリプトから入力を読み取ることもできます。これらは変数、ループ、条件付きの完全なプログラミング言語であり、多くのプログラムはbashで記述されています(または、移植性を高めるために/bin/sh
POSIXシェル機能のみを使用)。インタラクティブシェルで簡単なfor i in *.something; do some_program "$i";done
を書くことも簡単にできます。
すべてをまとめると、bash(またはShellコマンドを実行して起動したプログラム)のようなシェルは、xtermが入力を擬似端末の側に書き込んだ後、/dev/pts/N
端末デバイスから文字を受け取ります。 cat
を実行してから^c
を押すと、カーネルttyコードは^c
に作用し、その端末のフォアグラウンドプロセスにSIGINT
を送信します。 (このコンテキストではterminalの使用法に注意してください。これは、端末エミュレータやシリアルポートに接続されたものではなく、Unix ttyを意味します。)シェルは、プログラムを起動する前に端末を「調理済み」モードにします。つまり、カーネルはいくつかの制御シーケンスに基づいて動作します。 (ttyコードは、VT100エスケープコードの処理とは何の関係もなく、いくつかのlow-ASCII制御コードのみです。)xtermの代わりに、Linuxコンソールテキスト端末を使用している場合は、カーネルIS VT100エミュレーションを行い、すべてを処理します。 Linuxは、仮想コンソールのテキスト端末サポートなしでコンパイルできますが、ttyサポートなしではコンパイルできません。
Consoleは、端末の同義語として使用されることがあります(KDEにはKonsoleという端末エミュレータもあります)。
0xSheepdogが指摘しているように、これには別の意味もあります。それは、ローカルに接続された人間対話ハードウェアです。
カーネルコンテキストでは、コンソールには別の特定の意味があります。これは、ブートメッセージが書き込まれる端末です。これはシリアルポートにすることができます。通常、もちろん、グラフィックハードウェアおよびUSB/ps2/ATキーボード用のドライバーの上にカーネルによって実装されるテキストコンソールです。コマンドラインでconsole=tty0 console=ttyS0,115200n8
を指定してLinuxを起動すると、画面とシリアルポートにカーネルメッセージが表示されます。
Linuxは仮想コンソールを実装します(/dev/tty1
からN)。物理画面/キーボードが制御しているものを交換できます Ctrl+Alt+FN。典型的なLinuxディストリビューションは6を作成し、それらすべてでgetty
を開始します。したがって、X11を開始できない、または開始したくない場合でも、6回ログインしてコマンド、manページ、そして、画面のようなプログラムを実行せずに、他の何でも。 Linux(カーネル)には、仮想コンソールの画面とキーボードを介してターミナルインターフェイスを提供するVT100スタイルのターミナルエミュレータが含まれています。
ログインプロンプトを備えた標準の6つの仮想端末がその理由です Ctrl+Alt+F7 X11セッションに戻ります。Xサーバーは次に利用可能な仮想コンソールを取得します。 (ただし、Xサーバーは/dev/input/...
からキーを押すのではなく、/dev/tty7
を直接開きます。)
したがって、「テキストコンソールに切り替える」とは、 Ctrl+Alt+F1 その端末を使用します。コンピューターが遅く、RAMが少ないとき、テキストコンソールに多くの時間を費やしていました。彼らは高速だったので、Niceフォントを設定し、端末サイズを小さくして文字を小さくすることさえできましたが、一度に画面に表示します。 Alt+Left そして Alt+Right prev/nextコンソールに切り替えます。 (X11はもちろんコンソールでこれを無効にし、 Ctrl+Alt+FN コンボ。)
したがって、consoleは、明確に定義された単一の技術的意味を持たないこれらの用語の唯一のものです。いくつかの異なるものがあります。 (端末の適切性と端末とttyの扱いについてのあなたの感じ方によっては、端末にも複数の意味があると言えます。)
タイムシェアリングコンピューターの初期の時代には、すべてのユーザーが端末を持っていましたが(1つ入手できたとき!)、システムオペレーターだけがコンソールを持っていたと思います。コンソールは、マシンの再起動や、ユーザー端末からは不可能なシステム診断の取得などのタスクに使用できます。コンソールはコンピューターの本質的な部分である機械室にありましたが、端末はリモートにすることができました。コンソールには、テキストの入出力だけでなく、ハードウェアのライトとスイッチも含まれます。
コマンドラインはユーザーがコマンドを入力できる領域であるのに対して、シェルはそのコマンドを解釈/従うプログラムです。 「シェル」という用語は、Unix派生物に非常に特有です。 「コマンドライン」は、Windows/DOSの伝統にあります。メインフレームに相当するものは、通常「ジョブ制御言語」と呼ばれます。
明らかに、これらの元々の区別は、技術が変化するにつれて時間とともにぼやけてきました。
ユーザー中心の短い答えを試してください:
コマンドライン-コマンドを入力する行。通常、オペレーティングシステムが提供するテキストモードウィンドウ(コマンドラインインターフェイス)で何かを実行する必要があることを通知するために使用されていました。
Shell-command line
に入力した内容を処理するためにオペレーティングシステムによって実行される実際のプログラム。したがって、名前-非フレンドリーOSコアのユーザーフレンドリーなシェル。 $
や>
などのコマンドプロンプトを提供し、独自のコマンドとアプリを実行します。常にShell
プログラムを使用し、コンソールまたは端末で直接操作することはありません。
console-テキストモードプログラムが実行されているウィンドウです。このウィンドウはキーの押下を処理し、幅と高さを認識します。フルスクリーンにすることができます。
端末-文字の入力ストリームを受け入れて表示する、人間用のディスプレイを備えたデバイスです。高さまたは幅(ハックのみ)またはキーボードのキー入力についてユーザーにフィードバックはありません-文字のみがそこに移動します。端末は、このストリーム内の特別なシーケンスを処理して、色を付けたり、画面をクリーンアップしたり、その他の厄介なことを行います。出力にパイプしているファイルにその特別なシーケンスが含まれていると物事を混乱させるのは簡単だからです。出力を送信して出力デバイスを制御するための単一のストリームが必要なだけで、ウィンドウを初期化または作成する必要なく、会話にtap
できるため、ネットワークおよびデバイスデバッグインターフェイスで人気があります。
serial console-入力ストリームを端末のように処理するコンソールです。
用語は非常にあいまいであるため、これはあいまいなトピックです。この回答全体で提供したリンクを読むことを強くお勧めします。これはこの回答のソースでもあります。
Shellはカーネルの上の層です:
端末には多くの意味があります:
コンソールには多くの意味があります:
多くの場合、オペレーティングシステムでは、物理コンソールで複数のコンソールを実行できます(コンソール定義2)。これらはvirtual consolesa.k.a.virtual terminalsと呼ばれ、 ctrl + alt + Fx 組み合わせ。たとえば、3番目の仮想コンソールを開く場合は、次の組み合わせを使用します ctrl + alt + F3。
コンソール(定義3)は時代錯誤のように見えるかもしれませんが、GUIをサポートしていないOSがたくさんあるため、専門家は使い慣れているはずです。また、GUIが応答しなくなった場合でも、コンソールが機能する場合があります。
ほとんどの端末最近は厳密に言えば端末エミュレータです。これは、UNIXライクなシステムの動作におけるシステムroleであると同時に、システムによって提供される基本的なインターフェースです。実際、GUIを含むすべてがその上に構築されます。
口語的に「端末」とは、星形のコンピューターネットワーク内のエンドポイントを指す場合もあります。
コンソールは、端末の(ハードウェア)インターフェースを指します。つまりserialコンソールがあり、最近ではほとんどvirtualコンソールがあります。
「コンソール」と俗称されるウィンドウは、仮想コンソールを介してシステムの端末に接続されたシェルです。
コンピューターが高価だった当時、施設には実際のコンピューター1台と、シリアルケーブル(「シリアルコンソール」)で接続された複数の端末があったかもしれません。 OS、操作などは物理コンピューターで実行され、入出力はコンソールで行われました。
を押すと、仮想端末を切り替えることができます CTRL+ALT+F1(〜まで F6):それらの時間の残り。
今日、「シンクライアント」の概念は、大量のリソースを集中化し、実際の職場で最先端のインターフェースを提供するのに十分なハードウェアを提供するというこの方向に遡ります。
シェルは、ターミナルに表示される「エンジン」です。システム自体との相互運用性を提供し、オートコンプリート、変数などの素敵な機能を追加します。
システムコールを使用する実際のOS /カーネルとあなたの間を行き来します。シェルなしのシステムコールはコーディングassembler
に少し似ており、シェルは少なくともC
を提供します。
コマンドラインは、テキストウィンドウを介して入力と出力を交換する方法を指します。厳密に言えば、入力する行はthe(現在の)コマンド行です。一般的に、このメソッドはコマンドラインインターフェイスまたはCLIと呼ばれます。