/dev/console、/dev/tty、および/dev/tty0の違い
1. 序章
このチュートリアルでは、最初に2つを調べます tty Linuxシステムに存在するドライバー。 / dev / tty と
2. / dev / console
/ dev /consoleはシステムコンソールと呼ばれます。 歴史的に、これはLinuxコンピュータに直接接続された端末でした。 今では、シリアル端末をLinuxコンピューターに接続するオプションが提供されています。
/ dev /consoleを見てみましょう。
$ ls -lah /dev/console
crw------- 1 root root 5, 1 Jun 15 15:25 /dev/console
$ file /dev/console
/dev/console: character special (5/1)
ご覧のとおり、これは /devフォルダーにあるファイルです。 これは、メジャー番号5とマイナー番号1で構成される識別子を持つ文字デバイスを表します。
kernel のドキュメントを見ると、 / dev /consoleは以前はシンボリックリンクであったと記載されています。 その結果、 / dev /consoleは別のデバイスを指しています。
/ dev /consoleが何を指しているか見てみましょう。
$ cat /sys/devices/virtual/tty/console/active
tty0
うーん、これはtty0と/dev / console が同じものであることを意味しますか? さらに調べてみましょう。
Linuxシリアルコンソールのドキュメントを見ると、 / dev /consoleが指すものを変更できると記載されています。
それを試してみましょう:
注:この例では、GRUBブートローダーが必要です。
$ cat /etc/default/grub | head -n 10
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="ignore_loglevel"
/ etc / default / grub の行をGRUB_CMD_LINE_LINUX=” ignore_loglevel”で次のように変更する必要があります。
GRUB_CMD_LINE_LINUX =” console = / dev / tty2 ignore_loglevel”
grubの設定を更新して再起動しましょう。
$ sudo update-grub
$ sudo reboot
次に、 / dev /consoleが指している場所を見てみましょう。
$ cat /sys/devices/virtual/tty/console/active
tty2
/ dev /consoleが変更されたことがわかります。
これで、 / dev /consoleが指すものを変更できることがわかりました。 このデバイスの目的は何ですか?
/ dev / consoleは、特に起動時に、ログメッセージを出力するための保証された場所をカーネルに提供しているようです。 また、シングルユーザーモードに切り替えるときに使用するデバイスは / dev /consoleです。
シングルユーザーモードに入って、これを試してみましょう。
$ init 1
グラフィックが消えていることに気づきました。 シングルユーザーテキストモードです。
どのttyを使用しているかを見てみましょう。
$ tty
tty2
これは/dev /consoleと同じです。
私たちが発見したように。 / dev / console は、さまざまなデバイスを指すことができます。 カーネルメッセージは/dev/ consoleに記録され、そこでログインプロンプトを起動できます。
3. / dev / tty0
/ dev / tty0 は、アクティブなtty端末を指します。 いくつかの例を使ってさらに詳しく見ていきましょう。
tty3 にアクセスするには、CTRL + ALT+F3を押します。 コマンドttyを入力すると、tty3を使用していることを確認できます。
$ tty
/dev/tty3
echoを使用してコンソールに書き込むことができるかどうかを見てみましょう。
$ echo "hello world" > /dev/tty3
hello world
さて、これまでのところ、CTRL + ALT+FNを押すことでtty Nに変更できることを確認しました。 ただし、キーボードにはF0キーはありませんが、tty0があることに注意してください。
tty0についてもう少し調べてみましょう。
$ cat /sys/devices/virtual/tty/tty0/active
tty3
tty0がtty3を指しているようです。 では、別のttyに切り替えてみましょう。 tty4としましょう。 簡単なショートカットは、CTRL +ALT+右矢印を押すことです。 これにより、tty3からtty4に移動します。
$ tty
/dev/tty4
$ cat /sys/devices/virtual/tty/tty0/active
tty4
tty0が現在アクティブなコンソールであることがわかります。
4. / dev / tty
このセクションでは、
POSIX standard によると、 / dev / tty はプロセスグループに関連付けられた端末と見なされますが、 / dev /tty0は仮想端末に関連付けられます。
それが実際に何を意味するのか見てみましょう。
まず、ローカルマシンにSSH接続して、ttyを確認しましょう。
$ ssh localhost
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-37-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 updates can be installed immediately.
0 of these updates are security updates.
Last login: Tue Jun 16 10:59:08 2020 from 127.0.0.1
$ tty
/dev/pts/0
これはptsで、別のタイプの端末です。 次に、「helloworld」を / dev /tty0に出力することがsshセッションに影響するかどうかを確認しましょう。
ルートのみが/dev / tty0、したがって、に書き込むことができることに注意してください。ルートに切り替える必要があります。
$ sudo -i
$ echo "hello world" > /dev/tty0
$ # Nothing here was expecting hello world.
$ exit # let's leave root.
「helloworld」というメッセージは出力されません。 ただし、アクティブな tty を確認すると、そこに「helloworld」が出力されていることがわかります。
/ dev /ttyを使ってみましょう。
$ echo "hello world" > /dev/tty
hello world
「helloworld」というメッセージが印刷されます! これは、 / dev/ttyがsshセッションに関連付けられている端末を表すためです。 使用中の端末に関係なく、 / dev /ttyは現在の端末にすばやくアクセスする方法です。
5. 結論
このチュートリアルでは、 / dev /consoleとその役割について説明しました。 次に、ttyとtty0を調べて、2つの違いを確認しました。 / dev /ttyは現在アクティブなttyであり、 / dev /tty0は現在のプロセスに関連付けられている端末です。