GNU/Linux >> Linux の 問題 >  >> Linux

Linux:/dev/console 、 /dev/tty 、 /dev/tty0 の違い

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

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

古き良き時代 /dev/console システム管理者コンソールでした。 TTY は、サーバーに接続されたユーザーのシリアル デバイスでした。

現在 /dev/console そして /dev/tty0 は現在の表示を表し、通常は同じです。たとえば、 console=ttyS0 を追加することでオーバーライドできます grub.confまで .その後、あなたの /dev/tty0 はモニターで、/dev/console /dev/ttyS0 です .

/dev/tty の違いを示す演習 そして /dev/tty0 :

Ctrl を押して 2 番目のコンソールに切り替えます +Alt +F2 . root としてログイン . sleep 5; echo tty0 > /dev/tty0 と入力します . Enter を押します Alt を押して 3 番目のコンソールに切り替えます +F3 Alt を押して、2 番目のコンソールに戻ります。 +F2 . sleep 5; echo tty > /dev/tty と入力します 、Enterを押します 3 番目のコンソールに切り替えます。

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


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

  • /dev/tty[0-N] (N は、最大の属性 TTY 番号です。 63) は、control で切り替える仮想コンソールの 1 つです。 -alt -F1 など;

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

  • /dev/tty コンソールを開くプロセスに関連付けられているコンソール (存在する場合は、物理デバイス、仮想デバイス、または疑似デバイス) への一種のエイリアスです。他のデバイスとは異なり、書き込みに root 権限は必要ありません。 cron によって起動されるようなプロセスにも注意してください。 および同様のバッチプロセスには使用可能な /dev/tty がありません に関連付けられていないためです。これらのプロセスには ? TTYps -ef の列 出力。


/dev/console

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 を返します ("そのようなデバイスはありません")。カーネルは print します メッセージをログに記録し、init を開始します 関係なく。 tty デバイスではないカーネル コンソールの例については、netconsole を参照してください。 、または私のお気に入りのコンソール ライン プリンター。

/sys/class/tty/console/active を読み取ることで、tty コンソールのリストを表示することもできます。 . systemd のドキュメントでは、最初の 表示されているデバイスはメイン コンソールです。リストは、実際にはカーネル コマンド ラインの逆順になっています。現在のカーネルのドキュメントには、最後に表示されたデバイスがメインまたは「アクティブな」コンソールであると誤って記載されています。何らかの理由で、このファイルの変更をポーリングすることができます (コンソール デバイスが削除された場合)。

systemd-nspawn の中 コンテナー、標準の /dev/console ファイルは疑似端末デバイス (PTY) に置き換えられます。これらは、仮想端末デバイスとして最もよく説明されます。これらは動的に作成され、GNOME ターミナルなどのグラフィカル ターミナル エミュレータの実装や、ssh などのリモート アクセスにも使用されます。 .

/dev/tty0

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

/dev/tty0 を使用して現在の VT を読み書きすることもできます . tty0 通常のカーネルコンソールです。明示的に選択しなかった場合。 「システムはまず [VT が実行される] VGA カードを探し、次にシリアル ポートを探します」。コンソールを特定の VT に設定することもできます。 console=tty1 .

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

/dev/tty

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

制御端末から切り離すことは、バックグラウンド プロセス (システム ロギング デーモンなど) を開始するために従来から必要とされてきた手順の 1 つです。バックグラウンド処理になるまでの手順は恐ろしく複雑ですが、具体的には制御端末から切り離す手順がsetsidシステムコールです。より現代的なシステムでは、init システムなどがあります。 systemd は、そもそも制御端末なしでサービスを開始します。


Linux
  1. / dev/randomを使用してLinuxでランダムパスワードを生成する方法

  2. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  3. /dev/dm-Z デバイスから /dev/sdX および /dev/mapper/mpathY デバイスをマップする方法

  1. Linux の /dev/zero および /dev/null ファイルとは

  2. 一部の Linux システムでは、mtab でルート ファイルシステムが /dev/<実デバイス ノード> ではなく /dev/root として表示されるのはなぜですか?

  3. /dev/null に書き込む仮想ブロック デバイスを作成します。

  1. LinuxソフトウェアRAIDで故障したハードディスクを交換する方法

  2. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  3. /dev/sda と /dev/sda1 の違い