VPS推荐

30分钟入门Linux Screen命令使用教程

Pinterest LinkedIn Tumblr

假设通过ssh登录搬瓦工Vultr服务器,由于网络问题失去了互联网连接。与服务器的连接断开,远程shell会话被终止。在会话中打开的任何程序和文件也会被突然终止,必须在登录后重新打开所有内容,这时候某些文件甚至可能会损坏。Screen是解决此问题的方法,本文整理了Linux Screen命令使用教程。

screen命令使用教程

Screen是在SSH连接上运行的窗口管理器。它的功能有两个:

  1. 作为其他基于文本的应用程序的持久包装器
  2. 在自身内部运行多个终端窗口(终端复用)

工作原理

Screen启动窗口管理器并将您连接到它。在窗口管理器中,您启动、运行和终止不同的窗口。窗口包含不同的应用程序。如果连接丢失或关闭,则窗口管理器在服务器上继续运行。所有窗口管理器内的打开窗口也将继续运行。重新登录后,您将重新连接到窗口管理器的运行会话中。您会发现所有先前打开的文件和程序仍在窗口管理器中运行。

兼容性

本指南已在运行GNU Screen 4.08的Ubuntu 20.04 LTS上进行了彻底测试。但是,它应与所有最新版本的Screen和所有最近的Linux和基于BSD的操作系统兼容。

Linux Screen命令使用教程

1. 入门

第一步显然是安装Screen。请注意,您需要使用root权限执行此操作。在大多数操作系统上,应用程序包称为screen

在Ubuntu上:

# apt install screen

在FreeBSD上:

# pkg install screen

这将安装最新版本的Screen。快速检查它是否已安装在系统上。

# screen -v

这将显示Screen安装的版本号。输出应该类似于:

Screen version 4.08.00 (GNU) 05-Feb-20

2. 启动Screen

要启动Screen,请发出以下命令:

$ screen

这将启动一个新的Screen会话并将您连接到它。

  • 最佳实践:建议使用唯一名称启动新的Screen会话。这样更容易以后访问会话。

使用以下命令启动已命名会话:

$ screen -S <session_name>

如果没有在启动会话时命名它,则可以从Screen的内置命令行更改活动会话的名称。在活动的Screen会话中按Ctrl+A :打开内置命令行。在内置命令行上,发出命令:

sessionname <new_session_name>
  • 注意:内置命令行用于向Screen本身发出命令。要访问它,请按Ctrl+A,然后输入您要发出的命令。要退出内置命令行,请按Esc

3. 窗口

在Screen会话中,您创建一个或多个窗口。在这些窗口中,您打开文件并运行程序。

3.1 创建新窗口

在启动新会话后,使用命令键序列Ctrl+A C创建新窗口。按住Ctrl键并按A键,然后释放两个键并按C键。您可以像这样创建任意数量的新窗口。

  • 提示:在实践中,您可能希望为不同的用途使用不同的窗口。例如,您可以为监视日志创建一个窗口,为检查数据库创建另一个窗口等等。您可能还想为每个窗口赋予独特且相关的名称,以便以后更轻松地参考。

3.2 命名窗口

命名窗口可在多个窗口之间导航时更轻松。要为活动窗口命名,请按Ctrl+A :以访问内置命令行并输入以下命令:

title <window_name>

在输入上述命令后,没有即时反馈。当您检查打开窗口的列表时(下一节中描述),您将看到已重命名的窗口。

3.3 导航不同的窗口

按命令键序列Ctrl+A "以查看所有打开窗口的列表。窗口列表在最左侧列中显示每个窗口的编号。第二列显示窗口的名称(如果您已为其命名)或shell的名称。您可以通过以下三种方式导航窗口:

  1. 使用箭头键导航打开窗口的列表,并按Enter以切换到所选窗口。按Esc隐藏打开窗口的列表并重新显示上一个活动窗口(如果您想查看打开窗口的列表而不导航到另一个窗口)。
  2. Ctrl+A Number使用其编号导航到窗口。
  3. Ctrl+A P转到上一个窗口,按Ctrl+A N转到下一个窗口。这两个命令键序列在所有打开的窗口中循环。

3.4 关闭窗口

要终止不再需要的窗口,请激活该窗口,在其中关闭任何打开的程序,并在该窗口的命令行上按Ctrl+D以终止它。当会话的最后一个窗口被终止时,Screen实例也会终止。

还可以通过按Ctrl+A K来终止活动窗口。不建议这样做,因为它直接终止窗口以及其中打开的任何程序或文件。这可能会导致数据损坏。

4. 会话

每个屏幕实例称为会话。会话包含窗口。

4.1 连接到新会话

使用 screen 命令启动屏幕时,它会启动一个新会话并将您连接到它。您可以同时运行多个会话。请确保从不同的终端启动每个会话。

重要提示: 嵌套会话(在另一个会话内启动新会话)虽然可能,但既不推荐,也通常不必要,也不容易做到。正确地做这件事需要配置文件更改,不正确地做这件事会导致问题。它也超出了这个入门指南的范围。

4.2 会话概述

使用以下命令查看正在进行的会话列表:

$ screen -ls

直接从终端输入上述命令。它也可以在屏幕会话中使用。

输出看起来像这样:

There are screens on:
        1306228.test    (30/06/22 12:24:43 AM IST)      (Attached)
        1216515.pts-0.TP15      (29/06/22 10:57:17 AM IST)      (Detached)
2 Sockets in /run/screen/S-user.

第一列是会话 ID。ID 的第一部分是会话的 pid。在上面的示例中,第一个会话的名称是 test。第二个会话没有由用户命名,而是采用默认名称。第二列是会话开始时间。最后一列是已连接/已分离状态。

提示: 如果您发现自己在终端上,并且不知道自己是否在屏幕会话中,请检查 STY 环境变量。

$ echo $STY

如果您在屏幕会话中,则输出是会话的 ID。否则,输出为空行。

4.3 从会话断开连接

要从会话断开连接并使其保持运行状态,请按 Ctrl+A D 分离会话。稍后,您可以重新连接到正在运行的会话。

4.4 重新连接到旧会话

要重新连接到会话,您需要选择要重新连接到的会话。在命令行中键入 screen -ls 以查看正在进行的会话列表。要连接到活动会话,请在终端中输入:

$ screen -x <session_name>

$ screen -x <session_pid_or_ID>

示例: 要重新连接到第 4.2 节中示例输出中的第一个会话,请在终端中输入以下任何一个命令:

$ screen -x 1306228
$ screen -x 1306228.test
$ screen -x test

重新连接时,您在断开连接之前打开的文件和程序仍将保持打开状态。

注意: 为了避免嵌套会话,请勿从正在运行的会话中重新连接到已分离的会话。

4.5 终止会话

当您不再需要会话时,请终止它。

有两种方法可以终止活动会话:

  1. 关闭会话中的所有窗口。当会话的最后一个窗口关闭时,会话本身会自动终止。
  2. 使用 Ctrl+A : 访问内置命令行,并发出 quit 命令。

通过在终端中输入以下命令终止已分离的会话:

$ screen -S <session_name_or_session_id> -X quit

回想一下,您可以使用命令 screen -ls 在终端中获取会话名称和 ID 的列表。

不建议使用最后两种方法,因为它们直接杀死会话以及其中打开的任何程序或文件。这有时会导致数据损坏。

5. 区域

在实践中,您可能希望并排打开不同的文件。例如,如果您正在编写和测试处理日志的脚本,则可能希望将日志打开在脚本旁边。布局允许您将窗口并排或一个在另一个下方排列。为此,请将可见区域分成窗格;这些窗格称为区域。在每个区域中,创建或连接窗口。

注意: 区域是一个稍微复杂的主题,需要一些练习才能感到舒适。

5.1 创建区域

使用 Ctrl+A | 垂直拆分区域,使用 Ctrl+A Shift+S 水平拆分区域。拆分会调整(缩小)活动区域并在其旁边或下面添加一个新区域。新区域最初是一个空面板。

导航到新区域(在下一节中描述)并使用 Ctrl+A C 创建新窗口。您也可以通过导航到该窗口(第 3.3 节)将现有窗口附加到活动区域。

5.2 导航区域

Ctrl+A Tab 依次循环浏览每个区域。同样,Ctrl+A Shift+Tab 反向循环浏览区域。

重要提示: 退出会话后,不会保留区域。重新连接具有分割区域的会话时,不会保留分割。重新连接后,只保留最后一个活动区域。

5.3 保存布局

要在断开连接时保留分割区域,您需要保存布局。在活动的屏幕会话中按 Ctrl+A : 并在内置命令行中发出以下命令:

layout save default

注意: 屏幕布局是一个大主题,细节超出了这个入门指南的范围。

5.4 关闭区域

Ctrl+A Shift+X 杀死活动区域,而 Ctrl+A Shift+Q 则杀死除活动区域以外的所有区域。

杀死区域不会终止附加到其中的窗口。

当您杀死区域中的活动窗口时,下一个打开的窗口会附加到该区域。

6. 复制和粘贴测试

要复制文本,请首先使用 Ctrl+A [ 进入复制模式。然后,在复制模式下,使用箭头键导航窗口内容。按空格键开始标记要复制的文本。再次按空格键停止标记文本,将标记的文本复制到缓冲区中并退出复制模式。现在按 Ctrl+A ] 在提示符处粘贴复制的文本。

7. 示例

在实践中使用屏幕之前,最好检查它是否正常工作,并验证您可以关闭与运行会话的连接并重新连接到它。

  1. 在本地计算机上启动终端。
  2. 可选:SSH 到远程服务器上的终端(如果您有访问权限)。
  3. 运行 screen -S test 以启动名为 test 的新会话。如果您没有登录到远程服务器,则屏幕会话在本地计算机上运行。
  4. 使用 Ctrl+A C 在此会话中创建一个新窗口。
  5. 在此窗口中运行 ls,以查看工作目录的目录列表。
  6. 关闭终端。它可能会发出有程序正在运行的警告。无论如何关闭它。
  7. 了解终端已关闭,但屏幕程序仍在计算机上运行。
  8. 启动新终端。
  9. 运行 screen -ls 以查看正在运行的会话列表。名称为 test 的会话应在列表中。
  10. 使用 screen -x test 连接到它,您应该看到之前关闭前窗口的状态。

8. 结论和下一步

这是屏幕和如何在现实生活中使用它的快速介绍。官方 GNU Screen 文档是学习所有这些的好地方。一个有趣的主题是在多个用户之间共享远程屏幕会话