script & scriptreplay
script是什么
scirpt就是一个命令,可以制作一份记录输出到终端的记录。对于那些想要真实记录终端会话的人来说,这很有用。该记录可以保存并在以后再打印出来。
怎么用
默认情况下,我们可以通过在终端中输入script来启动scirpt命令。
pungki@dev-machine:~$ script
Script started, file is typescript
pungki@dev-machine:~$
你也可以指定目标文件名来记录打印结果。
pungki@dev-machine:~$ script myfile
当你再次见到命令提示符,这意味着终端将记录打印到终端的任何东西。
你会看到当前目录,有个名为myscript的文件。(LCTT译注,此处原文有误。这里指定了记录文件名为myfile,而不是默认的 typescript。)
为什么我们要用script命令
因为在之前已经提到过,script命令的主要功能是记录所有的东西。下面给出了两个使用该命令的场景。
和同事共事时
当和同事一起工作时,我们可以通过script来记录你的活动。
比如,我们会使用名为collaborate的打印文件,来完成打印:
$ script collaborate
然后,在完成一些任务后,假如你需要把你干的活发给另外一个工程师,那就把那文件发给他。所以当另外一个工程师需要复查所做的事情,他只要用文本编辑器打开这个文件就行了。
如果他想要更新该文件(以增加他的工作部分),可以使用-a选项。
$ script -a collaborate
记录某人在终端中的所作所为
你可能让你的工程师或者某个人远程访问你的系统,要确保你的工程师正在干正确的事,你可以记录下他在你系统上的所作所为。要让script命令在登录时自动运行,我们可以把它添加进shell环境配置文件中。如果你正在使用bash shell,把这一行加进你的bash环境配置文件中。
$ vi ~/.profile
# run the script command to record everything
# use -q for quite and -a option to append the script
#
/usr/bin/script -qa /usr/local/script/log_record_script
然后保存。下次他登录进你的系统时,script命令就会自动运行,并把日志记录进/usr/local/script/logrecordscript。
-q选项可以让scirpt命令以静默模式运行,登录进来的用户不会知道script命令已经运行了。而-a选项将会让记录附加到文件中,而不会擦除先前的记录。
如果不使用-q选项,那么当用户登录进来时,他会收到像下图中这样的通知。
退出记录
要退出记录活动,我们可以在终端中按下Ctrl+D,或者输入exit。在退出script前,你会发现记录文件的大小为0 Kb,而在退出之后,文件大小会发生改变。
结尾
Script命令在你需要记录或者存档终端活动时可能很有用,记录文件会存储为文本文件,所以可以很方便地用文本编辑器打开。跟平常一样,我们都可以通过输入man script或者scirpt -h来显示帮助页并查看更多详细用法。
在书上看到两个很有趣的命令——script和srciptreplay,它可以把终端会话记录到一个文件中,即是说我们可以通过终端会话来来制作命令行技巧视频教程,也可以与他人分享会话文件,而且生成的文件还只是一般的文本文件,文件的大小非常小,真是非常有意思。下面是本人写的两个shell程序,来方便进行这个有趣并有意义的操作。
一、实现代码
文件:Record.sh
代码如下:
#! /bin/bash
# Filename:Record.sh
read -p "Please input the sesson filename you want to creat: " filename;
sesfile="$filename.session"
logfile="$filename.timing.log"
if [ -e $sesfile ];then
echo "$sesfile is Exsit,Creat session file fault!";
read -p "If you want to reload the file? [Y/N]: " flag;
if [ "$flag" = "Y" ];then
rm $sesfile $logfile;
script -t 2> $logfile -a $sesfile;
else
echo "Nothing to do!";
fi
else
script -t 2> $logfile -a $sesfile;
fi
文件:Replay.sh
代码如下:
#! /bin/bash
# Filename:Replay.sh
read -p "Please input the session filename: " filename
logfile="$filename.timing.log"
sesfile="$filename.session"
if [ -e $sesfile ]; then
scriptreplay $logfile $sesfile
echo
else
echo "$filename is NOT Exsit!"
fi
二、程序分析
首先来说说这两个文件分别是用来干什么的吧,Record.sh是用来记录你所执行的命令和屏幕的输出的,而Replay.sh是用来回放Record.sh所录制的内容的。
在Record.sh中,首先要求你输入一个用来保存信息的文件名,如output,然后在程序中创建两个文件,文件名为你所输入的文件名加上不同的后缀形成,如output.timing.log和output.session,然后检查所输入的文件是否已存在,若存在,则询问是否以新的文件覆盖旧的文件,若是,则删除原有文件,创建新的文件并写入数据,若否,则不做任何工作。Replay.sh中输入一个文件名,首先判断该文件是否存在,存在则播放。
在Record.sh中,可以看到script的参数是两个文件,为了便于辨认,我在输入的文件名加上了特定的后缀,即使在Linux上,文件后缀是没意义的,其中一个后缀的.timing.log,用于存储时序信息,描述每一个命令在何时运行,另一个文件,后缀为.session,用于存储命令输出。有了这两个文件就可以实现播放功能,这就有点像大家熟悉的Windows下的lrc歌词文件的播放功能吧,个人觉得。
而由于有两种输出,所以就要用数据流重定向,把不同的输出流输出不同的文件中,在Record.sh中我们也可以看到,我们用2>把时序信息通过stderr写入文件.timing.log,通过>把命令执行信息写入文件.session。
而Replay.sh则相对简单,它只需要判断输入的文件是否存在,就可以进行播放。如你想播放上面Record.sh中制作的文件,则只需要输入output即可。
script & scriptreplay的更多相关文章
- Linux Cmd Tool 系列之—script & scriptreplay
Intro Sometime we want to record cmd and outputs in the interactive shell sessions. However history ...
- 给Android系统安装busybox
转自:http://blog.csdn.net/lxgwm2008/article/details/38925051 busybox号称Linux平台的瑞士军刀,它集成了100多个最常用的Linux命 ...
- linux shell学习记录
1.shell脚本开始以 #! /usr/bin 这个叫做Shebang 这个指定解释器的路径 2.shell 一些配置在~/.bashrc中,运行的历史shell命令在~/.bash_history ...
- flock SUSE/RHEL
Util-linux-2.26 Util-linux 软件包其它实用程序.包括处理文件系统.控制台.分区以及消息等工具. 大概编译时间:1.3 SBU 需要磁盘空间:137 MB 6.65.1. FH ...
- Linux 装机必备工具
linux 装机必备工具:安装这些基本能满足日常需求. #!/usr/bin/env sh echo "Env" # vim # tmux # ssh ...
- Util-linux-ng-2.17
yum install -y util-linux-ng 即可安装Util-linux-ng,其中包含了非常多的软件 Util-linux-ng 的内容 安装的程序:addpart, agetty, ...
- Shell-2-命令之乐
1.cat (1)基本用法 [root@cai tmp]# cat 1.txt 2.txt this is a test1 this is a test 2 (2)cat -s file(删除额外空白 ...
- linux系统监控:记录用户操作轨迹,谁动过服务器
1.前言 我们在实际工作当中,都碰到过误操作.误删除.误修改过配置文件等等事件.对于没有堡垒机的公司来说,要在linux系统上深究到底谁做过配置文件的修改.做过误删除是很头疼的事情,特别是遇到删库跑路 ...
- Linux下监控用户操作轨迹
在实际工作当中,都会碰到误删除.误修改配置文件等事件.如果没有堡垒机,要在linux系统上查看到底谁对配置文件做了误操作,特别是遇到删库跑路的事件,当然可以通过history来查看历史命令记录,但如果 ...
随机推荐
- WCF快速搭建Demo
WCF快速搭建Demo ps:本Demo只是演示如何快速建立WCF 1.首先完成IBLL.BLL.Model层的搭建,由于数据访问层不是重点,WCF搭建才是主要内容,所以本Demo略去数据访问层. 新 ...
- CF1043
找个下午打了场CF,结果被某uranus吊打......一千多名,过弱. T1,一眼二分了,后来发现题解是O(1)的hhh T2,题意精炼一下就是让你找一个串的循环节个数,直接n²枚举..... T3 ...
- 总算知道怎样从ImageMagick生成的数据转换成HICON: MagickGetImageBlob & LookupIconIdFromDirectoryEx
MagickSetImageFormat(mw, "ICO"); //设置这个后, MagickGetImageBlob 才能返回正确的值 size_t length; PBYTE ...
- dos初始操作和全屏方法
1.初始操作 mount d d:\ ;选择挂载的硬盘 d:\ cd Dos cd MASM ;到达debug/edit/link/masm.exe文件的位置 ;然后可以进行debug/edit xx ...
- Eclipse导入模板格式Xml配置文件
Eclipse一般常用的可以导入两处 *.xml 格式的模板,一个是常用的注释格式模板,另一个是代码格式化时用的模板,导入方法如下: 假设: 1.xml 是代码注释格式模板 2.xml 是代码 ...
- Python IPy模块
#!/usr/bin/env python # -*- coding: utf-8 -* # Created by YangYongming at 2018/09/17 20:22 # FileNam ...
- JavaSE学习总结(五)——封装,继承,多态很简单
java面向对象的三大特性是:封装.继承与多态,是面向对象编程的核心. 一.封装 简单说封装就是将同一类事物的特性与功能包装在一起,对外暴露调用的接口. 封装:封装也称信息隐藏,是指利用抽象数据类型把 ...
- springboot下实现邮件发送功能
springboot给我们封装好了邮件功能,非常简单,只需要稍微配置下就ok. 引入jar <dependency> <groupId>org.springframework. ...
- H5静态资源本地化实践
现在很多app都是通过webview内嵌H5的页面,这种方式的好处就是无需发版就能更新线上的内容,而且可以做到多平台的统一开发,节约开发成本.但是这种模式也带来了一定的问题,web开发很大程度依赖于网 ...
- SpringJMS解析--监听器
消息监听器容器是一个用于查看JMS目标等待消息到达的特殊bean,一旦消息到达它就可以获取到消息,并通过调用onMessage()方法将消息传递给一个MessageListener实现.Spring中 ...