N

screen 终端复用工具完整使用指南


图号 FTS-BLOG-015 · 比例 1:1

日期 2026/9/4 · 阅读时间 19 min · 浏览 14

screen 是一款经典的终端复用器(Terminal Multiplexer),其最大价值在于:即使你的 SSH 连接断开、网络波动或关闭终端窗口,在其中运行的长时任务(如模型训练、数据拷贝、服务编译)也不会中断。你可以随时重新连接,恢复之前的工作界面。

📦 安装

# Debian / Ubuntu
sudo apt install screen

# RHEL / CentOS / Fedora
sudo yum install screen   # 或 dnf install screen

# macOS (Homebrew)
brew install screen

screen 是一款经典的终端复用器(Terminal Multiplexer),其最大价值在于:即使你的 SSH 连接断开、网络波动或关闭终端窗口,在其中运行的长时任务(如模型训练、数据拷贝、服务编译)也不会中断。你可以随时重新连接,恢复之前的工作界面。

📦 安装

# Debian / Ubuntu
sudo apt install screen

# RHEL / CentOS / Fedora
sudo yum install screen   # 或 dnf install screen

# macOS (Homebrew)
brew install screen

🚀 基础工作流(三步走)

1. 创建会话

screen -S session_name
  • -S 必须大写,用于为会话指定一个有意义的名称(如 traincopy_log)。
  • 执行后你会进入一个新的终端,看起来和普通 shell 一模一样。

2. 在会话中运行任务

正常执行任何命令,例如:

python train.py --epochs 100
tail -f /var/log/syslog

任务会在这个 screen 会话中运行。

3. 分离会话(Detach)

快捷键Ctrl + a,松开,再按 d

  • 你会回到创建会话前的终端,而 screen 会话及其内部任务继续在后台运行。
  • 分离后,终端会显示类似 [detached from 12345.session_name] 的信息。

4. 重新连接会话

# 列出所有活跃会话
screen -ls

# 重连指定会话(通过名称或 ID)
screen -r session_name
screen -r 12345   # 使用 screen -ls 看到的 ID

⌨️ 核心快捷键大全

所有 screen 快捷键都以 Ctrl + a 为前缀(先按 Ctrl+a,释放后再按下一个键)。

快捷键 功能说明
Ctrl+a c 创建新窗口(在当前会话中新建一个终端窗口)
Ctrl+a " 列出所有窗口,用方向键选择并切换
Ctrl+a n 切换到 下一个 窗口
Ctrl+a p 切换到 上一个 窗口
Ctrl+a A 重命名当前窗口(给窗口起一个便于识别的名字)
Ctrl+a d 分离当前会话(回到外层终端)
Ctrl+a [ 进入 复制/滚动模式(可用方向键或 PageUp/Down 翻页)
Ctrl+a ] 粘贴 之前复制的内容
Ctrl+a ? 显示所有快捷键帮助
Ctrl+a S 水平分割窗口(Split horizontally)
Ctrl+a | 垂直分割窗口(Split vertically,部分版本支持)
Ctrl+a Tab 在分割的区域间切换焦点
Ctrl+a X 关闭当前分屏区域(不关闭窗口)
Ctrl+a Q 关闭所有分屏,只保留当前窗口

提示:复制/滚动模式中,按 Space 开始选择文本,再按 Space 结束选择并复制到缓冲区,随后用 Ctrl+a ] 粘贴。


🔧 高级用法与常见场景

1. 窗口管理(在一个会话中多任务)

  • 创建多个窗口:Ctrl+a c(可创建多个)
  • 窗口间快速切换:Ctrl+a n / p
  • 查看所有窗口列表:Ctrl+a "(弹出一个可交互列表)

2. 分屏操作

  • 水平分割:Ctrl+a S
  • 垂直分割:Ctrl+a |(注意是管道符,有时需要 Shift+\)
  • 在分屏间跳转:Ctrl+a Tab
  • 每个分屏可以显示不同窗口内容,或通过 Ctrl+a c 在分屏中再创建新窗口。

3. 会话共享(多用户协作)

如果多个用户登录同一台机器,可让两人同时接入同一个 screen 会话(需设置多用户模式,此处略,但基础用法是加上 -x 参数):

screen -x session_name   # 共享会话(只读+可写)

4. 强制分离远端已连接的会话

当你尝试 screen -r 时提示 There is no screen to be resumed matching ... 或会话状态为 Attached 时,说明该会话被其他终端占用(可能因网络闪断而卡住),可强制分离:

screen -d -r session_name

这会先分离远端“僵尸”连接,再将你重新连上。

5. 彻底关闭会话

  • 在窗口内输入 exit 或按 Ctrl+d,会关闭当前窗口;若会话内所有窗口都关闭,则会话结束。
  • 从外部强制结束整个会话:
screen -X -S session_name quit

⚠️ 故障排查

现象 解决办法
screen -r 无法重连,提示 Attached 使用 screen -d -r session_name 强制分离并重连
忘记会话名称 screen -ls 列出所有会话及其 ID/名称
想挂起当前窗口但不想分离 Ctrl+a z 会将当前窗口放到后台(fg 可恢复)
滚动查看历史输出 进入复制模式 Ctrl+a [,然后用方向键或 PgUp/PgDn 滚动
不小心关闭了终端,会话还在吗? 在,screen 设计初衷就是为了应对断线,重连即可
screen -S 报错 -S: command not found 说明未安装 screen,请先安装

🧠 常见误区澄清

  • -S 必须大写:用于命名会话;小写 -s 用于指定默认 shell(几乎用不到)。
    screen -S mytask
    screen -s mytask(这会让 screen 尝试用 mytask 作为 shell 程序,会失败)

  • chmod -Rscreen 无关:不要在 /etc/nginx 等系统目录滥用 777 权限,这会导致服务启动失败,但这不是 screen 的问题。


📝 快速参考卡片

# 创建
screen -S name

# 分离
Ctrl+a d

# 列出
screen -ls

# 重连
screen -r name

# 强制重连
screen -d -r name

# 关闭
screen -X -S name quit

# 新建窗口(会话内)
Ctrl+a c

# 切换窗口
Ctrl+a n / p

# 分屏
Ctrl+a S   # 水平
Ctrl+a |   # 垂直

🔗 延伸阅读


记录时间:2026-09-04
适用环境:Linux / macOS / WSL

#终端 #screen

← 上一篇 · OLDER DSH (DeepSeek Harness) Web部署完整教程

← BACK TO INDEX