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 系统上都可用,是可靠的备选。
相关推荐
n1121211 小时前
Docker 容器时区错 8 小时:3 个坑
运维·docker·容器·故障排查·服务器运维·容器时区
Android系统攻城狮11 小时前
Linux FFmpeg深度解析之av_dump_format调用流程与实战(十一)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
Android系统攻城狮11 小时前
Linux FFmpeg深度解析之avcodec_find_decoder调用流程与实战(十二)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
小白的码BUG之路11 小时前
K8s -- 启动一主二从节点
linux·运维·服务器
Escalating_xu11 小时前
【Linux 网络编程】IP 分片与重组:3000 字节的数据报,怎样拆开又拼回来?
linux·网络·tcp/ip
小相会自律11 小时前
全平台远程控制软件推荐2026:Win/Mac/Linux/手机/鸿蒙互通哪款好
linux·macos·智能手机·todesk·teamviewer·向日葵
yyzc1111111 小时前
合规稳定资金结算收款系统助力门店发展
大数据·运维·人工智能
风娜11 小时前
【Linux网络】UDP 服务器怎么写?从 socket、bind 到 recvfrom/sendto,手写完整回显服务器
linux·服务器·网络
慈云数据11 小时前
用 DSH 辅助部署一个网站监控平台:Uptime Kuma + Docker 实战
运维·docker·容器
毒爪的小新12 小时前
最新 Dify 1.14.0+ 内网离线插件打包、部署完整踩坑方案(解决 uv.lock 依赖校验失败)
运维·ai·uv·dify