Linux命令-screen(终端复用器)
Linux命令-screen(终端复用器)
- 快速参考
- 安装 screen
- 基本用法
- 常用快捷键
- 实际使用场景
- screen 配置文件
- 与 tmux 对比
- 故障排查
- 总结
快速参考
screen是终端复用器,允许在一个终端窗口中运行多个终端会话。它的核心功能是会话分离(detach)和恢复(attach),即使 SSH 连接断开,screen 中的程序仍然继续运行。这对于长时间运行的任务(编译、训练、下载等)非常有用。
对比 tmux:tmux 更现代、功能更丰富,但 screen 仍广泛使用。新项目推荐 tmux。
安装 screen
# Debian/Ubuntusudoaptinstallscreen# RHEL/CentOSsudoyuminstallscreen# Arch Linuxsudopacman-Sscreen# 验证安装whichscreenscreen--version基本用法
# 创建新会话screen# 创建命名会话(推荐)screen-Swork# 分离会话(在 screen 中按快捷键)# Ctrl+A, d# 查看所有会话screen-ls# 恢复会话screen-r# 恢复指定会话screen-rwork# 强制恢复(如果会话被其他终端附加)screen-d-rwork# 杀死会话screen-X-Swork quit常用快捷键
# 所有快捷键以 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 关闭当前分割区域实际使用场景
# === 场景1:长时间运行任务 ===# 1. 创建 screen 会话screen-Straining# 2. 运行长时间任务python train_model.py# 3. 分离会话:按 Ctrl+A, d# 4. 查看所有会话screen-ls# 5. 恢复会话screen-rtraining# === 场景2:远程服务器维护 ===# 1. SSH 登录服务器sshuser@server# 2. 创建 screen 会话screen-Smaintenance# 3. 执行维护操作sudoaptupdate&&sudoaptupgrade# 4. 如果 SSH 断开,任务不会中断# 5. 重新连接后恢复screen-rmaintenance# === 场景3:多窗口工作 ===# 1. 创建会话screen-Sdev# 2. 创建多个窗口# Ctrl+A, c 创建新窗口# 窗口0:运行 vim 编辑代码# 窗口1:运行测试# 窗口2:查看日志# 3. 在窗口间切换# Ctrl+A, n 下一个窗口# Ctrl+A, p 上一个窗口# Ctrl+A, 0 切换到窗口0# === 场景4:与他人共享会话 ===# 1. 用户A创建会话screen-Sshared# 2. 启用多用户# Ctrl+A, :multiuser on# 3. 用户B加入sudoscreen-xuserA/sharedscreen 配置文件
# 创建 ~/.screenrccat>~/.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 │ │ 分割 │ 水平(需补丁)│ 水平+垂直 │ │ 状态栏 │ 需配置 │ 默认启用 │ │ 鼠标支持 │ 有限 │ 更好 │ │ 脚本化 │ 有限 │ 更好 │ │ 性能 │ 较好 │ 较好 │ │ 维护状态 │ 维护模式 │ 活跃开发 │ └─────────────────────────────────────────────┘故障排查
# 问题1:screen -r 报错 "Attach with a suitable terminal"# 解决:指定终端类型TERM=xtermscreen-r# 问题2:screen -r 报错 "There is no screen to be resumed"# 解决:查看所有会话screen-ls# 问题3:无法滚动# 解决:进入复制模式# Ctrl+A, [ 然后使用方向键滚动# 按 Esc 或 Enter 退出# 问题4:screen 会话显示 "Attached"# 解决:强制分离再恢复screen-d-rsession_name总结
核心价值:
screen是终端会话管理的经典工具,会话分离功能确保长时间任务不会因 SSH 断开而中断。
常用组合:
screen -S name:创建命名会话Ctrl+A, d:分离会话screen -r name:恢复会话screen -ls:列出所有会话
推荐:新项目优先使用 tmux,但 screen 在所有 Linux 系统上都可用,是可靠的备选。
