首页 » Screen - 终端模拟器

Screen - 终端模拟器

Screen的作用一言难尽。大体而言,当你需要长时间与服务器保持连接,不能中断连接时就需要screen。几个简单的使用场合:

白天在公司开发机(公网可访问)写代码。用Vim打开了两个项目,并运行一个程序。晚上回家了,为了继续白天的工作,可以登录开发机,并重复白天进入路径、用Vim打开文件等操作。你也可以用screen,直接还原白天的工作环境,并查看程序在STDOUT的输出。

两个人在不同的地点调试一个程序,需要“视野共享”,亦即一个人的所有操作另一个人都能看到,好比QQ的远程桌面,但...更流畅得多,同时并不局限于两个人,可以是N个人。

像ftp传文件等被举烂了的例子就不必多说了。

screen简单测试

查看是否有screen开启

$ screen -ls
No Sockets found in /var/run/screen/S-bailing.

没有screen运行,很好,开启一个:

$ screen

进入screen,刚才屏幕上方的文字被清空了。任意运行一个命令,如top。接下来临时断开screen,按键Ctrl-a d,screen临时退出,并输出detached:

[detached]

再次查看下screen的状态,显示Detached

$ screen -ls
There is a screen on:
        4147.pts-0.berlinix     (Detached)
1 Socket in /var/run/screen/S-bailing.

启动一个新的SSH连接,登陆后连接到刚才启动那个screen:

$ screen -x

显示的是top的输出。ok初次试验成功。

在Shell下输入exit,退出screen。

命名会话和窗口

依然来到一个没有screen的世界:

$ screen -ls
No Sockets found in /var/run/screen/S-bailing.

开启一个命名会话和窗口:

$ screen -S sharing -t w1

用-S指定session(会话)名,用-t指定窗口名。执行完毕,进入新的screen,查看下状态:

$ screen -ls
There is a screen on:
        4235.sharing    (Attached)
1 Socket in /var/run/screen/S-bailing.

因为是命名session,因此可以看到session的名称为sharing(为我们所指定),对比下没有命名的session:

4235.sharing    (Attached)
4147.pts-0.berlinix     (Detached)

启动top。再启动一个新的SSH连接,登陆后连接到刚才启动那个screen:

$ screen -x -r sharing -p w1

-x表示连接到screen,-r表示恢复session,-p表示恢复窗口。接下来就是显示top的输出。

screen详解

使用ctrl-a打头的命令向screen发出指令,这种命令形式叫键绑定(key binding),而ctrl-a叫做命令字符(command character)。我们常用的命令包括:

命令说明
ctrl-a w查看当前session下的所有window
ctrl-a X切换到指定window,X指window编号
ctrl-a A为window命名
ctrl-a K关闭window
ctrl-a c创建一个新window
ctrl-a ?查看键绑定信息
ctrl-a ctrl-g关闭screen闪屏(可配置~/.screenrc,添加vbell off)
ctrl-a ctrl-a切换到之前显示的那个window

已死会话(例如kill掉会话进程):

$ screen -ls
There is a screen on:
        4661.pts-4.berlinix     (Dead ???)
Remove dead screens with 'screen -wipe'.
1 Socket in /var/run/screen/S-bailing.

用screen -wipe清除已死会话:

$ screen -wipe
There is a screen on:
        4661.pts-4.berlinix     (Removed)
1 socket wiped out.
No Sockets found in /var/run/screen/S-bailing.

我的screen常用操作流程

首次SSH登录一台机子后,直接启动screen,不带session名也不带window名。当需要打开新Tab时,用Ctrl-a c开启一个新window,用Ctrl-a Ctrl-a切换到上一个window,并用Ctrl-a A为刚才那个window命名,再用Ctrl-a Ctrl-a切换到新开的window,用Ctrl-a A为新window命名。

打开多个window后,用Ctrl-a w查看都存在哪些window了,用Ctrl-a N跳转到不需要的window中,用Ctrl-a K关掉(会有关闭提示)。窗口间的跳转熟悉了,直接Ctrl-a N,不用先Ctrl-a w查看。

关机(本机,不是远程机)再次启动,SSH登录远程机后,screen -x接着工作。

分享

0