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 系统上都可用,是可靠的备选。
相关推荐
啊哦11117 小时前
安装VMware Workstation
linux·运维·服务器
持敬chijing17 小时前
Linux基础命令与目录命令
linux·运维·服务器
yunwei3717 小时前
实证研究:AI Agent 规则需要上下文与分层强制执行
linux·安全·ai编程
小张成长计划..17 小时前
【Linux】12:进程状态
linux·运维·服务器
会周易的程序员18 小时前
Libnodave S7 通信库:架构设计与实现解析
linux·c++·物联网·架构·c·s7·工业协议
云栖梦泽18 小时前
Camera驱动开发与应用开发中的零拷贝与DMA
linux·驱动开发·嵌入式硬件
小秋求学记.21 小时前
Linux_Ubuntu的相关问题
linux·运维·ubuntu
熊猫钓鱼>_>21 小时前
ArkTS 方舟编程语言 · 原创快速入门教程
运维·架构·ts·harmonyos·arkts·鸿蒙·js
β添砖java21 小时前
黑马Linux笔记
linux·运维·笔记