screen 是什么
screen 是终端复用器:在一个物理终端里开多个虚拟会话,SSH 断开后会话依然活着,重新登录用 screen -r 就能连回原现场,包括滚动历史与正在运行的任务。它常被当作「带恢复能力的 nohup」使用——跑升级脚本、长时间数据传输、风险较高的重启操作时先开一个 screen 会话,即使网络抖动断线,任务也不会被挂断信号带走。
基本信息
| 适用平台 | GNU/Linux、macOS(多数发行版需安装 screen 包) |
|---|---|
| 语法 | screen [-S 会话名],screen -ls 列出,screen -r 恢复 |
| 后台创建 | screen -dmS 名称 命令 |
| 分离会话 | 会话内按 Ctrl+A 再按 D |
| 结束会话 | screen -S 名称 -X quit |
| 替代工具 | tmux(功能更强,快捷键体系更统一) |
典型使用场景
- 通过 SSH 执行升级或迁移,防止断线导致任务半途丢失。
- 长时间运行的数据传输、编译、备份任务的后台托管。
- 在同一台机器上并行开多个互不干扰的操作会话。
- 排障时把会话共享给同事查看(注意共享意味着对方能看到全部内容)。
- 临时替代服务化托管跑一次性长任务,完成后主动清理会话。
常用写法
常用写法
screen -S deploy # 新建并进入命名会话
screen -ls # 列出会话及状态(附加或分离)
screen -r deploy # 重新连上指定会话
screen -dmS backup ./backup.sh # 后台创建会话直接跑任务
screen -S deploy -X quit # 结束指定会话
screen -ls | grep Detached # 找出遗留的分离会话
# 会话内操作:Ctrl+A 然后按 D 分离,Ctrl+A 后按 ? 查看快捷键命令与操作对照
| 命令或操作 | 作用 | 使用要点 |
|---|---|---|
| screen -S 名称 | 新建命名会话 | 命名后便于恢复与清理 |
| screen -ls | 列出会话 | 看清每个会话是附加还是分离状态 |
| screen -r 名称 | 恢复会话 | 已被附加时会冲突,需先分离 |
| screen -dmS | 后台创建会话 | 适合脚本化启动长任务 |
| Ctrl+A 再按 D | 分离会话 | 先按组合键再单独按 D,不是同时按 |
| -X quit | 结束会话 | 任务结束后及时清理,避免堆积 |
分离会话的按键是 Ctrl+A 之后松开再按 D,不是三个键同时按。第一次用的人常因为说明不清楚以为功能失效,实际是按键方式不对。
会话是长期存在的资源:任务结束后忘记退出会在服务器上堆积大量分离会话,占用内存也干扰后续排查,建议定期用 screen -ls 检查并清理。
需要多人共享同一个会话时要清楚共享意味着对方能看到并操作会话内的一切;生产环境建议一人一会话,避免误操作与责任不清。