Linux screen的用法及技巧

300 阅读6分钟

在 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!