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
がありません に関連付けられていないためです。これらのプロセスには?
TTY
でps -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 は、そもそも制御端末なしでサービスを開始します。