screen 命令 #
screen 是一个强大的终端复用工具,允许用户在单个终端窗口中创建、管理和切换多个终端会话。即使断开连接,screen 会话也会在后台继续运行,非常适合长时间运行的任务或远程服务器管理。
基本功能 #
- 创建多个终端会话
- 在会话间自由切换
- 断开连接后保持会话运行
- 重新连接到已断开的会话
- 会话共享(多人同时使用)
- 会话锁定
- 窗口拆分
常用命令 #
创建会话 #
创建不带名称的会话 #
screen
创建带名称的会话 #
screen -S session_name
列出会话 #
screen -ls
输出示例:
There are screens on:
12345.my_session (Detached)
67890.another_session (Attached)
2 Sockets in /var/run/screen/S-user.
附加到会话 #
附加到最近使用的会话 #
screen -r
附加到指定名称的会话 #
screen -r session_name
附加到指定 PID 的会话 #
screen -r PID
强制附加会话 #
当会话处于 Attached 状态时,可以使用 -d 参数先断开会话再重新连接:
screen -d -r session_name
或简写为:
screen -dr session_name
分离会话 #
在 screen 会话中,可以使用快捷键 Ctrl+a d 来分离当前会话。
也可以从外部强制分离会话:
screen -d session_name
终止会话 #
终止当前会话中的所有窗口 #
在 screen 会话中,使用快捷键 Ctrl+a :quit 或直接输入 exit 退出所有窗口。
终止指定会话 #
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 会话:
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 作为配置文件,可以自定义快捷键、默认设置等。
示例配置:
# 设置回滚缓冲区大小
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"
启动时执行命令 #
可以在创建会话时同时执行命令:
screen -S session_name command_to_run
例如:
screen -S log_tail tail -f /var/log/syslog
恢复所有会话 #
使用 -D -RR 选项可以自动恢复现有的会话,或在没有会话时创建新会话:
screen -D -RR
会话日志 #
开启日志 #
在 screen 会话中,使用快捷键 Ctrl+a H 开启日志记录,日志文件默认保存在当前目录下的 screenlog.0。
自定义日志文件 #
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 ? |
显示帮助信息 |
注意事项 #
-
确保安装了
screen:- Debian/Ubuntu:
sudo apt-get install screen - CentOS/RHEL:
sudo yum install screen - macOS: 已预装或使用
brew install screen
- Debian/Ubuntu:
-
会话默认保存在
/var/run/screen/S-username/目录下。 -
如果忘记会话名称,可以使用
screen -ls查看所有会话。 -
对于长时间运行的任务,建议使用带名称的会话以便于管理。
-
可以将常用的
screen命令添加到 shell 别名中,提高工作效率。
替代工具 #
总结 #
screen 是一个功能强大的终端复用工具,特别适合远程服务器管理和长时间运行的任务。通过本文的介绍,您应该已经掌握了 screen 的基本用法和高级特性。建议多加练习,将 screen 融入到您的日常工作流程中,提高工作效率。