Administrator
发布于 2026-05-13 / 3 阅读
1

GNU Screen 完全使用指南

screen 命令使用指南

# 📟 GNU Screen 完全使用指南

> 终端复用神器 —— 会话不中断 · 多任务并行 · 远程协作利器  
> 即使断开 SSH 连接,任务依然在后台稳定运行,随时恢复。

---

## 🚀 快速入门

### 安装 screen

```bash
# Ubuntu / Debian
sudo apt install screen

# CentOS / RHEL
sudo yum install screen

# macOS
brew install screen

验证安装:screen --version

核心三步骤

操作 命令 / 快捷键 说明
创建会话 screen -S mytask 强烈建议命名,便于管理
分离会话 Ctrl + A ,然后按 D 任务在后台继续运行
恢复会话 screen -r mytask 重新连接到后台会话

🗑️ 删除 / 终止会话

方法一:在会话内退出(最常用)

# 进入目标会话后直接输入
exit

或按快捷键 Ctrl+AK 并确认 Y

方法二:外部命令优雅关闭(不需要进入会话)

# 先查看所有会话
screen -ls

# 终止指定会话(使用名称或ID)
screen -X -S mytask quit
# 或使用ID:screen -X -S 12345 quit

方法三:批量操作与强制清理

# 终止所有 detached 状态的会话
screen -ls | grep Detached | awk '{print $1}' | cut -d. -f1 | xargs -I{} screen -X -S {} quit

# 杀死所有 screen 进程(谨慎!)
killall screen

确认删除成功

screen -ls   # 已删除的会话不再显示

⌨️ 核心快捷键大全

所有快捷键以 Ctrl + A (C-a) 为前缀,先按 Ctrl+A 松开后再按下一个键。

快捷键 功能说明 应用场景
C-a c 创建新窗口 同一会话中开启多个独立终端
C-a p / C-a n 切换到上一个/下一个窗口 窗口间快速导航
C-a " 窗口列表(可视化选择) 显示所有窗口,方向键选择
C-a A 重命名当前窗口 给窗口起有意义的名字
C-a d 分离会话 Detach 临时离开,进程继续后台运行
C-a S 水平分屏 将终端区域上下分割
C-a |C-a v 垂直分屏 左右分屏,同时查看多任务
C-a Tab 切换活动区域 光标在不同分屏区域跳动
C-a Q 关闭除当前区域外的所有分屏 快速恢复单窗口模式
C-a X 关闭当前分屏区域 移除当前聚焦的拆分区域
C-a [ 进入复制/回滚模式 使用 PgUp/PgDn 翻阅历史输出
C-a ] 粘贴文本 将复制模式中选中的文本粘贴
C-a ? 显示帮助菜单 忘记快捷键时随时查看

🎯 进阶技巧

1. 启动时直接执行命令

screen -S backup bash backup.sh

任务结束后会话自动退出,无需手动干预。

2. 分屏完整工作流

# 1. 进入会话
screen -S dev

# 2. 水平分屏
Ctrl+A S

# 3. 切换到新区域并创建窗口
Ctrl+A Tab
Ctrl+A c

# 4. 垂直分屏(若需要)
Ctrl+A |

# 5. 在不同区域运行不同任务:日志监控、代码编辑、命令执行

3. 多人实时协作

# 用户A
screen -S pair

# 用户B(附加到同一会话)
screen -x pair

两人同时观看/操作同一个会话,适合结对编程或远程教学。

4. 自动记录会话日志

# 启动时开启日志
screen -L -S logtest
# 输出自动保存到 screenlog.0 文件

# 动态开启/关闭日志(进入会话后)
Ctrl+A : log

📋 常用命令速查表

命令 说明
screen -S <name> 创建并命名会话
screen -ls 列出所有会话 (Attached/Detached)
screen -r <name|id> 恢复离线(Detached)会话
screen -D -r <name> 强制接管 Attached 会话(踢掉旧连接)
screen -X -S <name> quit 从容终止指定会话
screen -X -S <name> kill 强制杀掉会话(同 quit)
screen -wipe 清理已结束但仍残留的死会话
screen -dmS <name> <command> 后台模式启动并执行命令(不进入界面)

⚠️ 常见问题 & 解决方案

❌ “There is no screen to be resumed matching xxx”

解决:确保会话存在 screen -ls;若状态为 Attached,使用 screen -D -r 会话名 强制接管。

❌ 关闭终端窗口后,我的任务会消失吗?

不会。 只要之前执行过分离(Ctrl+A d)或在 screen 中启动任务后直接关闭终端,任务不会中断。重新 SSH 后用 screen -r 重连即可。

❌ 如何彻底清理所有 screen 会话?

# 终止所有会话
killall screen
# 或逐个清理
screen -ls | grep -v "No Sockets" | awk '{print $1}' | cut -d. -f1 | xargs -I{} screen -X -S {} quit

✅ 最佳实践

  1. 始终用 -S 命名会话,避免遗忘 ID
  2. 长时间任务务必在 screen 中运行,防止网络波动导致中断
  3. 搭配 crontab 使用 screen -dmS 实现稳健的后台任务调度
  4. 删除前先 screen -ls 确认,避免误杀重要作业
  5. 利用分屏提升多任务处理效率

🧪 场景演练:一条龙

# 场景1:部署服务并分离
screen -S webapp
npm run start
# Ctrl+A, d 分离

# 场景2:排查问题(分屏监控日志)
screen -r webapp
# Ctrl+A, c 新建窗口运行 htop
# Ctrl+A, Tab 回到原窗口
# Ctrl+A, S 水平分屏,下方运行 tail -f error.log

# 场景3:结束会话
screen -r webapp
exit   # 会话终止,所有子窗口关闭

📌 快速参考卡

screen -S task          # 创建会话
screen -ls              # 查看所有会话
screen -r task          # 恢复会话
Ctrl+A , D              # 分离会话
exit                    # 退出并终止会话
screen -X -S task quit  # 外部终止会话

掌握 screen,让命令行工作流具备真正的弹性 —— 无论网络波动还是终端崩溃,工作永不丢失。