Linuxシステムでは、どのような違いである/dev/console
、/dev/tty
と/dev/tty0
?
それぞれの用途は何ですか?また、どのように比較しますか?
Linuxシステムでは、どのような違いである/dev/console
、/dev/tty
と/dev/tty0
?
それぞれの用途は何ですか?また、どのように比較しますか?
回答:
ドキュメントから:
/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+ Alt+を押して、2番目のコンソールに切り替えますF2。としてログインしroot
ます。を入力しsleep 5; echo tty0 > /dev/tty0
ます。プレスEnterとは、押すことで第三コンソールに切り替えAlt+をF3。Alt+ を押して、2番目のコンソールに切り替えますF2。型sleep 5; echo tty > /dev/tty
、プレスEnter第三コンソールへとスイッチ。
これtty
は、プロセスが開始されるコンソールでtty0
あり、常に最新のコンソールであることがわかります。
$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
sudo -i
、出来上がり-ルートシェル。
sudo anycommand
、sudo -i
ルートに移動することも動作します。rootになれないLinux / BSD / Unixのようなものはありません。(その後、Linux / BSD / Unixではなくなります。)
/dev/console
起動時にパラメータとして設定できるデバイスの仮想セットです。シリアルデバイスまたは仮想コンソールにリダイレクトされ、デフォルトではを指して/dev/tty0
いる場合があります。複数のconsole=
オプションがカーネルに渡されると、コンソール出力は複数のデバイスに送られます。
/dev/tty0
現在の仮想コンソールです
/dev/tty[1-x]
あなたとに切り替える仮想コンソールの一つであるcontrol- alt- F1のように。
/dev/tty
コンソールを開くプロセスに関連付けられているコンソール(物理デバイス、仮想デバイス、または擬似デバイスがある場合)の一種のエイリアスです。他のデバイスとは異なり、それに書き込むためにルート権限は必要ありません。また、起動されたcron
プロセスや類似のバッチプロセスは/dev/tty
、いずれにも関連付けられていないため、使用できません。これらのプロセスには、出力?
のTTY
列がありps -ef
ます。
/dev/tty
、それを開くプロセスに応じて、別のデバイス(ある場合)になる可能性があることを意味します。回答が更新されました。
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
(「No such device」)が返されます。カーネルは印刷するメッセージを記録し、init
関係なく開始します。ttyデバイスではないカーネルコンソールの例については、をご覧くださいnetconsole
。または、お気に入りのコンソールラインプリンターをご覧ください。
また、を読むことでttyコンソールのリストを見ることができます/sys/class/tty/console/active
。 systemdのドキュメントでは、最初に表示されるデバイスがメインコンソールであることが指摘されています。リストは、実際にはカーネルコマンドラインの逆順です。現在のカーネルのドキュメントは、間違って示した最後のデバイスは、メインまたは「アクティブ」のコンソールであると述べています。何らかの理由で、このファイルを変更のためにポーリングすることが可能です(コンソールデバイスが削除された場合?)。
内側systemd-nspawn
容器、標準/dev/console
ファイルは疑似端末デバイス(PTY)で置換されています。これらは、仮想端末デバイスとして最もよく説明されます。これらは動的に作成され、GNOMEターミナルなどのグラフィカルターミナルエミュレータの実装や、などのリモートアクセスにも使用されますssh
。
LinuxのTTYのデバイスは、ノード tty1
を通じてtty63
仮想端末です。また、VTまたは仮想コンソールとも呼ばれます。物理的なコンソールデバイスドライバーの上にある複数のコンソールをシミュレートします。一度に表示および制御される仮想コンソールは1つだけです。アクティブなターミナルは、たとえばchvt
、またはCtrl + Alt + F1を使用して、多くのファンクションキーを使用して切り替えることができます。
を使用して、現在のVTを読み書きすることもでき/dev/tty0
ます。 tty0
明示的に選択しなかった場合など、通常のカーネルコンソールです。「システムはまずVGAカード(VTが実行されているもの)を探し、次にシリアルポートを探します」。コンソールを特定のVTに設定することもできconsole=tty1
ます。
「システムにVGAカードがない場合、最初のシリアルポートが自動的にコンソールになります。」のような「シリアルコンソール」ttyS0
は、おそらく最も一般的な代替手段tty0
です。シリアルコンソールの上でVTシステムを使用することはできません。
/dev/tty
POSIXで指定された3つの標準デバイスファイルの/dev/
1つ(POSIXで指定された3つのディレクトリ名の1つ)。これを開くことは、現在のプロセスの制御端末を開くことと同じです。制御端末は、少なくともLinuxでは、プロセスが最初に端末を開いたときに設定されます。たとえば、ではinit
、を参照し/dev/console
ます。
制御端末からのデタッチは、システムロギングデーモンなど、バックグラウンドプロセスを開始するために従来必要だった手順の1つです。バックグラウンドプロセスになるステップは恐ろしく複雑ですが、具体的には、制御端末から切り離されるステップはsetsidシステムコールです。より最近のシステムでは、init system(例:systemd)は最初に制御端末なしでサービスを開始します。