GNU SCREEN 快速参考
会话、窗口、分屏、复制模式与共享
会话管理
创建与列出会话
screen # new unnamed session
screen -S work # new session named "work"
screen -ls # list all sessions
screen -list # same as -ls
会话命令
| screen -S name | 创建新命名会话 |
| screen -r name | 重新连接到已分离的会话 |
| screen -x name | 连接到已被连接的会话(共享) |
| screen -d name | 远程分离会话 |
| screen -d -r name | 在其他地方分离,在此处重新连接 |
| screen -D -RR | 强制分离并重新连接(激进模式) |
| screen -ls | 列出所有会话及其 PID |
| screen -wipe | 清理死亡会话 |
窗口
窗口基础
| Ctrl-a c | 创建新窗口 |
| Ctrl-a n | 下一个窗口 |
| Ctrl-a p | 上一个窗口 |
| Ctrl-a 0-9 | 按编号切换窗口 |
| Ctrl-a " | 列出所有窗口(交互式) |
| Ctrl-a ' | 按名称/编号切换窗口 |
| Ctrl-a A | 重命名当前窗口 |
| Ctrl-a k | 关闭当前窗口 |
窗口管理
| Ctrl-a w | 在状态栏显示窗口列表 |
| Ctrl-a Ctrl-a | 在最近两个窗口间切换 |
| Ctrl-a N | 显示窗口编号和名称 |
| exit / Ctrl-d | 关闭窗口(退出 shell) |
分屏与区域
分屏命令
| Ctrl-a S | 水平分屏(上下) |
| Ctrl-a | | 垂直分屏(左右) |
| Ctrl-a Tab | 将焦点移到下一个区域 |
| Ctrl-a X | 关闭当前区域 |
| Ctrl-a Q | 关闭除当前区域外的所有区域 |
区域工作流
Ctrl-a S # split horizontal
Ctrl-a Tab # move to new region
Ctrl-a c # create window in region
Ctrl-a :resize 20 # set region to 20 lines
复制模式
回滚与复制
| Ctrl-a [ | 进入复制/回滚模式 |
| Space | 开始/结束选择(在复制模式中) |
| Enter | 复制选择内容并退出复制模式 |
| Ctrl-a ] | 粘贴已复制的文本 |
| h/j/k/l | 移动光标(复制模式中的 vi 按键) |
| Ctrl-u / Ctrl-d | 向上/向下滚动半页 |
| / or ? | 向前/向后搜索 |
| Esc | 退出复制模式 |
复制工作流
Ctrl-a [ # enter copy mode
Space # mark start (navigate first)
Space # mark end + copy (navigate first)
Ctrl-a ] # paste into current window
分离与重新连接
分离
| Ctrl-a d | 分离当前会话 |
| Ctrl-a D D | 分离并注销 |
| Ctrl-a z | 挂起 screen(类似 Ctrl-Z) |
| screen -d PID | 远程按 PID 分离会话 |
重新连接
screen -r # reattach (if only one session)
screen -r work # reattach by name
screen -r 12345 # reattach by PID
screen -d -r work # steal session from other terminal
持久化工作流
# Start long-running task, detach, reconnect later
screen -S build
make -j4 all # start build
Ctrl-a d # detach, go home
screen -r build # reattach later
共享
多用户模式
# Host enables multiuser
Ctrl-a :multiuser on
Ctrl-a :acladd alice # grant access to user alice
# Alice attaches
screen -x hostuser/sessionname
访问控制
| :multiuser on | 启用多用户模式 |
| :acladd user | 授予用户完全访问权限 |
| :aclchg user -w '#' | 将用户设为只读(所有窗口) |
| :acldel user | 移除用户访问权限 |
| screen -x user/sess | 连接到共享会话 |
配置
~/.screenrc 要点
startup_message off # skip splash screen
defscrollback 10000 # scrollback buffer lines
hardstatus alwayslastline
hardstatus string '%{gk}%H %{wk}%?%-Lw%?%{bw}%n*%f %t%{wk}%?%+Lw%?'
shell -$SHELL # use login shell
常用设置
| startup_message off | 抑制启动消息 |
| defscrollback N | 设置回滚缓冲区(默认 100) |
| escape ^Bb | 将前缀键改为 Ctrl-b |
| shelltitle '$ |bash' | 自动设置窗口标题 |
| caption always '%n %t' | 始终显示含窗口信息的标题栏 |
| autodetach on | 挂断时自动分离(默认开启) |
| vbell on | 使用视觉铃声代替声音铃声 |
常用模式
开发环境配置
# Auto-create windows in .screenrc
screen -t editor 0 vim
screen -t server 1 python -m http.server
screen -t shell 2 bash
select 0 # start on editor window
日志与监控
Ctrl-a H # toggle logging to screenlog.N
Ctrl-a M # monitor window for activity
Ctrl-a _ # monitor window for silence
快速参考
| Ctrl-a ? | 显示所有键绑定 |
| Ctrl-a :help | 内置帮助 |
| Ctrl-a :source file | 加载配置文件 |
| Ctrl-a :screen cmd | 在新窗口中运行命令 |
| Ctrl-a :quit | 关闭所有窗口并退出会话 |