终端会话共享的两种方法
通过kibitz实现终端会话实时共享
kibitz可以将一个会话(你所操作的)实时分享给本机的其它登陆用户(你想让别人看到的)。通过这个工具,你敲什么命令,输出了什么内容对方都能立即看到,用来演示很不错。
它是是expect中的一个工具,所以先安装expect。
1 | yum -y install expect |
使用方式很简单,在kibitz命令后加一个已登录的用户即可(比如你目前登陆的用户名)。例如:
1 | [root@xuexi perlapp]# kibitz root |
它会输出如下信息:
1 | asking root to type: kibitz -11913 |
只需在想要接收共享会话的终端上输入kibitz -11913
,就可以接收所有消息了。
结束共享的时候,只需在主终端上输入exit
命令或者CTRL+D键即可退出。
还可以指定分享给哪个终端,例如当前已登录的终端有pts/0和pts/1,你所操作的是pts/0,想分享给pts/1:
1 | kibitz -tty pts/1 root |
然后将kibitz -11913
这种握手码复制到pts/1的EOF字符后面按回车即可。
实际上这个tty选项没什么用,就算指定了tty选项,还是可以在任意终端上通过kibitz -11913
来建立共享终端。
默认情况下,kibitz只支持将会话共享给一个人。如果想要共享给多人,则需要特殊处理。
例如,分享给两个人:
1 | kibitz root kibitz root |
它会在主会话输出:
1 | asking root to type: kibitz -15573 |
两个kibitz -NNNNN
,只需分别复制给不同终端上执行即可。
通过script和scriptreplay命令实现终端会话共享
使用script命令录制,使用scriptreplay播放录制的操作。共享终端的操作,则需要使用命名管道来实现。
通过script录制终端操作
1 | [root@xuexi ~]# cd /tmp |
1 | [root@xuexi tmp]# ls # 执行一个操作:命令ls |
1 | [root@xuexi tmp]# cd /tmp/test # 再执行一个操作:命令cd |
其中-t 2> timing.log
是要回放的必须选项,不加2>
将导致开启录制后的任何输入都是乱码状态,不加-t timing.log
将不能使用scriptreplay来回放。timing.log记录的是每个时间段输入了多少字符。通过timing.log和output.session配合可以实现回放。
注意点是,录制前保证timing.log和output.session是空文件,否则将导致回放时操作不一致。
通过scriptreplay回放终端操作
1 | [root@xuexi test]# scriptreplay timing.log output.session |
如果觉得回放的速度过慢(录制时有些地方停顿,比如输入了一个命令后,隔了一段时间才输入另一个命令,这段时间对于回放来说显得慢很正常),可以修改timing.log文件。这个文件中分两个字段,第一个字段记录的是从上次输出后到该次输出的时间间隔,第二个字段是从output.session中读取的字符数。要修改回放速度,只需将第一个字段较长的间隔改短一点就可以。但是不应该改的太短,否则回放速度过快。我觉得将间隔较长的改成0.3-0.7秒,效果还不错。
1 | [root@xuexi ~]# cat timing.log |
结合管道实时共享终端屏幕
通过管道来传输信息实现。需要一个pipe文件,并在需要展示的终端打开这个管道文件。
在终端1(作为主终端,即演示操作的终端)上使用mkfifo创建管道文件。
1 | [root@xuexi tmp]# mkfifo scriptfifo |
在终端2上打开pipe文件。
1 | [root@xuexi ~]# cat /tmp/scriptfifo |
在终端1上使用script -f开始记录操作,之后的操作将会分享在终端2上。
1 | [root@xuexi tmp]# script -f scriptfifo |
使用exit即可停止分享并退出记录行为。
1 | [root@xuexi tmp]# exit |
在被分享终端上参与分享状态后将不能执行任何操作,执行的操作会被记录下来,并在主终端停止分享后自动执行。
需要注意的是,只能给一个会话共享会话终端。如果多个会话cat scriptfifo
,会导致共享切开显示在多个不同会话上。