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来查看历史命令记录,但如果 ...
随机推荐
- 学习Spring Boot:(二十二)使用 AOP
前言 AOP 1,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.基于AOP实现的功能不会破坏原来程序逻辑,因此它可以很好的对业务逻辑的各个部分进行隔离,从而使得业 ...
- 监控(3)进程通用shell
#! /bin/bash proc_name="beam.smp" #进程名 proc_num() #查询进程数{ num=`ps -ef | grep $proc_name | ...
- sliding menu
http://www.androiduipatterns.com/2012/06/emerging-ui-pattern-side-navigation.htmlhttps://github.com/ ...
- 关于移动端及flex
我们知道写pc页面的时候,ui设计图是多少px,我们写网页的时候,就会写多少px,这个其实就是由pc端屏幕的物理像素,和我们设计图的css逻辑像素决定的,由于屏幕的物理像素和css逻辑像素比,刚好是1 ...
- 目标检测网络之 R-FCN
R-FCN 原理 R-FCN作者指出在图片分类网络中具有平移不变性(translation invariance),而目标在图片中的位置也并不影响分类结果;但是检测网络对目标的位置比较敏感.因此Fas ...
- 编译RocketMQ
目前最新版本为 官方没有提供可执行的安装包,只提供了maven项目,去GitHub下载 点击Download ZIP 就可以了,如果你安装了版本控制工具 SVN 或者 GIT 就可以使用它上边的 UR ...
- loadrunner之Java Vuser协议脚本编写
步骤:1.根据自己使用的lr版面选择jdk 1)LR11 1.6 32位 2)LR12 1.7 32位 2.安装好jdk,并搭建java环境变量,安装好java代码编写工具 3.在sr ...
- GBDT
一.决策树分类 决策树分为两大类,分类树和回归树 分类树用于分类标签值,如晴天/阴天/雾/雨.用户性别.网页是否是垃圾页面 回归树用于预测实数值,如明天的温度.用户的年龄 两者的区别: 分类树的结果不 ...
- http原理详解
http原理详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.OSI和TCP/IP协议. 我们知道在我们计算机中的网络通信有两个模型,一个是ISO组织的OSI模型,另一个是T ...
- Swift学习笔记4
1.延迟存储属性是指当第一次被调用的时候才会计算其初始值的属性.在属性声明前使用lazy来标示一个延迟存储属性. 必须将延迟存储属性声明成变量(使用var关键字),因为属性的初始值可能在实例构造完成之 ...