一、为什么需要 screen?
在 Linux 服务器上,你是否遇到过以下尴尬场景:
- SSH 远程编译 / 跑脚本,网络突然断线,进程全部被杀;
- 想同时开多个终端窗口,却受限于单条 SSH 连接;
- 与同事一起排查问题,只能轮流使用键盘。
GNU screen 就是解决这些痛点的“虚拟终端管理器”。它可以在一个物理终端里创建多个会话,断网后程序继续运行,随时重连,还能多人共享屏幕。
二、安装
Debian / Ubuntu
sudo apt update && sudo apt install screen
CentOS / RHEL
sudo yum install screen
三、5 分钟上手
1. 新建会话
screen -S work
此时你已进入名为 work 的会话,随便跑个 htop
做实验。
### 2. 断开但不终止
在会话里按快捷键
Ctrl-a
然后 d
提示 [detached]
,程序仍在后台跑。
### 3. 查看会话列表
screen -ls
示例输出:
12345.work (Detached)
### 4. 重新连接
screen -r work
网络断了?重新 SSH 上来再执行即可。
## 四、常用快捷键(牢记 Ctrl-a 前缀)
五、删除(真正关闭)会话
很多教程只教“detach”,但 detach 只是断开,会话还在后台。真正“删除”有两种情况:
### 场景 1:你还在会话里
直接输入
exit
或按 Ctrl-d
。
当最后一个窗口关闭,会话即被销毁。
场景 2:已经 detach,想从外面杀
1. 查 ID
screen -ls
得到:
12345.work (Detached)
2. 强制退出
screen -S 12345.work -X quit
或
screen -S work -X quit
会话立即结束,socket 文件也被系统清理,等同于“删除”。
## 六、进阶玩法
1. 会话共享
第二个人执行
screen -x work
即可一起操作同一会话。
2. 自动记录日志
screen -L -S compile
日志文件:`screenlog.0`。
3. 美化配置
在 ~/.screenrc
加入:
defscrollback 10000
hardstatus alwayslastline "%-w%{= BW}%n %t%{-}%+w"
保存后重新打开 screen,状态栏瞬间高级。
七、总结
- 新建:`screen -S name`
- 重连:`screen -r name`
- 断开:`Ctrl-a d`
- 删除:里面 exit
;外面 screen -S name -X quit
评论区