优秀网站的链接,课堂网页设计素材,上海建筑工程网站,丹阳网站建设案例终端的设备文件 打开/dev目录可以发现其中有许多字符设备文件#xff0c;例如对于我的RedHat操作系统#xff0c;拥有tty0到tty59#xff0c;它们是操作系统提供的终端设备。对于tty1-tty12使用ctrlaltF*可以进行快捷切换#xff0c;下面的命令可以进行通用切换。
sudo ch…终端的设备文件 打开/dev目录可以发现其中有许多字符设备文件例如对于我的RedHat操作系统拥有tty0到tty59它们是操作系统提供的终端设备。对于tty1-tty12使用ctrlaltF*可以进行快捷切换下面的命令可以进行通用切换。
sudo chvt 13 /dev/pts是伪终端设备目录伪终端(Pseudo-Terminal Slave, PTS)是虚拟终端的一种用于提供通过软件模拟的终端设备。/dev/pts中的字符设备文件对应打开的伪终端会话例如当你通过SSH登录或在GUI界面右击选择Open Terminal创建终端(GNOME Terminal)时系统会自动创建一个伪终端设备。 使用ps -el命令可以查看进程运行在哪个终端上如下所示。
# GUI界面创建终端(GNOME Terminal)查询
[zhangchenEDA ~]$ ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
***
4 R 0 2606 1957 1 80 0 - 92017 ? tty1 00:00:08 X
0 D 1000 5802 1 4 80 0 - 187419 flush_ ? 00:00:00 gnome-terminal
0 S 1000 5815 5802 0 80 0 - 29251 do_wai pts/0 00:00:00 bash
*** GUI界面运行在tty1终端上默认行为而在GUI界面创建终端(GNOME Terminal)并运行Bash时系统自动创建了伪终端设备pts/0。 终端的切换 当切换到tty2-tty6时会发现图1所示的CLI界面提示登录但切换到tty6以上时却只有如图2所示的空白界面。 图1 CLI界面 图2 空白界面 这是因为切换到tty2-tty6时系统自动在相应终端创建了一个agetty进程用于管理终端登录如下所示。这是在切换后自动进行的也就是说如果不进行切换则不会创建agetty进程。
# 当使用ctrlaltF2切换后回到GUI界面创建终端(GNOME Terminal)查询
[zhangchenEDA ~]$ ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
***
4 R 0 2606 1957 1 80 0 - 89542 ? tty1 00:00:12 X
0 D 1000 5802 1 1 80 0 - 189988 flush_ ? 00:00:01 gnome-terminal
0 S 1000 5815 5802 0 80 0 - 29251 do_wai pts/0 00:00:00 bash
4 S 0 6069 1 0 80 0 - 27551 n_tty_ tty2 00:00:00 agetty
*** 但对于tty6以上则不会自动创建agetty进程需要人为创建需要使用下面的命令进行人为出那个键此时再切换到tty7则会有和图1一样的登录界面。
# 创建tty7的agetty进程
[zhangchenEDA ~]$ sudo systemctl start gettytty7.service
# 创建tty7的agetty进程后再查询
[zhangchenEDA ~]$ ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
***
4 S 0 2606 1957 1 80 0 - 89542 ep_pol tty1 00:00:18 X
0 R 1000 5802 1 1 80 0 - 190042 - ? 00:00:03 gnome-terminal
0 S 1000 5815 5802 0 80 0 - 29251 do_wai pts/0 00:00:00 bash
4 S 0 6069 1 0 80 0 - 27551 n_tty_ tty2 00:00:00 agetty
4 S 0 6491 1 0 80 0 - 27551 n_tty_ tty7 00:00:00 agetty
*** 下面的命令用于杀死某个终端的agetty进程这会导致所有用户创建的进程都被杀死。
# 杀死tty7的agetty进程
[zhangchenEDA ~]$ sudo systemctl stop gettytty7.service 使用下面的命令管理agetty进程在Linux启动时相应终端的自动创建。
# 允许启动时agetty进程在tty7自动创建
[zhangchenEDA ~]$ sudo systemctl enable gettytty7.service #
# 取消启动时agetty进程在tty7自动创建
[zhangchenEDA ~]$ sudo systemctl disable gettytty7.service
# 查询启动时agetty进程在tty7自动创建
[zhangchenEDA ~]$ systemctl is-enabled gettytty7.service使用下面的命令可以查询某个终端上的agetty进程的情况可以从其中的active看出此时agetty进程正在运行。
# 查询tty2上的agetty进程的情况
[zhangchenEDA ~]$ systemctl status gettytty2.service
● gettytty2.service - Getty on tty2Loaded: loaded (/usr/lib/systemd/system/getty.service; enabled; vendor preset: enabled)Active: active (running) since Sun 2024-09-22 18:12:50 CST; 6min agoDocs: man:agetty(8)man:systemd-getty-generator(8)http://0pointer.de/blog/projects/serial-console.htmlMain PID: 6069 (agetty)CGroup: /system.slice/system-getty.slice/gettytty2.service└─6069 /sbin/agetty --noclear tty2 linux当在某个终端上成功登录后此时再查询其agetty进程的情况会有些许不同可以看出agetty进程被login进程替换了(PID不变)如下所示。
# 在tty2登录成功后再查询tty2上的agetty进程的情况
[zhangchenEDA ~]$ systemctl status gettytty2.service
● gettytty2.service - Getty on tty2Loaded: loaded (/usr/lib/systemd/system/getty.service; enabled; vendor preset: enabled)Active: active (running) since Sun 2024-09-22 18:12:50 CST; 7min agoDocs: man:agetty(8)man:systemd-getty-generator(8)http://0pointer.de/blog/projects/serial-console.htmlMain PID: 6069 (login)CGroup: /system.slice/system-getty.slice/gettytty2.service‣ 6069 login -- zhangchen 此时bash运行在tty2上它的父进程是被进程替换后的login如下所示。
# 在tty2登录成功后再查询
[zhangchenEDA ~]$ ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
***
4 S 0 2606 1957 2 80 0 - 89542 ep_pol tty1 00:00:31 X
0 D 1000 5802 1 0 80 0 - 190042 flush_ ? 00:00:06 gnome-terminal
0 S 1000 5815 5802 0 80 0 - 29251 do_wai pts/0 00:00:00 bash
4 S 0 6069 1 0 80 0 - 34137 do_wai ? 00:00:00 login
4 S 1000 6960 6069 0 80 0 - 29293 n_tty_ tty2 00:00:00 bash
*** 下面的命令可以查询所有正在运行的agetty进程即使已成功登录仍然能查询到。
[zhangchenEDA ~]$ systemctl list-units --typeservice | grep getty
gettytty2.service loaded active running Getty on tty2 顺带一提如果某个终端正常退出登录(exit)后agetty进程在该终端又会重新出现但此时PID就是不同的了如下所示。
# 在tty2退出登录后再查询tty2上的agetty进程的情况
[zhangchenEDA ~]$ systemctl status gettytty2.service
● gettytty2.service - Getty on tty2Loaded: loaded (/usr/lib/systemd/system/getty.service; enabled; vendor preset: enabled)Active: active (running) since Sun 2024-09-22 18:29:46 CST; 23s agoDocs: man:agetty(8)man:systemd-getty-generator(8)http://0pointer.de/blog/projects/serial-console.htmlMain PID: 8212 (agetty)CGroup: /system.slice/system-getty.slice/gettytty2.service└─8212 /sbin/agetty --noclear tty2 linux 如果已经在tty2成功登陆再执行下面的命令则会导致该终端由用户登录后创建的进程都被杀死如果是tty2-tty6再次切换到它时系统又会自动在相应终端创建了一个agetty进程否则如图2所示。
# 杀死tty2的agetty进程
[zhangchenEDA ~]$ sudo systemctl stop gettytty2.service 在终端中使用startx命令会创建一个新的GUI界面不论是在CLI还是GUI界面创建的终端)。
# 创建GUI子进程
[zhangchenEDA ~]$ startx 如果使用下面的命令在tty1创建一个agetty进程会导致原本的GUI界面被杀死。
# 创建tty1的agetty进程
[zhangchenEDA ~]$ sudo systemctl start gettytty1.service