Linux におけるこれらの概念 (シェル、ターミナル、コンソール、コマンドライン) の違いは何ですか?

Linux におけるこれらの概念 (シェル、ターミナル、コンソール、コマンドライン) の違いは何ですか?

初心者の私にとって、シェル、ターミナル、コンソール、コマンドラインという 3 つの概念は、最近とても困惑しています。特にコンソールとターミナルはどうでしょうか?

答え1

シェルは、コンピュータとのインターフェースとして使用するプログラムで、コマンドライン インターフェース、またはポイント アンド クリック インターフェースになります。Bash はシェルであり、Gnome2 などもシェルです。

ターミナルは、現代のコンピューティングでは意味の重い用語です。これは、メインフレームに直接接続されたハードウェア デバイス (キーボードとモニターだけのシン クライアント) に入力していた古いメインフレームの時代に由来しています。ハードウェア ターミナルは、メインフレームで実行されているソフトウェア シェルと対話しました。PC やその他の小型のシック クライアント システムが登場した後、ターミナル エミュレーター ソフトウェアが使用され始めました。このソフトウェアは、シック クライアントをメインフレームに接続されたシン クライアント ターミナルに見せかけ、リモート接続を可能にしました。これが、CICS アプリケーションなどが独自の地位を確立した理由です。

現代的な意味では、Linux の「ターミナル」は、gnome-terminalローカル システムでシェルを実行するターミナル エミュレーターです。重要な点は、ターミナルには常にシェルが収容されており、ハードウェア ターミナルでもソフトウェア ターミナルでも、ターミナルを使用してシェルにアクセスし、シェルと対話することです。

現代の用法では、クライアント (コンピューティングのクライアント/サーバー モデルから) は、サービスに接続して利用するソフトウェアです。Web ブラウザーは HTTP サービスのクライアントです。Samba または Windows サーバーに接続するには、Samba クライアントが必要です。リモート リンク上のターミナル エミュレーターは、リモート接続に telnet、ssh、hyperterm などのクライアントを使用することがよくあります。クライアントは通常、ネットワークを媒体として使用して接続し、通信プロトコル (HTTP など) に基づいてメッセージを渡します。

クライアントという用語はハードウェアを指すこともありますが、一部のニッチな分野を除いてあまり一般的ではありません。昔は、スタンドアロン システムをネットワークに接続すると、そのシステムはそのネットワーク上のクライアントになりました。このことから、シン クライアント (ソフトウェアをリモートで実行するディスクレス マシン) やシック クライアント (OS、CPU、RAM、およびセカンダリ ストレージをすべて独自に備えたスタンドアロン PC) などの用語も生まれました。通常、話者がハードウェア デバイス (PC/サーバーなど) について言及しているのか、特定のソフトウェア クライアントについて言及しているのかは、文脈から判断できます。

それが明確になることを願っています。

答え2

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

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

UNIX用語で言えば、簡単に言えば

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

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

UNIX用語では、端末特定の種類のデバイスファイルこれにはいくつかの追加コマンドが実装されています(ioctl)は、読み書き以上の意味を持ちます。最も一般的な意味は、ターミナルttyと同義です。一部のttyはハードウェアデバイスの代わりにカーネルによって提供され、たとえばキーボードからの入力とテキストモード画面への出力、またはシリアルラインを介して送信される入力と出力などがあります。その他のttyは、疑似ttyは、(薄いカーネル層を通じて)と呼ばれるプログラムによって提供されます。端末エミュレータ、 のようなXterm(ランニング中X ウィンドウ システム)、画面(プログラムと他の端末の間に分離層を提供する)、シェル(あるマシン上の端末を別のマシン上のプログラムに接続する)、期待する(ターミナルインタラクションのスクリプト用) など。

ターミナルという言葉は、キーボードとディスプレイを使ってコンピュータとやりとりするデバイスというより伝統的な意味を持つこともあります。たとえば、Xターミナルはシン・クライアントキーボード、ディスプレイ、マウス、および場合によっては他の人間との対話用周辺機器を操作することのみを目的とする特殊用途のコンピュータであり、実際のアプリケーションは別のより強力なコンピュータで実行されます。

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

参照仮想端末がなぜ「仮想」なのか、そして「実際の」端末とは何なのか、なぜなのか、どこにあるのか。


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

UNIX界では、シェルを意味するように特化しているコマンドラインシェルは、起動したいアプリケーションの名前を入力し、続いてアプリケーションが操作するファイルやその他のオブジェクトの名前を入力し、Enterキーを押すというものです。他の種類の環境では「シェル」という言葉は使用されません。たとえば、ウィンドウシステムでは「ウィンドウマネージャ" そして "デスクトップ環境「シェル」ではなく「」です。

Unixシェルにはさまざまな種類があります。対話型でよく使われるシェルには次のようなものがあります。バッシュ(ほとんどの Linux インストールではデフォルト)翻訳(パワーとカスタマイズ性を重視)(シンプルさを重視します)。

コマンドラインシェルには、コマンドを組み合わせるためのフロー制御構造が含まれています。対話型プロンプトでコマンドを入力するだけでなく、ユーザーはスクリプトを書くことができます。最も一般的なシェルは、ボーンシェルシェルプログラミング” というシェルは、ほとんどの場合、Bourne スタイルのシェルであると暗黙的に考えられています。スクリプトによく使用されますが、高度な対話機能を備えていないシェルには、次のようなものがあります。Korn シェル (ksh)そして多くのさまざまなバリエーションがあります。ほとんどすべての Unix 系システムには/bin/sh、Bourne スタイルのシェル (通常は ash、ksh、または bash) がインストールされています。

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


ターミナルとシェルの役割分担は完全には明らかではありません。ここでは、それぞれの主なタスクについて説明します。

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

リサイクルUnix と Linux

答え3

わかりました、

シェル: コマンド ライン インターフェイスでコマンドを実行します。これは、"cd"、"grep" などと入力したときに、何をするか (どのプログラムを呼び出すか) を認識するプログラムです。通常は、bash または zsh (最も一般的) とも呼ばれます。シェルは、直接スクリプト (通常は .sh ファイルですが、拡張子は必須ではありません) も実行します。

ターミナル: 実際のシェルを実行するためのグラフィカル ウィンドウ (通常)。タブ、フォント、行 X 列のサイズなどの追加の機能があります。ターミナルは、好きなシェルを実行するように定義できます。

クライアント: 残りの部分とは関係ありません。クライアント/サーバー アーキテクチャ (Web サイト、SSH 接続、データベース管理プログラム、マルチプレイヤー ゲーム) を持つすべてのアプリでは、クライアントが対話するものであり、クライアントがサーバーに命令を送信します。

例: ssh で接続する。

  • ターミナルを開きます。
  • 次のコマンドを実行します: ssh[メールアドレス]
  • シェルは実際にsshコマンドを実行し、sshクライアントを起動します。
  • このクライアントはインターネット経由でSSHサーバーに接続します
  • ターミナルで「whoami」と入力すると、シェルは ssh クライアントを実行しているので、コマンドがサーバーに送信されることを認識します。ネットワークの反対側では、サーバーがそのコマンドを実行し、結果をシェルに送り返し、ターミナルはデスクトップに人間が判読できるきれいな表示を作成します。

ゲームに切り替えます。「ターミナル」は美しいインターフェース、「シェル」はクリックやキータップで何をするかを知っている内部の部品、「クライアント」はゲーム エンジン自体で、サーバーとの間でデータを送受信して、すべてのプレイヤーが遅延なく楽しく対戦できるようにします :)

これは非常に単純化された見方ですが、詳細を除けば、まさにその通りです。

答え4

としてジル書いたAsk Ubuntuでの同様の質問:

  1. ターミナル = テキスト入出力環境
  2. コンソール = 物理端末
  3. シェル = コマンドラインインタープリタ

コンソールとターミナルは密接に関連しています。元々、これらはコンピューターと対話するための機器を意味していました。(…) UNIX 用語では、ターミナルは読み取りと書き込み以外にいくつかの追加コマンド (ioctl) を実装する特定の種類のデバイス ファイルです。一部のターミナル (擬似ターミナルまたは擬似 tty と呼ばれることもあります) は、ターミナル エミュレーターと呼ばれるプログラムによって (薄いカーネル レイヤーを通じて) 提供されます。ターミナル エミュレーターには次の種類があります。

  • X Window System で実行される GUI アプリケーション: Xterm、Gnome Terminal、Konsole、Terminator など。
  • Screen と tmux は、プログラムと別の端末の間に分離レイヤーを提供します。
  • あるマシン上の端末を別のマシン上のプログラムに接続する ssh。
  • ターミナルインタラクションのスクリプト作成用の Expect。

(…) コンソールは一般に物理的な意味での端末であり、ある定義によればマシンに直接接続されたプライマリ端末です。コンソールは、オペレーティング システムには (カーネルで実装された) 端末として表示されます。Linux や FreeBSD などの一部のシステムでは、コンソールは複数の端末 (tty) として表示されます (特殊なキーの組み合わせでこれらの端末を切り替えます)。混乱を招くかもしれませんが、各端末には「コンソール」、「仮想コンソール」、「仮想端末」などのさまざまな名前が付けられます。

(…)コマンドラインは、ユーザーがコマンド(通常はコマンド名の後にいくつかのパラメータが続く文字列として表現される)を入力し、戻るそのコマンドを実行するキーです。

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

UNIX 界隈では、シェルはコマンドライン シェルを指すように特化しており、起動したいアプリケーションの名前を入力し、その後にアプリケーションが操作するファイルやその他のオブジェクトの名前を入力して Enter キーを押すことを中心にしています。他の種類の環境 (最近の注目すべき例外である Gnome Shell を除く) では通常、「シェル」という言葉は使用されません。たとえば、ウィンドウ システムには「ウィンドウ マネージャー」や「デスクトップ環境」が含まれ、「シェル」は含まれません。

Google で検索すると、この件に関する役立つ情報が多数見つかります。

関連情報