什么是 screen

screen 是一个在Linux和Unix系统中广泛使用的终端多路复用器(terminal multiplexer)。简单来说,它允许用户在一个物理终端窗口中创建和管理多个独立的虚拟终端会话。

为什么使用 screen

screen 最强大的功能在于,即使用户的SSH连接意外断开,或者用户主动分离(detach)会话,在screen会话中运行的程序也会继续在后台执行。这对于需要长时间运行的任务(如软件编译、数据备份、运行机器人或服务器程序)来说至关重要。

主要优点:

  1. 防止任务中断:网络断开或关闭终端时,远程服务器上运行的任务不会中断。
  2. 会话共享:多个用户可以连接到同一个screen会话,实时查看相同的终端内容,非常适合团队协作和远程教学。
  3. 多窗口管理:在一个screen会话中可以创建多个窗口,每个窗口就像一个独立的终端,可以轻松切换,便于同时处理多个任务。

安装

在大多数Linux发行版中,screen 通常已经预装了。如果你的系统没有安装,可以使用系统的包管理器来安装。

  • Debian/Ubuntu 系统:
    sudo apt update
    sudo apt install screen
    
  • CentOS/RHEL 系统:
    sudo yum install screen
    

基本用法

1. 创建新会话

直接输入 screen 即可创建一个新的匿名会话。但更推荐使用 -S 参数为会话命名,方便后续管理。

# 创建一个名为 my_session 的会话
screen -S my_session

2. 分离(Detach)会话

当你想让会话在后台继续运行并返回到主终端时,可以按下快捷键 Ctrl+a,然后再按 d

3. 查看会话列表

使用 -ls--list 参数可以列出所有正在运行的 screen 会话。

screen -ls

输出示例:

There is a screen on:
        12345.my_session      (Detached)
1 Socket in /run/screen/S-user.

4. 恢复(Resume)会话

使用 -r 参数加上会话的ID或名称,可以重新连接到一个已分离的会话。

# 通过名称恢复
screen -r my_session

# 或者通过ID恢复
screen -r 12345

如果会话因为网络问题等原因未能正常分离,你可能需要使用 -d -r 参数来强制恢复:

screen -d -r my_session

5. 终止会话

最简单的方式是在会话的终端中直接输入 exit 命令。 也可以在会话外部使用以下命令来终止指定的会话:

screen -X -S my_session quit

常用快捷键

screen会话中,所有快捷键都以 Ctrl+a 作为前缀。

  • Ctrl+a c : 创建一个新窗口 (create)
  • Ctrl+a n : 切换到下一个窗口 (next)
  • Ctrl+a p : 切换到上一个窗口 (previous)
  • Ctrl+a w : 显示所有窗口的列表 (windows)
  • Ctrl+a [0-9] : 切换到指定编号的窗口
  • Ctrl+a d : 分离当前会话 (detach)
  • Ctrl+a k : 关闭当前窗口 (kill)