Linux常用命令-screen

命令

screen

描述

screen manager with VT100/ANSI terminal emulation
多窗口终端管理器

用法

1
2
screen [ -options ] [ cmd [ args ] ]
screen -r sessionowner/[[pid.]tty[.host]]

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
Options:
-4 只将主机名解析为IPv4地址
-6 只将主机名解析为IPv6地址
-a 强制将所有功能写入每个窗口的termcap
-A -[r|R] 调整所有窗口的大小以适应当前终端的大小
-c file 读取指定配置文件,而非默认的~/.screenrc
-d 分离运行的会话
-dmS name 启动作为守护进程,屏幕会话在分离模式
-D 分离并注销远程会话
-D -RR 执行获取屏幕会话所需的任何操作
-e xy 改变命令字符
-f 流量控制打开,-fn = off, -fa = auto
-h lines 设置回滚的命令历史缓冲区的大小
-i 当流量控制开启时,中断输出更快
-l 记录登录状态,保存到/var/run/utmp, -ln表示不记录
-ls [match] 显示会话列表
-list 显示所有会话列表
-L 开启日志输出
-m 忽略$STY变量,创建新的会话
-O 选择最优显示效果
-p window 如果存在命名窗口则预先选择它
-q 静默启动会话
-Q 命令将响应发送到查询进程的标准输出
-r [session] 重新连接到已分离的会话
-R 如果会话已存在则连接,否则新建一个会话
-s shell 指定shell
-S name 创建会话并指定名称
-t title 设置窗口名称
-T term 指定term
-U 使用UTF8编码
-wipe [match] 删除无法使用的会话
-x 恢复之前的会话
-X 在指定会话中执行命令

screen是独立的程序,需要手动安装
yum install screen

分清终端,会话,窗口的概念
终端: 远程开启一个ssh连接,表示开启一个登录终端
会话: 开启一个screen会话,如screen -S help表示开启一个会话命名为help
窗口: 进入screen会话,可以建立多个窗口,如通过快捷键C-a S可以拆分窗口

screen会话保存在/var/run/screen/S-xxx/,xxx为用户名
screen全局配置文件路径/etc/screenrc,默认不显示窗口信息,更改配置文件,取消以下内容的注释即可
caption always ...

screen中的快捷键: Ctrl+a为screen快捷键命令的前缀
C-a ? (help) 查看快捷键列表
C-a ' (select) 输入num或name,直接跳转到指定会话
C-a " (windowlist -b) 显示所有会话列表,方向键选择,回车进入
C-a 0-9 (select 0-9) 选择指定会话,可以先通过C-a w显示所有会话
C-a tab (focus) 切换到下一个会话
C-a C-a (other) 在当前会话和上一次会话之间跳转
C-a A (title) 设置当前窗口的名称
C-a b (break) 发送break到窗口
C-a B (pow_break) 重新打开终端并发送break
C-a c (screen) 创建一个新窗口并跳转到新窗口
C-a C (clear) 清空当前窗口的内容,类似于clear
C-a d (detach) 分离当前会话
C-a D D (pow_detach) 分离并且退出当前终端
C-a f (flow) 切换流量开启,关闭或自动
C-a F (fit) 将窗口大小调整为当前区域大小
C-a H (log) 开始/结束记录当前窗口内容到文件screenlog.n
C-a i (info) 显示当前窗口的信息
C-a k (kill) 关闭当前窗口
C-a l (redisplay) 完全刷新当前窗口
C-a m (lastmsg) 重复消息行中显示的最后一条消息
C-a M (monitor) 切换当前窗口的监控
C-a n (next) 跳转到下一个窗口
C-a N (number) 显示当前窗口的num和name
C-a p (prev) 跳转到上一个窗口
C-a q (xon) 发送ctrl+q到当前窗口,即解锁当前窗口
C-a Q (only) 删除除当前区域外的所有区域
C-a r (wrap) 切换当前窗口的换行设置
C-a s (xoff) 发送ctrl+s到当前窗口,即锁定当前窗口
C-a S (split) 水平分割当前窗口
C-a t (time) 显示系统时间和负载
C-a w (windows) 显示当前所有开启的窗口,*号表示当前窗口
C-a x (lockscreen) 锁定终端,解锁需要密码
C-a X (remove) 结束当前区域
C-a z (suspend) 暂停屏幕
C-a C-\ (quit) 关闭所有窗口并终止屏幕
C-a : (colon) 进入命令行模式
C-a [或者esc (copy) 输入复制/回滚模式
C-a ] (paste .) 粘贴缓冲区的内容到当前窗口
C-a {或者} (history) 复制并粘贴前面的(命令)行
C-a > (writebuf) 向文件写入粘贴缓冲区
C-a < (readbuf) 将屏幕交换文件读入粘贴缓冲区
C-a = (removebuf) 移除缓冲文件
C-a _ (silence) 启动/停止监控当前窗口的不活动
C-a | (split -v) 垂直分割当前窗口
C-a * (displays) 显示所有当前附加显示的列表

注意

如果需要较长时间的操作,通过screen命令来连接可以避免网络不稳定导致意外退出或命令执行中断
也可以使用screen运行后台程序,因为连接screen的终端断开后,原screen窗口将作为独立进程运行不会中断

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 安装screen
$ yum -y screen
# -S创建一个会话,命名为test
$ screen -S test
# -ls查看会话列表
$ screen -ls
There is a screen on:
10820.test (Attached)
1 Socket in /var/run/screen/S-root.
# 会话的保存位置,会话是一个socket文件
$ ll /var/run/screen/S-root/
srwx------ 1 root root 0 Mar 13 20:11 10820.test
# 按快捷键ctrl+a,然后松开再按d,分离会话
$ screen -ls
There is a screen on:
10902.test (Detached)
1 Socket in /var/run/screen/S-root.
# -r回到会话
$ screen -r test
# 新开一个ssh终端,执行以下命令分离会话
$ screen -d test
[10902.test detached.]
# -dr分离会话并在本终端重连会话
$ screen -dr test
# 退出会话
$ exit
$ screen -ls
No Sockets found in /var/run/screen/S-root.

# 使用screen运行后台程序
$ screen -S test
$ pstree
├─sshd─┬─2*[sshd───bash]
│ └─sshd───bash───screen───screen───bash───pstree
$ screen -d test
$ exit
# 退出终端后screen作为独立进程运行
$ pstree
├─screen───bash
├─sshd─┬─2*[sshd───bash]
│ └─sshd───bash───pstree

# 利用screen进行远程协助,两个终端都通过ssh连接到同一主机
# 在终端1创建会话help,在终端2使用-x选项接入会话,可以同时加入多个终端
# 每个终端上输入的命令均会显示在其他终端,终端上的内容完全同步显示
# 注意不要多个终端同时输入,避免混淆.只要有一个终端输入exit,所有终端上的会话均结束
$ screen -S help
$ screen -x help
$ exit