screen 命令速查表 - 终端会话管理常用命令大全

SSH 断线时正在跑的编译、被误关的编辑现场,本质损失都来自会话与网络连接绑定;screen 和 tmux 都是在终端本地再挂一层持久会话,让程序活在网络之外。选 screen 是因为它几乎在所有发行版和 macOS 上已预装,且会话模型足够简单:screen -S 名字 新建命名会话,Ctrl-a d 分离,screen -r 名字 重新接入。窗口与分屏两组对应窗口切换(Ctrl-a c 新建、n/p 前后翻)与垂直水平切分(Ctrl-a S、Ctrl-a |)。复制模式最容易卡住——screen 没有系统级选择复制,必须 Ctrl-a [ 进入 copy mode,y 复制,再 Ctrl-a ] 粘贴。与 tmux 的分界:需要插件、脚本化布局或共享会话时 tmux 更好;不想装、或要快速接管遗留会话时 screen 更省事。

系统与运维·共 38 条命令·最后更新 2026-07-21
screen终端ssh复用

典型使用场景

面向需要在 SSH 断线后任务还能继续跑的场景:线上编译、训练任务、tail -f 日志、临时隧道。screen 在最小化容器、老旧发行版、嵌入式设备里几乎总有,而 tmux 常常没有,所以它是「保底可用」的那一个。真正值得掌握的不是快捷键列表,而是会话生命周期:创建、脱离、找回、彻底结束这四步。其中 `screen -RD` 几乎可以替代你记忆中的所有恢复命令——它先踢掉别人(比你)占着的会话再接上去,不会报 "already attached"。

会话管理 Session 8

screen -S name
创建命名会话
screen -ls
列出所有会话
screen -r name
连接到指定会话
screen -d name
分离会话(不终止)
screen -x name
附加到已附加的会话(多终端共享)
screen -X -S name quit
终止指定会话
Ctrl+a d
脱离当前会话(会话继续后台运行)
screen -RD name
强制分离远程会话并附加(最常用恢复方式)

窗口 Window 8

Ctrl+a c
创建新窗口
Ctrl+a n / p
切换到下一个 / 上一个窗口
Ctrl+a 0-9
切换到指定编号窗口
Ctrl+a A
重命名当前窗口
Ctrl+a k
关闭当前窗口(确认)
Ctrl+a w
列出所有窗口
Ctrl+a "
交互式选择窗口
Ctrl+a Ctrl+a
在当前和上一个窗口间切换

分屏 Split Screen 5

Ctrl+a S
水平分屏(上下)
Ctrl+a |
垂直分屏(左右,需 screen 4.1+)
Ctrl+a Tab
在分屏间切换焦点
Ctrl+a X
关闭当前分屏
Ctrl+a Q
关闭所有分屏(只留当前)

复制模式 Copy Mode 6

Ctrl+a [
进入复制模式,可翻页和选择文本
Space
开始选择(vi 模式)
Enter
复制选中内容
Ctrl+a ]
粘贴最近复制的文本
Ctrl+a Esc
退出复制模式
PageUp / PageDown
翻页

其他操作 Other 5

Ctrl+a ?
查看所有快捷键
Ctrl+a :
进入命令模式
Ctrl+a H
开始/停止记录日志
Ctrl+a x
锁定会话(需密码)
screen -dmS name cmd
后台创建会话并执行命令

配置 .screenrc Configuration 6

startup_message off
关闭启动版权提示
defscrollback 10000
设置滚动缓冲区为 10000 行
term xterm-256color
设置终端类型支持 256 色
escape ^Bb
修改前缀键为 Ctrl+b(避免与终端冲突)
screen -t editor 1 vim
启动时自动创建命名窗口并执行命令
caption always "%n %t"
底部始终显示窗口编号和标题

参数矩阵

参数作用示例
screen -dmS name cmd后台创建会话并直接执行命令,不占用当前终端,最常用的一次性后台任务写法screen -dmS name cmd
screen -RD name强制分离远端会话并附加进来,恢复会话的首选,附加失败也不报错screen -RD name
screen -x name同时附加到已附加的会话,多人共享同一屏(排障时让两个人看同一份输出)screen -x name
screen -X -S name quit从会话外部直接结束指定会话,不需要先进去再 exitscreen -X -S name quit
Ctrl+a d脱离当前会话而进程继续运行;注意不是 Ctrl+a k(那会杀掉窗口)Ctrl+a d

易错点与避坑指南

现象screen -r name 报 "There is a screen on: xxx attached",接不进去。

原因该会话还挂在一个已断线的终端上,screen 认为它被占用。

处置改用 screen -RD name 强制分离后附加;需要同时看就 screen -x name。

现象想「挂后台跑个任务」,结果 Ctrl+a k 把整个任务一起杀掉了。

原因Ctrl+a d 是脱离(进程继续),Ctrl+a k 是关闭窗口(进程终止),两者一字之差。

处置一律用 Ctrl+a d 脱离;结束会话用 screen -X -S name quit。

现象日志往上翻,输出没几天就滚没了,PageUp 翻不到头。

原因默认回滚缓冲区只有几百行。

处置在 ~/.screenrc 里写 defscrollback 10000 扩大缓冲区。

现象竖直分屏 Ctrl+a | 按了没反应,只在某些机器上能用。

原因竖直分屏需要 screen 4.1 及以上,老版本只有水平分屏 Ctrl+a S。

处置先确认版本:screen -v;老版本改用 Ctrl+a S 做上下分屏。

现象每次进来都被版权提示刷屏,输出被顶掉几行。

原因screen 启动时默认打印 startup_message。

处置~/.screenrc 里写 startup_message off。

排障路径

  1. 1找回一个「不见了」的会话

    screen -ls && screen -RD name

    -ls 先确认会话名与状态;-RD 强制分离并附加,附加冲突时同样有效。

  2. 2清理已经没有用的会话

    screen -X -S name quit

    会话已附着时先 screen -d name 脱离,否则里面还在跑的进程会一起被终止。

  3. 3让两个人同时看同一屏输出

    screen -x name

    配合 Ctrl+a S / Ctrl+a | 分屏,两人各看一半。

命令示例

建会话、列出、恢复的标准三步

screen -dmS build bash screen -ls screen -RD build

screen -dmS name cmd 在后台建会话并直接执行命令,配合 screen -ls 确认状态、screen -RD 恢复。-d 让 screen 立刻 detach 所以不会占住当前终端;-R 做不到时 -D 会踢掉其它已连接的终端——共享一台机器时这正是你想要的强制恢复。

输出

There are screens on:
	1.build	(Detached)
1 Socket in /run/screen/S-user.
	4582.build	(Detached)
1 Socket in /run/screen/S-user.

分屏跑编译与看日志

# 在 screen 会话内依次执行: # Ctrl+a S 水平分屏(上下) # Ctrl+a Tab 切换焦点 # Ctrl+a X 关闭当前分屏

「一边跑 npm run build,一边 tail 日志」这种双屏需求正是 screen 存在的理由。注意 Ctrl+a S 产生的是上下分屏,Ctrl+a | 才是左右分屏(需 screen 4.1+);关闭分屏用 X,只留当前用 Q。

改前缀键与滚屏设置写进 .screenrc

escape ^Bb defscrollback 10000 startup_message off term xterm-256color

把 escape ^Bb 写进 ~/.screenrc 可把前缀键改成 Ctrl+b,避开与 Emacs/Ctrl-a 类绑定的冲突。defscrollback 默认只有几百行,长时间编译的输出会被截断,10000 行更实用。改完前缀键后所有 Ctrl+a 都要相应改成 Ctrl+b。

复制模式里翻页并取日志片段

# Ctrl+a [ 进入复制模式 # PageUp / PageDown 翻页 # Space 开始选择,Enter 复制 # Ctrl+a ] 粘贴到任意 shell

screen 里用鼠标滚轮翻历史常常无效,正确的入口是复制模式(Ctrl+a [)。选定并回车后内容进入独立缓冲区,再用 Ctrl+a ] 粘到当前 shell —— 这是从长输出里取中间几行的唯一稳妥办法。

退出前先看有哪些会话残留

screen -ls screen -X -S build quit screen -X -S deploy quit

会话「Detached」时里面的进程仍在跑。养成离开前 screen -ls 的习惯,避免训练任务、编译进程在无人看管的会话里占着 CPU。需要真正结束就 screen -X -S name quit;只脱开用 Ctrl+a d 或 screen -d name。

常见坑与注意事项

  • screen -X -S name quit 会直接杀掉会话内的所有进程,不给任何保存机会。跑着的训练任务、编译、未保存的 vim 都会随会话一起消失——先 Ctrl+a [ 检查,或在会话里跑 nohup/tmux 做二级保护。
  • SSH 断开时 screen 能救你,但网络真断时 screen 也可能留下「Detached 且已僵死」的会话。下次回来用 screen -RD 强制接管时,会把原进程留在原地重新 attach,容易出现两份进程同时写同一份输出的情况。
  • Ctrl+a 是终端的发送中断(XON)字符,流式输出时按它会「吃掉」后续输出而不是触发快捷键。表现就是「按了没反应」,解法是关掉终端流控(stty -ixon)或把前缀键改掉。
  • 默认 defscrollback 缓冲区只有几百行,长输出用「上翻」根本翻不到开头,复制模式也取不到。改 ~/.screenrc 的 defscrollback 之后必须新建会话才生效。
  • screen -r 在「会话已被别人 attach」时会直接报 There is only one screen,浪费时间排查。真正好用的是 screen -RD(-R 恢复、失败则 -D 踢掉原客户端),全用 -R 会经常白跑一趟。
  • screen 与 tmux 都占着同一份终端快捷键语义:Ctrl+a d 在 tmux 里含义完全不同。混用两者的机器上,误以为在 screen 却发到 tmux(或反之)会表现为「快捷键完全无效」,而不是任何报错。

提示

  • SSH 断线后 screen 会话不丢失,重新 ssh 后 screen -r 即可恢复,远程开发必备。
  • Ctrl+a 是默认前缀键,如果和终端快捷键冲突可在 ~/.screenrc 中改。
  • screen 功能较老,新项目建议用 tmux(更现代、支持插件)。
  • screen -ls 列出会话名与时间戳,配合 screen -x -S 名字 可与他人共享同一会话同时键入,排障联调时很实用。
  • screen -S 名字 -X quit 从脚本里直接关闭某个会话,比进会话再 exit 稳,适合在 crontab 或 CI 里清理遗留会话。
  • 在 .screenrc 里写 startup_message off 可以去掉连上时的版本横幅,配合 defscrollback 10000 提高回滚行数。

常见问题

想让一条命令在后台自己跑完,怎么用 screen 拉起来?

用 screen -dmS name cmd:-d 表示立即分离、不占当前终端,-mS 表示创建一个名为 name 的会话并在其内部执行 cmd。命令跑完后会话自动结束,终端立刻还给你,适合放进 crontab、CI 步骤或任何不希望阻塞当前终端的场景。命名这一步别省,会话名会出现在 screen -ls 的列表里,出问题时能一眼定位到是哪个任务。执行期间想看进展就 screen -r name 接进去,看完 Ctrl+a d 再脱离,任务不受影响。

每次新开 screen 都想自动分好窗口并进入 vim,怎么配置?

在 ~/.screenrc 里写 screen -t editor 1 vim,-t editor 给窗口起名,1 指定它是 1 号窗口,vim 是这个窗口里自动执行的命令。启动时 screen 会先把这条命令建出来,你连进去就已经在 vim 里,不用再手动开窗口敲命令。把窗口命名这一步做进配置还有个附带好处:状态栏配合 caption always "%n %t" 会持续显示编号和标题,你在多窗口之间切换时不会认错当前窗口。

改了前缀键之后,原来的快捷键还能用吗?

不能直接用,全部要跟着换前缀。配置文件里的 escape ^Bb 是修改前缀键的命令,把 Ctrl+a 换成 Ctrl+b,写完之后所有命令都要写成 Ctrl+b d、Ctrl+b c、Ctrl+b S 这样。screen 还保留了一条兜底:连按两次 Ctrl+b 本身,就等价于旧的 Ctrl+a Ctrl+a,也就是在当前和上一个窗口间切换。刚改完前缀觉得不适应时,可以把这条双击路径当成临时通道。另外 term xterm-256color 这行值得一起写上,它让 screen 内部与外部终端在颜色数量上对齐,否则 256 色终端会被降级显示。

复制模式的一次完整操作是怎么走的?

五步:先按 Ctrl+a [ 进入复制模式,此时可以用 PageUp / PageDown 往上翻历史输出;定位到要复制的位置后按 Space 开始选择,方向键或鼠标拖动调整范围;选好后按 Enter 把选中内容复制并退出选择状态;再按 Ctrl+a ] 把最近一次复制的内容粘贴到当前光标处;最后如果还要回到命令模式,按 Ctrl+a Esc 退出复制模式。整个流程的价值在于它复用的是 screen 自己的回滚缓冲区,所以哪怕内容早已滚出屏幕,只要缓冲区还在就能捞回来。

窗口太多了,几种切换方式该怎么选?

按切换意图挑。Ctrl+a n 和 Ctrl+a p 是在相邻窗口之间走一步,适合顺手上一个下一个;Ctrl+a 0-9 是直跳,编号一敲就到目标,是窗口数不多时最快的方式。Ctrl+a Ctrl+a 只在最近两个窗口之间来回切,手头同时盯两三个服务日志时最省事,连按两次前缀键即可。Ctrl+a " 是交互式选择,会列出全部窗口让你挑,窗口超过十个、编号已经记不住时靠它;Ctrl+a w 同样是列表视图,但它只看不切,适合先确认自己在哪个窗口。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年7月21日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们