在 Linux 服务器管理和远程维护过程中,GNU Screen 是一款非常实用的工具。它不仅能在单个终端中同时运行多个会话,还支持会话的分离(detach)与恢复(reattach),即使你关闭了终端,正在运行的任务仍能保持运行状态。此外,Screen 还支持多人共享会话,非常适合远程协作和教学。
在处理长时任务,后台任务使用screen工具,不会因为关闭窗口导致任务终止,screen相对于nohup 可以再次进入到该绘画查看任务状态,nohup则无法做到。
1. Screen 的基本概念
Screen 是一个终端多路复用器,即在一个物理终端中创建多个虚拟终端。你可以在一个 screen 会话中创建多个窗口,每个窗口里运行独立的 shell 命令,且可以随时分离和恢复会话,这对于长时间运行的任务和远程 SSH 操作尤为重要。
2. 启动与命名会话
创建新的 Screen 会话
-
默认启动:
直接输入
screen命令,会启动一个新的 screen 会话,并进入该会话的虚拟终端。 -
指定会话名称:
使用
-S参数可以为会话命名,便于后续管理:screen -S mysession这样会创建一个名为
mysession的会话。
后台启动会话
如果希望在后台启动一个会话并执行特定命令,可以使用 -d -m 参数组合:
screen -d -m -S mysession bash -c 'echo "Running in screen"; sleep 100'
该命令将新建一个名为 mysession 的会话,在其中执行命令后立即返回当前终端,不会附加到会话界面。
3. 常用参数及其说明
Screen 提供了丰富的参数来满足各种使用需求。以下是一些常用参数:
| 参数 | 说明 |
|---|---|
-S <session> | 为会话指定名称,方便管理多个 screen 会话 |
-d | 使当前会话从终端分离(detach),会话仍在后台运行 |
-m | 即使没有终端连接,也强制创建新的 screen 会话 |
-r [session] | 恢复(reattach)指定的会话。如果会话已被附加,则默认不允许重复连接 |
-x [session] | 多重连接(multi attach),允许多个终端同时连接同一会话 |
-ls 或 -list | 列出所有当前存在的 screen 会话 |
-X <command> | 向指定会话发送命令,比如关闭会话:screen -S mysession -X quit |
-c <file> | 使用指定的配置文件启动 screen,默认配置文件为 ~/.screenrc |
-L | 开启日志记录,日志文件默认保存为 screenlog.0 |
-Logfile <file> | 指定日志文件的保存路径 |
-RR | 重新连接最近的会话,如无则新建会话 |
-D | 将已连接的会话从其他终端分离,但保持会话运行 |
-wipe | 清理无效的(僵死的)会话 |
4. 会话管理:分离与恢复
分离会话
在使用 screen 过程中,可以随时通过快捷键 Ctrl + A 后再按 D(即 Ctrl-A D)将当前会话分离。分离后,会话仍在后台运行,你可以安全关闭终端,而不会影响正在运行的任务。
恢复会话
恢复分离的会话主要有两种方式:
-
单一恢复(
-r):screen -r mysession该命令用于恢复指定的会话。如果会话已经被其他终端附加,则默认不能直接恢复,需要先分离其他连接。
如:
screen -d -r mysession或者
screen -D -r mysession前者先断开其他终端连接再恢复,后者则直接“踢出”其他连接的用户,再附加到会话。
-
多重连接(
-x):screen -x mysession此命令允许多个终端同时连接到同一个会话,适用于远程协作或教学场景。使用
-x时,无论会话是否已有连接,都能同时附加到该会话,各终端用户看到的屏幕内容实时同步。
5. Screen 内部快捷键
在进入 screen 会话后,默认的控制命令前缀是 Ctrl + A。以下是一些常见的快捷键:
| 快捷键组合 | 作用 |
|---|---|
| Ctrl + A, C | 创建一个新窗口 |
| Ctrl + A, N | 切换到下一个窗口 |
| Ctrl + A, P | 切换到上一个窗口 |
| Ctrl + A, " | 显示窗口列表,可选择切换窗口 |
| Ctrl + A, 0-9 | 直接跳转到相应编号的窗口 |
| Ctrl + A, D | 分离会话,返回本地终端 |
| Ctrl + A, K | 关闭当前窗口 |
| *Ctrl + A, * | 关闭整个 screen 会话(确认后终止所有窗口) |
| Ctrl + A, [ | 进入复制/滚动模式,可查看历史输出 |
| Ctrl + A, ] | 粘贴模式 |
| Ctrl + A, ? | 显示快捷键帮助 |
| Ctrl + A, X | 锁定屏幕,需要密码解锁 |
6. 实际使用示例
(1)创建并命名一个新的会话
screen -S mysession
进入会话后,可以启动多个窗口,并运行不同的命令。
(2)后台启动一个会话并执行命令
screen -d -m -S mysession bash -c 'echo "Hello, Screen!"; sleep 100'
会话在后台运行,适用于脚本调用和任务调度。
(3)列出当前所有会话
screen -ls
查看所有活动的 screen 会话及其状态。
(4)恢复会话(单一连接)
screen -r mysession
若会话已被其他终端附加,则需使用:
screen -d -r mysession
或
screen -D -r mysession
(5)多人共享会话
screen -x mysession
允许多个用户或终端同时连接到 mysession 会话,适合实时协作和远程教学。
(6)关闭会话
通过向会话发送退出命令:
screen -S mysession -X quit
也可以在会话内部使用快捷键 *Ctrl + A, * 退出所有窗口,从而结束会话。
7. 配置文件:定制化 Screen 行为
你可以在用户主目录下创建 ~/.screenrc 文件,定制 screen 的默认配置。例如:
# 设置启动时默认打开两个窗口,并命名
screen -t shell1 0
screen -t shell2 1
# 设置日志文件路径
logfile $HOME/.screenlogs/screenlog.%Y-%m-%d_%H:%M:%S
log on
# 设置命令前缀键为 Ctrl + A(默认)
escape ^Aa
保存后,每次启动 screen 时会自动加载这些配置,简化日常操作。
8. 总结
GNU Screen 是一个功能强大且灵活的终端多路复用工具,适用于长时间任务的管理、远程维护以及多人协作。无论是简单地创建和恢复会话,还是通过 -x 参数实现多人共享,Screen 都能大大提高工作效率。在实际使用过程中,合理利用其丰富的参数和快捷键,可以使你在 Linux 服务器管理中得心应手。
通过本文的介绍,希望你对 screen 有了更深入的了解,并能在实际工作中灵活运用这一工具,提升系统管理和远程协作的效率。Happy Screening!