- 论坛徽章:
- 0
|
本文原出处:Coolzsb的杂货铺子
可自由转载,但请遵循“署名-非商业用途-保持一致”的创作共用协议。
前言:其实,我个人以为,分辨一个unix的系统管理员是否科班出身,会不会用script这条指令就是一个很明显的标志。
再下来我们要说的script可不是shell编程,而是一个标准的unix指令。相信不是每个unix管理员都会知道这条指令的:象我这样野路子出身的人,还是两年多前,某个来我们公司做售前产品测试支持的工程师让我第一次领略了script这个指令的功效。
script最普通的使用就是用来捕捉当前的终端会话中的所有输入输出结果到一个指定的文件里:这个,对于我们编写操作文档、错误提交来说,都是有莫大的方便的。我们只需要在我们要保存的操作过程开始之前,在我们要操作的终端内输入script这个指令;完成操作之后,输入一个exit,嗯,是的,我们在这之间输入的指令以及指令的所有输出都会保留到一个文件(默认的保存文件是输入script的当前目录下的typescript文件)。
底下是操作实例:
- 终端的实际输入输出:
- coolzsb@cache2 /tmp$ script -t 2>timing example
- Script started, file is example
- coolzsb@cache2 /tmp$ touch 1 2 3 4 5
- coolzsb@cache2 /tmp$ ls
- 1 2 3 4 5 example timing
- coolzsb@cache2 /tmp$ exit
- Script done, file is example
复制代码
- 上述操作由script生成的目标文件example的内容:
- Script started on Fri Feb 29 14:09:28 2008
- coolzsb@cache2 /tmp$ touch 1 2 3 4 5
- coolzsb@cache2 /tmp$ ls
- 1 2 3 4 5 example timing
- coolzsb@cache2 /tmp$ exit
-
- Script done on Fri Feb 29 14:09:41 2008
复制代码
很方便是不??还有更拽的呢,script真的是一个太强悍的东西了:script指令还可以把时间信息输出到一个单独的文件中。有了这个文件,所有被script指令纪录的操作都可以使用scriptreplay命令在同一个终端内重放,而且还是使用和原来的会话相同的时间间隔重放!!
我的语言表达能力让你看糊涂了吧?那还是再来一个实际操作来加深理解吧。
大家看了我刚才给的例子觉得script这指令的输入碜复杂了些吧?其实上面的例子里面script还多数输出时间信息文件timing,现在我们用scriptreplay命令就要用到这个文件了。
用scriptreplay重放刚才的操作:
- coolzsb@cache2 /tmp$ /usr/src/util-linux-ng-2.13/misc-utils/scriptreplay /tmp/timing /tmp/example
- coolzsb@cache2 /tmp$ touch 1 2 3 4 5
- coolzsb@cache2 /tmp$ ls
- 1 2 3 4 5 example timing
- coolzsb@cache2 /tmp$ exit
复制代码
大家实际操作一下,就可以看到在终端上,scriptreplay会以我们刚才输入命令一致的速度重新把我们做的操作redo一遍,实在是够拽吧??
大家先别惊叹,其实,script还有更拽的用法呢!
当大家远程支持同一台机器上不同终端的用户的时候、或者是进行终端操作用户培训的时候,就可以用到script的这个很拽很拽的功能了
- 首先,在一个公共可读取的区域定义个命名管道:
- 然后把你的script输出指向到你刚才定义的命名管道:
- 告诉你要支持或者是要培训的用户在自己的终端里面用一下命令观察这个命名管道:
结果是,所有观察这个命名管道的用户都能一五一十的看到你在你自己终端上做的操作......
附录:
对于linux,scriptreplay这个脚本是放在Util-linux-ng这个包里面的,有些版本的linux可能没有提供,大家有兴趣的话,可以自行到kernel.org上下载。
附录之二:
实在是为了纪念今天这个4年一度的日子:2月29日。实在是没啥好写的,只好整了这么一篇东西出来,希望大家看着还不讨厌吧。 |
|