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 系统上都可用,是可靠的备选。