gnu screen的用法
在使用ssh或者telnet登录远程主机后执行一些耗时的命令, 如果此时ssh或者telnet中断, 那么远程主机上正在执行的程序或者说命令也会被迫终止.
screen能够很好地解决这个问题, screen也叫虚拟终端, 可以在一个物理终端上实现多个虚拟终端的效果.
创建screen会话
# 新建一个screen
screen
# 新建一个screen并指定名称
screen -S XXX
以上命令, screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样。在该窗口中键入exit退出该窗口,如果这是该screen会话的唯一窗口,该screen会话退出,否则screen自动切退到前一个窗口。使用screen开启一个串口终端
screen /dev/ttyUSB0 9600,cs8
带命令创建窗口
# screen命令后跟你要执行的程序。 screen vi test.c
screen创建一个执行vi test.c的单窗口会话,退出vi将退出该窗口/会话
以上两种方式都创建新的screen会话。
在一个已有screen会话中创建新的窗口。在当前screen窗口中键入Ctrl + A, C,即Ctrl键+a键,之后再按下c键,screen 在该会话内生成一个新的窗口并切换到该窗口
断开(detach)screen会话,并重连(attach)会话
#打开一个screen窗口编辑/tmp/abc文件: screen vi /tmp/abc
之后暂时退出做点别的事情,在screen窗口键入Ctrl + A, D,Screen会给出detached提示, 这时候可以在命令行执行其他命令
# 半个小时之后回来了,找到该screen会话: screen -ls There is a screen on: 16582.pts-1.tivf06 (Detached) 1 Socket in /tmp/screens/S-root. # 重新连接会话 screen -r 16582
这时候会显示出原来screen会话中的信息.
如果原screen还是Attached的状态, 需要用 -x 参数
# 重新连接一个还在Attached状态的screen session screen -x 16582
如果意外中断了连接中的screen, 例如网络中断了, 再次登录后无法用-r 连接会原来的screen, 可以用-D参数解除, 之后就可以继续用-r连接了
# 如果只有一个screen screen -D # 如果有多个 screen -D 1636.pts-21.hostname
也可以直接组合-r -d连接
screen -r -d 30608.pts-21
screen的组合键操作列表
Ctrl-a ? 显示所有键绑定信息 Ctrl-a w 显示所有窗口列表 Ctrl-a C-a 切换到之前显示的窗口 Ctrl-a c 创建一个新的运行shell的窗口并切换到该窗口 Ctrl-a n 切换到下一个窗口 Ctrl-a p 切换到前一个窗口(与C-a n相对) Ctrl-a 0..9 切换到窗口0..9 Ctrl-a a 发送 C-a到当前窗口 Ctrl-a d 暂时断开screen会话 Ctrl-a k 杀掉当前窗口 Ctrl-a [ 进入拷贝/回滚模式
screen命令的参数
Options: -4 Use IPv4. -6 Use IPv6. -a Force all capabilities into each window's termcap. -A -[r|R] Adapt all windows to the new display width & height. -c file Read configuration file instead of '.screenrc'. -d (-r) Detach the elsewhere running screen (and reattach here). -dmS name Start as daemon: Screen session in detached mode. -D (-r) Detach and logout remote (and reattach here). -D -RR Do whatever is needed to get a screen session. -e xy Change command characters. -f Flow control on, -fn = off, -fa = auto. -h lines Set the size of the scrollback history buffer. -i Interrupt output sooner when flow control is on. -l Login mode on (update /var/run/utmp), -ln = off. -list or -ls. Do nothing, just list our SockDir. -L Turn on output logging. -m ignore $STY variable, do create a new screen session. -O Choose optimal output rather than exact vt100 emulation. -p window Preselect the named window if it exists. -q Quiet startup. Exits with non-zero return code if unsuccessful. -r Reattach to a detached screen process. -R Reattach if possible, otherwise start a new session. -s shell Shell to execute rather than $SHELL. -S sockname Name this session <pid>.sockname instead of <pid>.<tty>.<host>. -t title Set title. (window's name). -T term Use term as $TERM for windows, rather than "screen". -U Tell screen to use UTF-8 encoding. -v Print "Screen version 4.00.03 (FAU) 23-Oct-06". -wipe Do nothing, just clean up SockDir. -x Attach to a not detached screen. (Multi display mode). -X Execute <cmd> as a screen command in the specified session.
查看screen line buffer参数: Ctrl+A, i
设置screen line buffer: Ctrl+A, : , 然后输入 scrollback 1000 , 回车
查看buffer内容: Ctrl+A, Esc, 然后就可以用滚轮, 上下箭头等操作屏幕上下移动了, 翻页则使用Ctrl+F, Ctrl+B, 再次按Esc则退出