Linux:/dev/console、/dev/tty、および/dev/tty0の違い

Linux:/dev/console、/dev/tty、および/dev/tty0の違い

/dev/consoleLinuxシステムでは、/dev/ttyとの違いは何ですか/dev/tty0

それぞれの用途は何で、どのように比較しますか?

答え1

~からKernel.orgのLinuxカーネルドキュメント:

/dev/tty        Current TTY device
/dev/console    System console
/dev/tty0       Current virtual console

昔は/dev/consolesysadminコンソールがありました。 TTYは、サーバーに接続されたユーザーのシリアルデバイスです。

Now/dev/console/dev/tty0現在の表示を表し、通常は同じです。を追加console=ttyS0しますgrub.conf。その後、あなたは/dev/tty0モニター/dev/consoleです/dev/ttyS0

/dev/ttyとの違いを示す練習/dev/tty0

Ctrl++を押してAlt2番目のコンソールに切り替えますF2root.typeでログインしてくださいsleep 5; echo tty0 > /dev/tty0Enter3番目のコンソールに切り替えるには、+を押し続けます。次に+を押して2番目のコンソールに戻ります。 Enterキーを押して3番目のコンソールに切り替えます。AltF3AltF2sleep 5; echo tty > /dev/ttyEnter

ttyこれはプロセスが開始されたコンソールであり、tty0常に最新のコンソールであることがわかります。

答え2

  • /dev/console起動時にパラメータとして設定できる仮想デバイスのセット。シリアルデバイスまたは仮想コンソールにリダイレクトでき、デフォルトではそのコンソールにリダイレクトされます/dev/tty0。複数のconsole=オプションがカーネルに渡されると、コンソール出力は複数のデバイスに移動されます。

  • /dev/tty[0-N](最も高い属性のTTY番号(63など))は、使用するNように切り替えた仮想コンソールの1つです。controlaltF1

  • /dev/tty0また、デフォルトでは仮想コンソールもあります。

  • /dev/ttyコンソールを開いたプロセスに関連付けられているコンソール(物理、仮想、または擬似デバイス)のエイリアス。他のデバイスとは異なり、書き込みにはroot権限は必要ありません。また、バッチプロセスのように開始されたプロセスは、どのプロセスにも関連付けられていないためcron使用できません。/dev/ttyこれらのプロシージャ?には、出力列に1つがあります。TTYps -ef

答え3

/dev/コンソール

https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst

Linuxでは、次のコマンドを使用してカーネルコンソールを設定できます。console= 起動オプション。呼び出しカーネルコードは、printk()たとえば、デバイスがロードされたとき、またはエラーが発生したときにここにメッセージを書き込むことができます。これらのメッセージはカーネルによってもバッファリングされます。 (あなたも見ることができますdmesg)。コンソールデバイスを見つけて起動すると、以前にバッファリングされたすべてのメッセージが表示されます。

複数のコンソールを構成するために複数回転送でき、console=メッセージはすべてのコンソールに記録されます。明らかに、各「タイプ」に対して1つのコンソールしか選択できません。console=ttyS0と両方を使用することはできませんconsole=ttyS1

カーネル文書は、/dev/console番号付きの文字デバイスを指定します(5,1)。この文字デバイスを開くと、コンソールリストの最後のttyである「デフォルト」コンソールが開きます。カーネル以外の最初のプロセスはinit「PID 1」と呼ばれ、/dev/console標準出力、標準エラー、および標準入力への接続から始まります。

tty コンソールがない場合、開くと/dev/consoleエラーENODEV(「該当デバイスなし」) が返されます。カーネルは印刷メッセージを録音initして開始します。 ttyデバイスではないカーネルコンソールの例については、以下を参照してください。netconsoleまたは私のお気に入りのコンソールラインプリンタ

を読んでttyコンソールのリストを表示することもできます/sys/class/tty/console/activeシステム文書指摘最初表示されるデバイスはデフォルトのコンソールです。リストは実際にはカーネルコマンドラインの逆の順序です。これ現在のカーネル文書表示された最後のデバイスがプライマリまたは「アクティブ」コンソールであると誤って説明されています。何らかの理由でこのファイルをポーリングして変更を確認できます(コンソールデバイスが削除された場合は?)。

内部に一つsystemd-nspawnコンテナ内では、標準/dev/consoleファイルはPTY(擬似端末デバイス)に置き換えられます。これは仮想端末装置として最もよく説明される。動的に生成され、グラフィカル端末エミュレータ(例:GNOME端末)とリモートアクセス(例:ssh

/dev/tty0

Linux TTYデバイスノード tty1パスはtty63仮想端末です。 VTまたは仮想コンソールとも呼ばれます。物理コンソールデバイスドライバの上に複数のコンソールをエミュレートします。一度に1つの仮想コンソールのみが表示され制御されます。chvt、Ctrl + Alt + F1などのファンクションキーを使用してアクティブな端末を切り替えることができます。

を使用して現在のVTを読み書きすることもできます/dev/tty0tty0たとえば、明示的に選択していない場合は、一般的なカーネルコンソールです。 「システムはまずVTが動作しているVGAカードを探し、次にシリアルポートを探します」コンソールを特定のVT(たとえば)に設定することもできますconsole=tty1

「システムにVGAカードがない場合、最初のシリアルポートは自動的にコンソールになります。」 「シリアルコンソール」のようなものはttyS0おそらく最も一般的な代替手段ですtty0。シリアルコンソールでVTシステムを使用できません。

/dev/tty

/dev/ttyPOSIXで指定された3つの標準デバイスファイルのうちの1つです。/dev/POSIXで指定された3つのディレクトリ名のうちの1つ)これを開くことは、現在のプロセスの制御端末を開くのと同じです。プロセスが最初に端末を開くときに制御端末を設定し、少なくともLinuxでは。たとえば、でinit引用されます/dev/console

制御端末からの分離は、従来、バックグラウンドプロセスを開始するために必要なステップの1つである。システムログデーモン。バックグラウンドプロセスになるステップは、特に制御端末から外れるステップが非常に複雑です。設定値システムコール。最新のシステムでは、initシステム(systemdなど)が最初に制御端末なしでサービスを開始します。

関連情報