screen(GNU Screen)是一个终端复用器,允许用户在单个终端窗口中管理多个独立的shell会话。与tmux类似,screen的核心价值在于:会话可以在后台运行,即使网络连接断开也不会中断;用户可以在不同会话之间切换,在同一个终端中同时运行多个程序。
screen是较早出现的终端复用工具,几乎在所有Unix/Linux系统上都可用,特别适合远程服务器管理、长时间运行的任务、开发环境维护等场景。screen支持窗口管理、会话分离与重连、多用户共享、日志记录等功能。虽然较新的tmux在某些方面功能更强,但screen的广泛可用性和较低的入门门槛使其依然是系统管理员的得力工具。
1. 启动与退出
| 命令 | 说明 |
|---|
screen | |
screen -S work | |
screen -ls | |
screen -X -S work quit | |
exit | |
Ctrl+a | |
2. 附加与分离
| 命令 | 说明 |
|---|
screen -r | |
screen -r work | |
screen -x work | |
screen -d -r work | |
screen -D -r work | |
Ctrl+a d | |
Ctrl+a Ctrl+d | |
3. 前缀键与帮助
screen的默认前缀键是Ctrl+a,所有快捷键都需要先按前缀键再按其他键。
| 快捷键 | 说明 |
|---|
Ctrl+a | |
Ctrl+a ? | |
Ctrl+a : | |
Ctrl+a " | |
Ctrl+a w | |
4. 窗口管理
窗口类似于浏览器标签页,每个窗口是一个独立的shell。
| 快捷键 | 说明 |
|---|
Ctrl+a c | |
Ctrl+a n | |
Ctrl+a p | |
Ctrl+a Ctrl+a | |
Ctrl+a 0-9 | |
Ctrl+a ' | |
Ctrl+a A | |
Ctrl+a k | |
Ctrl+a \ | |
Ctrl+a . | |
5. 分屏与布局
| 快捷键 | 说明 |
|---|
Ctrl+a S | |
Ctrl+a | | |
Ctrl+a Tab | |
Ctrl+a X | |
Ctrl+a Q | |
Ctrl+a :resize | |
Ctrl+a F | |
注意: 垂直分屏需要较新版本的screen,或需在配置中启用。
6. 复制模式与滚动
| 快捷键 | 说明 |
|---|
Ctrl+a [ | |
Space | |
Enter | |
Ctrl+a ] | |
Ctrl+a H | 切换当前窗口的日志记录(生成screenlog.N文件) |
Ctrl+a h | |
复制模式下导航键:
| 按键 | 说明 |
|---|
j / k | |
Ctrl+b / Ctrl+f | |
g / G | |
/ / ? | |
q | |
7. 会话管理命令
在shell中执行的screen命令(非快捷键):
| 命令 | 说明 |
|---|
screen -wipe | |
screen -ls | |
screen -S work -X stuff "ls -la^M" | |
screen -S work -p 0 -X hardcopy | |
screen -S work -X eval "chdir /tmp" "screen bash" | |
screen -dmS work | |
8. 实用组合模式
| 命令/操作 | 说明 |
|---|
screen -dmS job bash -c 'long-command; exec bash' | |
screen -D -R work | |
screen -r work -p 2 | |
screen -L -S log | |
screen -x work | |
Ctrl+a :multiuser on | |
Ctrl+a :acladd user | |
while ! screen -r work; do sleep 1; done | |
9. 日志与记录
| 操作 | 说明 |
|---|
screen -L | 启动时启用日志记录(日志文件screenlog.N) |
screen -L -Logfile /path/log.txt | |
Ctrl+a H | |
Ctrl+a h | |
Ctrl+a :log | |
10. 配置文件
| 路径/内容 | 说明 |
|---|
~/.screenrc | |
defscrollback 10000 | |
hardstatus on | |
hardstatus alwayslastline "%w" | |
startup_message off | |
caption always "%{= kw}%-w%{= bw}%n %t%{-}%+w" | |
bindkey -k k1 screen -t shell bash | |
multiuser on | |
acladd username | |
.screenrc 示例:
startup_message off
defscrollback 10000
hardstatus alwayslastline "%{= ky}%H %{= kw}%= %{= wd}%Y-%m-%d %{= wd}%c"
caption always "%{= kw}%-w%{= bw}%n %t%{-}%+w"
bindkey -k F1 screen -t shell bash
bindkey -k F2 screen -t python python
11. screen vs tmux 对比
12. 故障排查
| 问题 | 解决方法 |
|---|
| Cannot open your terminal '/dev/pts/x' | 权限问题:script /dev/null -c screen |
| There is no screen to be resumed | 会话不存在;使用screen -ls检查;创建新会话 |
| screen: command not found | 安装screen:apt install screen 或 yum install screen |
| 垂直分屏不工作 | |
| 滚动缓冲区太小 | 配置defscrollback 10000;重新连接会话 |
| 颜色显示异常 | 在.screenrc中添加termcapinfo xterm* ti@:te@ |
| Ctrl+a与编辑器冲突 | 修改前缀键:在.screenrc中添加escape `` `` 或escape ^Xx` |
| 会话突然断开 | SSH超时;在SSH配置中添加ServerAliveInterval 60 |
温馨提示: screen是经典终端复用工具,几乎所有服务器都预装。建议掌握以下技巧:1)远程工作时始终使用screen,避免因网络中断丢失工作;2)使用命名会话(screen -S name)方便管理;3)长时间任务可在screen中运行,分离后退出终端,稍后再重连查看;4)使用Ctrl+a H记录关键操作的输出;5)在.screenrc中启用hardstatus和caption提高效率。对于需要更现代化功能和分屏的场景,可以考虑切换到tmux。如果忘记分离就断开连接,screen会话会保持运行,重连后执行screen -d -r重新接管。使用screen -wipe定期清理已死亡的会话,保持列表整洁。