GNU Screen 是一个终端多路复用器,它允许在主终端中有多个终端会话。
那么为什么我们需要 GNU Screen? 有时我们可能会遇到一些问题,比如由于网络问题而自动终止远程 ssh 连接。如果任务在生产环境中运行,可能会很痛苦。因此,为了处理这类问题,建议单独的屏幕会话,它不会随着终端会话的结束而终止。
在 Linux 和 Unix 系统中,有一种终端多路复用工具叫做 screen,它用于管理终端会话。在本文中,我们将介绍在生产系统中处理重要任务时如何在 Linux 中使用 GNU Screen 来管理终端会话。
安装 screen
在 Linux 系统下安装屏幕包简单易行。一些现代操作系统预装了屏幕应用程序。运行以下命令验证屏幕的可用性。
$ screen --version
Screen version 4.08.00 (GNU) 05-Feb-20
如果获得其他输出,则说明系统上没有可用的屏幕工具。执行以下命令安装屏幕包。
Ubuntu/Debian
$ sudo apt-get install screen -y
RHEL/CentOS
$ sudo yum installs screen -y // RHEL 7
$ sudo dnf install screen -y // RHEL 8
启动 screen
安装完成后,只需运行命令屏幕来启动屏幕会话。
$ screen
创建带有名称的 screen 会话
使用屏幕命令跟随选项 -s,您可以创建一个命名的屏幕会话。在此示例中,我使用了屏幕 Linuxtechi 作为屏幕会话的名称。您可以选择自己的名字。
$ screen -S screen-linuxtechi
查看 screen 命令参数
screen 提供了一些有用的参数和命令。要列出可用参数,请按 ctrl+a
,然后按 ?
查看 screen 会话
使用下面的命令列出可用的屏幕会话
$ screen -ls
分离 screen 会话
screen 提供了一个有用特性,您可以分离 screen 会话并在需要时重新附加。要分离当前screen 会话,请按 ctrl + a
,然后按 d
重连 screen 会话
使用选项 -r
可以重连分离的 screen 会话。使用命令 screen -ls 列出已分离的会话,找到屏幕会话名称并重连。在这个例子中,我已经重连了会话 25148.pts-0.LinuxTechi
$ screen -ls
$ screen -r 25148.pts-0.LinuxTechi
也可以使用屏幕 id 或名称重连会话。在上面的示例中,25148 是 id , pts-0.LinuxTechi 是名称。
$ screen -r 25148
$ screen -r pts-0.LinuxTechi
拆分 screen 窗口
有时,您可能需要将屏幕窗口拆分为多个屏幕来执行多个任务。
垂直拆分
要垂直分割 Linux 屏幕窗口,请按 ctrl + a
然后按 |
,通过重复相同的过程,可以分割 n 个屏幕窗口。
水平拆分
要水平分割 Linux 屏幕窗口,请按 ctrl + a
然后按 S
(大写),通过重复相同的过程,可以分割 n 个屏幕窗口。
在分裂 screen 会话中创建新的终端
无论您是水平分割屏幕还是垂直分割屏幕,都不会创建任何新的终端。要在屏幕中创建新的终端,需要先使用 ctrl + a
和 tab
切换到新的分屏屏幕窗口。然后按 ctrl + a
和 c
(小写) 创建一个终端。
撤销分割的 screen 窗口
要撤销已分割的屏幕窗口,使用 ctrl + a
和 Q
键
锁定 screen 会话
为了防止未经授权的访问,可以锁定屏幕会话,而不锁定正常会话用户。要锁定屏幕终端,使用命令 ctrl + a
和 x
(小写) ,系统将提示您设置密码、应用保护密码,仅此而已。
找到 screen 会话的所有者
屏幕会话存储在目录 /var/run/screen 中,列出目录中存储的内容以找到屏幕的所有者。
$ ls -ltr /var/run/screen
终止 screen 会话
当任务完成时,您可以使用 ctrl + a
和 k
命令销毁屏幕会话。系统将提示您进行用户确认,键入 y
以终止会话。
访问 screen 帮助页面
$ screen --help
或者使用 man 命令
$ man screen
一些有用的 screen 命令参数
ctrl + a
+c
=> 创建带有终端的新窗口ctrl + a
+?
=> 查看参数列表ctrl + a
+A
=> 重命名当前窗口ctrl + a
+tab
=> 切换到下一个窗口ctrl + a
+S
=> 水平拆分窗口ctrl + a
+|
=> 垂直拆分窗口ctrl + a
+d
=> 分离 screenctrl + a
+k
=> 终结 screen
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。