screen 命令 #

screen 是一个强大的终端复用工具,允许用户在单个终端窗口中创建、管理和切换多个终端会话。即使断开连接,screen 会话也会在后台继续运行,非常适合长时间运行的任务或远程服务器管理。

基本功能 #

  • 创建多个终端会话
  • 在会话间自由切换
  • 断开连接后保持会话运行
  • 重新连接到已断开的会话
  • 会话共享(多人同时使用)
  • 会话锁定
  • 窗口拆分

常用命令 #

创建会话 #

创建不带名称的会话 #

bash
screen

创建带名称的会话 #

bash
screen -S session_name

列出会话 #

bash
screen -ls

输出示例:

text
There are screens on:
        12345.my_session     (Detached)
        67890.another_session (Attached)
2 Sockets in /var/run/screen/S-user.

附加到会话 #

附加到最近使用的会话 #

bash
screen -r

附加到指定名称的会话 #

bash
screen -r session_name

附加到指定 PID 的会话 #

bash
screen -r PID

强制附加会话 #

当会话处于 Attached 状态时,可以使用 -d 参数先断开会话再重新连接:

bash
screen -d -r session_name

或简写为:

bash
screen -dr session_name

分离会话 #

screen 会话中,可以使用快捷键 Ctrl+a d 来分离当前会话。

也可以从外部强制分离会话:

bash
screen -d session_name

终止会话 #

终止当前会话中的所有窗口 #

screen 会话中,使用快捷键 Ctrl+a :quit 或直接输入 exit 退出所有窗口。

终止指定会话 #

bash
screen -S session_name -X quit

会话内操作 #

窗口管理 #

创建新窗口 #

screen 会话中,使用快捷键 Ctrl+a c 创建新窗口。

切换窗口 #

  • Ctrl+a n:切换到下一个窗口
  • Ctrl+a p:切换到上一个窗口
  • Ctrl+a 0-9:切换到指定编号的窗口
  • Ctrl+a ":显示窗口列表,可通过上下键选择

重命名窗口 #

screen 会话中,使用快捷键 Ctrl+a A 重命名当前窗口。

关闭窗口 #

screen 会话中,使用快捷键 Ctrl+a k 关闭当前窗口,或直接输入 exit

会话管理 #

会话锁定 #

screen 会话中,使用快捷键 Ctrl+a x 锁定当前会话,需要密码才能解锁。

会话共享 #

允许其他用户连接到同一个 screen 会话:

bash
screen -x session_name

查看会话信息 #

screen 会话中,使用快捷键 Ctrl+a i 查看当前会话的状态信息。

窗口拆分 #

水平拆分 #

screen 会话中,使用快捷键 Ctrl+a S 水平拆分窗口。

垂直拆分(需要编译支持) #

在支持垂直拆分的版本中,使用快捷键 Ctrl+a | 垂直拆分窗口。

在拆分窗口间切换 #

screen 会话中,使用快捷键 Ctrl+a Tab 在拆分的窗口间切换。

关闭拆分 #

screen 会话中,使用快捷键 Ctrl+a Q 关闭所有拆分窗口,只保留当前窗口。

常用选项 #

选项 描述
-S session_name 创建或指定会话名称
-ls-list 列出所有会话
-r session_name 重新连接到会话
-d session_name 分离指定会话
-dr session_name 强制分离并重新连接会话
-x session_name 连接到共享会话
-wipe 清理失效的会话
-h num 设置回滚缓冲区的大小
-m 即使没有终端也创建会话
-D -RR 自动创建或恢复会话,适合作为登录脚本

高级用法 #

会话配置文件 #

screen 使用 ~/.screenrc 作为配置文件,可以自定义快捷键、默认设置等。

示例配置:

bash
# 设置回滚缓冲区大小
defscrollback 10000

# 启用状态栏
hardstatus alwayslastline

# 设置状态栏显示内容
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %d/%m %{W}%c %{g}]'

# 绑定 F11 切换全屏
bindkey -k F11 eval "stuff \033[1;2t"

# 绑定 F12 退出全屏
bindkey -k F12 eval "stuff \033[1;1t"

启动时执行命令 #

可以在创建会话时同时执行命令:

bash
screen -S session_name command_to_run

例如:

bash
screen -S log_tail tail -f /var/log/syslog

恢复所有会话 #

使用 -D -RR 选项可以自动恢复现有的会话,或在没有会话时创建新会话:

bash
screen -D -RR

会话日志 #

开启日志 #

screen 会话中,使用快捷键 Ctrl+a H 开启日志记录,日志文件默认保存在当前目录下的 screenlog.0

自定义日志文件 #

bash
screen -L -Logfile custom_log_file.log -S session_name

快捷键汇总 #

快捷键 功能
Ctrl+a c 创建新窗口
Ctrl+a n 下一个窗口
Ctrl+a p 上一个窗口
Ctrl+a 0-9 切换到指定窗口
Ctrl+a " 窗口列表
Ctrl+a A 重命名窗口
Ctrl+a k 关闭当前窗口
Ctrl+a d 分离会话
Ctrl+a r 重新加载配置文件
Ctrl+a x 锁定会话
Ctrl+a s 暂停输出
Ctrl+a q 恢复输出
Ctrl+a i 显示会话信息
Ctrl+a S 水平拆分窗口
Ctrl+a Tab 在拆分窗口间切换
Ctrl+a Q 关闭所有拆分
Ctrl+a H 开启/关闭日志
Ctrl+a ? 显示帮助信息

注意事项 #

  1. 确保安装了 screen

    • Debian/Ubuntu: sudo apt-get install screen
    • CentOS/RHEL: sudo yum install screen
    • macOS: 已预装或使用 brew install screen
  2. 会话默认保存在 /var/run/screen/S-username/ 目录下。

  3. 如果忘记会话名称,可以使用 screen -ls 查看所有会话。

  4. 对于长时间运行的任务,建议使用带名称的会话以便于管理。

  5. 可以将常用的 screen 命令添加到 shell 别名中,提高工作效率。

替代工具 #

  • tmux:功能更强大的终端复用工具,语法类似但有更多特性
  • byobu:基于 screentmux 的增强工具,提供更友好的界面

总结 #

screen 是一个功能强大的终端复用工具,特别适合远程服务器管理和长时间运行的任务。通过本文的介绍,您应该已经掌握了 screen 的基本用法和高级特性。建议多加练习,将 screen 融入到您的日常工作流程中,提高工作效率。

最后更新:2026-02-07