81# Debian / Ubuntu2sudo apt update3sudo apt install screen45# CentOS / RHEL / Fedora6sudo dnf install screen7# (旧版 CentOS/RHEL 7 使用 yum)8# sudo yum install screen
这是 screen 最核心的用法,用于防止任务中断。
启动一个新会话(并命名)
x
1# -S 后面跟一个自定义名称,强烈推荐2screen -S my_task(进入新会话后,执行你的长时间任务,比如 python3 run.py)
分离(Detached)会话(让它在后台运行)
在 screen 会话窗口中,按下:
Ctrl+a, d
(你会返回到原始终端,但 my_task 会话仍在后台运行)
列出所有会话
x
1screen -ls2# 输出示例:3# There is a screen on:4# 12345.my_task (Detached)恢复(Attach)会话
41# 使用会话名恢复2screen -r my_task3# 或者使用 PID 恢复4screen -r 12345强制恢复会话(用于解决 "Attached" 状态)
当你发现在别处已连接该会话时,使用 -d -r 来“踢掉”另一个连接并在此处恢复。
11screen -d -r my_task从外部终止会话
11screen -X -S my_task quit(在会话内部,直接在 shell 中输入 exit 退出所有窗口也会终止会话。)
在一个 screen 会话中,你可以创建多个窗口(像浏览器的标签页)。
| 快捷键 | 功能 |
|---|---|
Ctrl+a, c | Create - 创建一个新窗口(Shell) |
Ctrl+a, n | Next - 切换到下一个窗口 |
Ctrl+a, p | Previous - 切换到上一个窗口 |
Ctrl+a, 0...9 | 切换到指定编号的窗口 |
Ctrl+a, w | Windows - 显示窗口列表(在底部) |
Ctrl+a, " | (双引号) - 显示可交互的窗口列表(用于跳转) |
Ctrl+a, A | (大写A) - 重命名当前窗口 |
Ctrl+a, k | Kill - 杀死当前窗口 |
.screenrc 配置
创建 ~/.screenrc 文件 ( vim ~/.screenrc ),将以下内容粘贴进去,可以让你拥有一个非常实用的底部状态栏,实时显示所有窗口和时间。
x
1# 1. 禁用启动时的欢迎信息2startup_message off34# 2. 禁用声音蜂鸣,改为视觉闪烁 (更方便,不吵)5vbell on67# 3. 自动分离因网络断开的会话 (非常重要!)8# 当 SSH 掉线时,screen 会话会自动 detach,而不是被"卡住"9autodetach on1011# 4. 增加回滚缓冲区大小 (默认只有100行,太少了)12# 允许你在 "复制模式" (Ctrl+a, [) 中向上滚动更多行13defscrollback 100001415# 5. 始终在底部显示状态栏16hardstatus alwayslastline1718# 6. 设置状态栏内容19# %-w: 显示左侧的窗口列表20# %n: 当前窗口编号21# %t: 当前窗口标题 (可通过 Ctrl+a, A 修改)22# %+w: 显示右侧的窗口列表 (当前窗口会用 * 标记)23# %= : "弹簧",把右侧内容推到最右边24# %H: 当前机器的主机名 (多服务器时非常有用)25# %m-%d: 月-日26# %c: 时间 (HH:MM)27hardstatus string "%-w %n:%t %+w %= %H | %m-%d %c"