免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1632 | 回复: 0
打印 上一主题 下一主题

[原创]unix tips系列之一:script实在是条很强悍的指令 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-29 16:15 |只看该作者 |倒序浏览
本文原出处:Coolzsb的杂货铺子
可自由转载,但请遵循“署名-非商业用途-保持一致”的创作共用协议。


前言:其实,我个人以为,分辨一个unix的系统管理员是否科班出身,会不会用script这条指令就是一个很明显的标志。

再下来我们要说的script可不是shell编程,而是一个标准的unix指令。相信不是每个unix管理员都会知道这条指令的:象我这样野路子出身的人,还是两年多前,某个来我们公司做售前产品测试支持的工程师让我第一次领略了script这个指令的功效。

script最普通的使用就是用来捕捉当前的终端会话中的所有输入输出结果到一个指定的文件里:这个,对于我们编写操作文档、错误提交来说,都是有莫大的方便的。我们只需要在我们要保存的操作过程开始之前,在我们要操作的终端内输入script这个指令;完成操作之后,输入一个exit,嗯,是的,我们在这之间输入的指令以及指令的所有输出都会保留到一个文件(默认的保存文件是输入script的当前目录下的typescript文件)。

底下是操作实例:

  • 终端的实际输入输出:


    1. coolzsb@cache2 /tmp$ script -t 2>timing example
    2. Script started, file is example
    3. coolzsb@cache2 /tmp$ touch 1 2 3 4 5
    4. coolzsb@cache2 /tmp$ ls
    5. 1  2  3  4  5  example  timing
    6. coolzsb@cache2 /tmp$ exit
    7. Script done, file is example
    复制代码

  • 上述操作由script生成的目标文件example的内容:



    1. Script started on Fri Feb 29 14:09:28 2008
    2. coolzsb@cache2 /tmp$ touch 1 2 3 4 5
    3. coolzsb@cache2 /tmp$ ls
    4. 1  2  3  4  5  example  timing
    5. coolzsb@cache2 /tmp$ exit
    6.                                                
    7. Script done on Fri Feb 29 14:09:41 2008
    复制代码





很方便是不??还有更拽的呢,script真的是一个太强悍的东西了:script指令还可以把时间信息输出到一个单独的文件中。有了这个文件,所有被script指令纪录的操作都可以使用scriptreplay命令在同一个终端内重放,而且还是使用和原来的会话相同的时间间隔重放!!
我的语言表达能力让你看糊涂了吧?那还是再来一个实际操作来加深理解吧。
大家看了我刚才给的例子觉得script这指令的输入碜复杂了些吧?其实上面的例子里面script还多数输出时间信息文件timing,现在我们用scriptreplay命令就要用到这个文件了。
用scriptreplay重放刚才的操作:


  1. coolzsb@cache2 /tmp$ /usr/src/util-linux-ng-2.13/misc-utils/scriptreplay /tmp/timing /tmp/example
  2. coolzsb@cache2 /tmp$ touch 1 2 3 4 5
  3. coolzsb@cache2 /tmp$ ls
  4. 1  2  3  4  5  example  timing
  5. coolzsb@cache2 /tmp$ exit
复制代码


大家实际操作一下,就可以看到在终端上,scriptreplay会以我们刚才输入命令一致的速度重新把我们做的操作redo一遍,实在是够拽吧??
大家先别惊叹,其实,script还有更拽的用法呢!
当大家远程支持同一台机器上不同终端的用户的时候、或者是进行终端操作用户培训的时候,就可以用到script的这个很拽很拽的功能了
  • 首先,在一个公共可读取的区域定义个命名管道:
    1. mkfifo /tmp/scriptout
    复制代码

  • 然后把你的script输出指向到你刚才定义的命名管道:
    1. script -f /tmp/scriptout
    复制代码

  • 告诉你要支持或者是要培训的用户在自己的终端里面用一下命令观察这个命名管道:
    1. cat /tmp/scriptout
    复制代码

结果是,所有观察这个命名管道的用户都能一五一十的看到你在你自己终端上做的操作......


附录:
对于linux,scriptreplay这个脚本是放在Util-linux-ng这个包里面的,有些版本的linux可能没有提供,大家有兴趣的话,可以自行到kernel.org上下载


附录之二:
实在是为了纪念今天这个4年一度的日子:2月29日。实在是没啥好写的,只好整了这么一篇东西出来,希望大家看着还不讨厌吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP