与系统管理员使用的许多工具类似,Linux screen命令是另一个有助于提高工作效率的好工具。 screen可以被看作是Tmux的替代品,但它有许多其他有用的选项,不仅仅是节省屏幕空间。在本教程中,我将为您快速介绍screen,并介绍该命令的几个使用案例。
screen命令的主要优点
要强调screen的一些主要好处。
你可以通过SSH在远程终端上开始工作,脱离它,并在需要时从不同的计算机/设备上重新连接到同一终端上。
如果您的SSH连接中断,您的终端会话不会终止。相反,您的终端通过screen将处于 "连接 "状态,直到您在稍后时间重新连接,继续您离开的地方。
您可以在屏幕会话中运行长期运行的进程,而这些进程将以分离状态存在。
您可以通过屏幕向任何正在等待输入的进程发送命令。
在Linux服务器上安装screen
您可以利用您的操作系统软件包管理器来安装屏幕。
对于Debian/Ubuntu来说,你可以通过以下方式安装屏幕
$ sudo apt-get install screen
对于RHEL/CentOS/Fedora。
$ sudo yum install screen
关于screen命令使用场景
1. 开始一个屏幕会话
要开始一个新的screen会话,只需输入。
$ screen
现在你会看到一个新的空白终端打开了。要检查你是否在屏幕会话中,键入这个命令。
$ echo $TERM
如果你在一个screen会话中,输出将是屏幕或类似的东西(例如,screen.xterm-256color)。否则,它将打印xterm。
2. 从屏幕会话中脱离
现在让我们从我们的屏幕会话中分离出来。输入CTRL-a d来脱离。你会看到一些输出,显示你从你的会话中脱离。
你现在回到了原来的终端。
3. 检查可用屏幕会话的列表
接下来,让我们检查一下正在运行/可用的屏幕会话。下面的命令将显示当前可用的屏幕会话的列表和它们各自的状态(即,连接或分离)。由于只有一个会话可用,你将看到你的一个screen会话。您也会看到您目前已脱离该会话。
4. 附加到现有的屏幕会话
接下来,为了在之前创建的屏幕会话中连接回终端,你需要再次连接到该会话。
$ screen -x
如果有多个可用的屏幕会话,需要在-x后面指定会话的名称(见下面的多会话示例)。
5. 终止屏幕会话
如果你在屏幕会话里面输入退出,会话就会自动终止,以后就不能再连接到屏幕会话。
6. 在屏幕会话中向上/向下滚动
当您在屏幕会话中时,您会注意到不能使用终端程序的滚动条上下滚动您的终端会话。这是因为终端会话的输出是由屏幕工具控制的。要在屏幕会话中启用滚动,您需要按 "CTRL-a ESC "进入所谓的 "复制 "模式。一旦进入该模式,您可以使用 "上"/"下 "键或鼠标的滚动轮来上/下滚动您的屏幕会话。再按 "ESC "键退出 "复制 "模式。
这就是屏幕命令的快速概述。虽然一些系统管理员的屏幕知识到此为止,但这个工具还有很多其他选项,这又进一步帮助提高了工作效率。在本教程的其余部分,我将展示几个screen的使用案例。
用screen处理持续的SSH连接掉线问题
如果你通过SSH连接到你的屏幕会话,并在外面工作,但你失去了SSH连接,你的屏幕会话仍然会运行。即使你失去了连接,屏幕会话仍将处于连接状态。你可以在重新登录并运行 screen -ls 命令后看到这一点。
要重新连接到仍然处于 "连接 "状态的屏幕会话, 运行以下命令:
$ screen -d -x
然后,你将能够恢复你离开的SSH终端会话。
保持多个屏幕会话
如果你想拥有多个屏幕会话怎么办?例如,你有多个同事在同一个用户账户下在同一台服务器上工作?多屏幕会话在这种情况下会很有帮助。此外,您还可以通过为每个会话命名来帮助减少多个屏幕会话的混乱。要为你的屏幕会话创建一个名称,使用-S <session-name>选项。
$ screen -S session1
现在你可以再次运行screen -ls命令,查看多个屏幕会话。如果你想连接到一个特定的会话,使用-x <session-name>选项。
$ screen -x session1
另外,你也可以指定你要连接的屏幕会话的PID。
$ screen -x 925247
通过屏幕发送命令
屏幕内的另一个很好的选项是,如果你有一个正在运行的进程,正在等待输入,你可以通过屏幕发送命令。例如,当在Linux服务器上启动专用的Minecraft服务器时,你无法使用你的终端。提示符已经被正在等待输入/命令的服务器提示符所取代。这就是屏幕派上用场的地方。您可以创建您的屏幕会话,运行Minecraft服务器,并脱离回到您的正常终端提示。然后,有了屏幕,你可以通过它发送命令,而无需附加到你的会话。要通过屏幕发送命令,请运行以下命令。
$ screen -S session1 -X stuff "save$(printf \r)"
上面的命令利用-S作为会话名称,-X东西作为你指定屏幕会话的输入缓冲区,保存为你要运行的命令。你还想加入"$(printf \r) "来输入一个回车符来运行命令。
记录你的屏幕会话
屏幕中的另一个内置选项是日志。通过使用屏幕的经验,你会注意到一件事,那就是在屏幕会话中很难滚动浏览你的终端历史。你可以在你的屏幕会话中滚动,但它需要按键和在屏幕上上下滑动,如上所述。取而代之的是一种更简单的方式来查看终端历史记录,即使用屏幕记录选项。要利用屏幕会话的日志记录,只需在屏幕上运行 -L 命令行选项。
$ screen -L
当你需要检查你的终端历史记录时,只需脱离你的屏幕会话并查看你的日志。在默认情况下,屏幕的日志位于cwd(当前工作目录)中,也就是你第一次启动屏幕会话的地方,如果你不确定屏幕会话的cwd在哪里,你可以通过输入CTRL来检查。如果你不确定屏幕会话的cwd在哪里,你可以通过输入CTRL-a :exec pwd来检查。这将在屏幕上输出cwd--那是你的日志所在的地方。另外,默认情况下,日志文件名将被命名为screenlog.0。
这个教程给你快速介绍了在Linux主机上利用screen的基本知识。除了节省屏幕空间之外,它还有很多其他的好处,如在其他计算机/设备上分离和重新连接,节省宝贵的工作,避免因网络断开而丢失,以及向长期运行的进程发送命令。请务必查看屏幕和这个工具可以使用的许多其他命令/选项。