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 系统上都可用,是可靠的备选。
相关推荐
姜鱼问生7 小时前
Nginx 缓存命中率监控:从 X-Cache-Status 到实时统计
运维·nginx·缓存
Apipi*7 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
天启HTTP8 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
运维行者_9 小时前
网络性能监控怎么做?从自动发现到根因分析的4个环节
运维·服务器·网络·人工智能·支持向量机
此时不提桶,更待何时9 小时前
06-14-A-Kafka集群运维与迁移实战详解
运维·kafka
广州浮点FLOATLIC11 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
IT研究所11 小时前
AI-ITR平台如何减少客户问题反复升级?
大数据·运维·人工智能·低代码·自然语言处理·安全架构·企微
BLUcoding11 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
AIgorithmGEEK11 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Nil20811 小时前
leetcode 139单词拆分
linux·运维·服务器