Linux命令-screen(终端复用器)

Linux命令-screen(终端复用器)

快速参考

screen 是终端复用器,允许在一个终端窗口中运行多个终端会话。它的核心功能是会话分离(detach)和恢复(attach),即使 SSH 连接断开,screen 中的程序仍然继续运行。这对于长时间运行的任务(编译、训练、下载等)非常有用。

对比 tmux:tmux 更现代、功能更丰富,但 screen 仍广泛使用。新项目推荐 tmux。

安装 screen

bash 复制代码
# Debian/Ubuntu
sudo apt install screen

# RHEL/CentOS
sudo yum install screen

# Arch Linux
sudo pacman -S screen

# 验证安装
which screen
screen --version

基本用法

bash 复制代码
# 创建新会话
screen

# 创建命名会话(推荐)
screen -S work

# 分离会话(在 screen 中按快捷键)
# Ctrl+A, d

# 查看所有会话
screen -ls

# 恢复会话
screen -r

# 恢复指定会话
screen -r work

# 强制恢复(如果会话被其他终端附加)
screen -d -r work

# 杀死会话
screen -X -S work quit

常用快捷键

bash 复制代码
# 所有快捷键以 Ctrl+A 为前缀

# Ctrl+A, c    创建新窗口
# Ctrl+A, n    切换到下一个窗口
# Ctrl+A, p    切换到上一个窗口
# Ctrl+A, 0-9  切换到指定编号的窗口
# Ctrl+A, "    显示窗口列表
# Ctrl+A, w    显示窗口栏
# Ctrl+A, d    分离会话(detach)
# Ctrl+A, k    杀死当前窗口
# Ctrl+A, A    重命名当前窗口
# Ctrl+A, ?    显示帮助
# Ctrl+A, [    进入复制模式(滚动)
# Ctrl+A, ]    粘贴
# Ctrl+A, S    水平分割
# Ctrl+A, |    垂直分割(需补丁)
# Ctrl+A, Tab  切换分割区域
# Ctrl+A, X    关闭当前分割区域

实际使用场景

bash 复制代码
# === 场景1:长时间运行任务 ===
# 1. 创建 screen 会话
screen -S training

# 2. 运行长时间任务
python train_model.py

# 3. 分离会话:按 Ctrl+A, d

# 4. 查看所有会话
screen -ls

# 5. 恢复会话
screen -r training

# === 场景2:远程服务器维护 ===
# 1. SSH 登录服务器
ssh user@server

# 2. 创建 screen 会话
screen -S maintenance

# 3. 执行维护操作
sudo apt update && sudo apt upgrade

# 4. 如果 SSH 断开,任务不会中断
# 5. 重新连接后恢复
screen -r maintenance

# === 场景3:多窗口工作 ===
# 1. 创建会话
screen -S dev

# 2. 创建多个窗口
# Ctrl+A, c  创建新窗口
# 窗口0:运行 vim 编辑代码
# 窗口1:运行测试
# 窗口2:查看日志

# 3. 在窗口间切换
# Ctrl+A, n  下一个窗口
# Ctrl+A, p  上一个窗口
# Ctrl+A, 0  切换到窗口0

# === 场景4:与他人共享会话 ===
# 1. 用户A创建会话
screen -S shared

# 2. 启用多用户
# Ctrl+A, :multiuser on

# 3. 用户B加入
sudo screen -x userA/shared

screen 配置文件

bash 复制代码
# 创建 ~/.screenrc
cat > ~/.screenrc << 'EOF'
# 关闭启动信息
startup_message off

# 设置滚动缓冲区
defscrollback 10000

# 显示状态栏
hardstatus on
hardstatus alwayslastline
hardstatus string "%{.bW}%-w%{.rY}%n %t%{-}%+w %=%{.G} %H %{.Y} %Y-%m-%d %c "

# 自动分离(SSH断开时)
autodetach on

# 设置编码
encoding UTF-8

# 设置默认 Shell
shell /bin/bash

# 新窗口自动执行
# screen -t "top" 0 top
# screen -t "log" 1 tail -f /var/log/syslog
EOF

与 tmux 对比

复制代码
┌─────────────────────────────────────────────┐
│  功能         │ screen        │ tmux        │
├─────────────────────────────────────────────┤
│  前缀键       │ Ctrl+A       │ Ctrl+B      │
│  分割         │ 水平(需补丁)│ 水平+垂直   │
│  状态栏       │ 需配置       │ 默认启用    │
│  鼠标支持     │ 有限         │ 更好        │
│  脚本化       │ 有限         │ 更好        │
│  性能         │ 较好         │ 较好        │
│  维护状态     │ 维护模式     │ 活跃开发    │
└─────────────────────────────────────────────┘

故障排查

bash 复制代码
# 问题1:screen -r 报错 "Attach with a suitable terminal"
# 解决:指定终端类型
TERM=xterm screen -r

# 问题2:screen -r 报错 "There is no screen to be resumed"
# 解决:查看所有会话
screen -ls

# 问题3:无法滚动
# 解决:进入复制模式
# Ctrl+A, [ 然后使用方向键滚动
# 按 Esc 或 Enter 退出

# 问题4:screen 会话显示 "Attached"
# 解决:强制分离再恢复
screen -d -r session_name

总结

核心价值screen 是终端会话管理的经典工具,会话分离功能确保长时间任务不会因 SSH 断开而中断。
常用组合

  • screen -S name:创建命名会话
  • Ctrl+A, d:分离会话
  • screen -r name:恢复会话
  • screen -ls:列出所有会话
    推荐:新项目优先使用 tmux,但 screen 在所有 Linux 系统上都可用,是可靠的备选。
相关推荐
用户0510122572965 小时前
Linux下有关QT显示环境变量设置
linux·嵌入式
闲云自留地5 小时前
告别命令恐惧症,openEuler 基础操作 + 文本 + 网络管理实战
linux·运维·云计算
剑指offer.5 小时前
ARM裸机开发-点亮LED灯
linux·服务器·嵌入式硬件
GeW5 小时前
工作忙.基础弱,也能快速拿RHCE?这套方法亲测有效
linux
其实防守也摸鱼6 小时前
常见安全架构中 Shiro 的认证确认机制解析
运维·服务器·数据库·windows·github
Julien20046 小时前
自动挂载网络附加存储
linux·服务器·网络
codigger7 小时前
服务器又卡了?一篇讲透 Linux 性能排查(基础四件套 + perf/strace/火焰图)
linux·后端·性能优化
顶点多余7 小时前
9.18 面试题总结 --- 绿盟
linux·面试
^Rocky7 小时前
IT 疑难杂症诊疗室:复杂技术问题解决实录
运维·bug
挖掘狂人7 小时前
当生产环境"变慢",我用这套 perf + strace 30 分钟定位瓶颈
linux·运维·性能优化