使用系统内置script和scriptreplay命令来记录操作记录
想要记录整个操作流程,需要使用到两个工具,script和scriptreplay,实验环境是CentOS6.6,默认都是安装的!
script命令用来记录整个历史操作流程,但是必须得使用相应的参数和固定的格式。
[root@wy-xxb ~]# script -t 2> test.time -a test.out 指定一个时间戳文件和命令输出文件(-a表示追加) Script started, file is test.out
接下来你就可以做自己想要做的操作了,整个操作过程都会记录在test.out文件,知道使用exit或者ctrl+d退出。会保留两个文件(time和out)
退出提示:
[root@wy-xxb ~]# exit
Script done, file is test.out
scriptreplay命令用来动态显示历史操作记录,其实可以理解为无声的MV了。
[root@wy-xxb ~]# scriptreplay test.time test.out 注意,时间戳文件和命令输出文件位置不能反
当历史操作播放完毕后会自动退出!
那么,问题来了~
很多人会问到,这个除了好玩之外,还有什么用处吗?我想说,只要好玩,有意思,那用处是必须有的啊!
比如说。。。。。。。。。。
你可能让你的工程师或者某个人远程访问你的系统,要确保你的工程师正在干正确的事,你可以记录下他在你系统上的所作所为。要让script命令在登录时自 动运行,我们可以把它添加进shell环境配置文件中。这样在出现什么误操作之后,你就可以使用scriptreplay命令查看是哪些误操作造成的,以免及时的恢复应用。
[root@wy-xxb test]# vim /etc/profile
if [ $UID -ge 500 ];then
exec /usr/bin/script -qaf -t 2> /var/log/test/$USER-$UID-`date +%Y%m%d%H%M`.time -a /var/log/test/$USER-$UID-`date +%Y%m%d%H%M`.out
fi
[root@wy-xxb test]# ssh xxb@localhost 模拟登录到远程用户,并进行相应操作
会看到,在/var/log/test/目录下生成相应的文件
[root@wy-xxb test]# ll /var/log/test/*
-rw-rw-r--. 1 xxb xxb 1075 Apr 15 14:21 /var/log/test/xxb-500-201504151419.time
-rw-rw-r--. 1 xxb xxb 3331 Apr 15 14:21 /var/log/test/xxb-500-201504151419.out
播放远程操作记录
[root@wy-xxb test]# scriptreplay xxb-500-201504151419.log xxb-500-201504151419.out
- 关于MySQL DNS解析探究之一:DNS解析确实在起作用
- 每一个程序员需要了解的10个Linux命令
- 实战案例 | 使用机器学习和大数据预测心脏病
- 关于JVM直接内存触发Full GC
- 极客DIY:通过树莓派发送摩斯码
- Hadoop SequnceFile.Writer 压缩模式及压缩库浅析
- Thrift抛直接内存OOM一点解决思路
- 小顶堆Java实现
- Tomcat源码分析一:源码导入
- 如何使用Metasploit对安卓手机进行控制
- 关于MySQL DNS解析探究之二:unauthenticated user
- Thrift Direct Memory OOM问题解决方法
- Mapreduce程序中reduce的Iterable参数迭代出是同一个对象
- 内部威胁那些事儿(二):系统破坏
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [900]mysql字符串数字互转
- 技术分享 | Semi-join Materialization 子查询优化策略
- 前端性能和错误监控
- Network在单细胞转录组数据分析中的应用
- PAT (Basic Level) Practice (中文)1024 科学计数法 (20 分)
- PAT (Basic Level) Practice (中文)1053 住房空置率 (20 分)
- 解决vue+axios请求报错POST http: net::ERR_CONNECTION_REFUSED,在封装的请求中统一处理请求异常的问题
- PAT (Basic Level) Practice (中文)1025 反转链表 (25 分)
- Pytest+Allure接口自动化一些学习分享
- 数据结构___马踏棋盘详尽实现+报告+通俗易懂注释
- 使用elasticsearch-dump迁移elasticsearch集群数据
- PAT (Basic Level) Practice (中文)1027 打印沙漏 (20 分)
- PAT (Advanced Level) Practice 1002 A+B for Polynomials (25 分)
- 关于MySQL varchar类型最大值,原来一直都理解错了
- PAT (Basic Level) Practice (中文)1028 人口普查 (20 分)