概述

主要介绍子shell历史操作记录的保存以及解析,比如python, scala等,用于(准)实时监控用户行为.

背景

一级shell的历史操作记录已由系统实现,当用户从开始登录shell(这里指父shell)到退出,期间所有的操作记录都将记录在

~/.bash_history文件里, 但是当我从父shell新建一个子shell时(例如在当前shell执行scala),所有在scala命令行的

操作记录将不会被系统监控到, 那如果我想获取这里操作记录该怎么做, 别担心,办法总比问题多,这里的实现用到 tee 命令

设计思路

  • 设置scala别名
  • 使用tee把scala在终端的所有操作记录转储到文件
  • 使用sed解析日志文件, 获取想要的结果(这里指用户在scala的输入)

案例分析

scala

  • 别名设置

当用户执行scala命令时,自动实现操作记录转储

# 这里把日志保存到当前用户的log目录下
]# alias scala="scala | tee -a -i /home/${USER}/${LOGNAME}/$(date '+%Y%m%d').log" # 永久生效
# 在/etc/bash文件末尾添加下面一行
]# vim /etc/bash
alias scala="scala | tee -a -i /home/${USER}/${LOGNAME}/$(date '+%Y%m%d').log"
  • 运行scala
]$ scala
Welcome to Scala 2.12.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_171).
Type in expressions for evaluation. Or try :help. scala> 1 + 1
res0: Int = 2 scala> println("hello scala")
hello scala scala>
  • 检查日志文件

这里的log文件就是转储后的文件,请看下面,是不是把scala在终端的所有操作记录都保存下来了

]# tailf 20180907.log
Welcome to Scala 2.12.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_171).
Type in expressions for evaluation. Or try :help. scala> 1 + 1
res0: Int = 2 scala> println("hello scala")
hello scala scala>
  • sed解析转储后的文件

请看结果,是不是解析后的输出就是之前用户在scala终端的输入

# 这里只取用户输入命令
]# sed -n '/scala/p' 20180907.log | sed 's/scala> //g'
1 + 1
println("hello scala")
hello scala

Shell学习——子shell操作记录转储的更多相关文章

  1. Shell学习之Shell特性(一)

    Shell学习之Shell特性 目录 命令和文件自动补齐功能 命令历史记忆功能 history.上下键.!number.!string.!$.!! 别名功能 alias.unalias cp.~use ...

  2. LinuxShell脚本编程基础2-变量与数值运算、父shell和子shell

    1.变量和数值运算 Shell脚本的变量不需要声明的 对变量赋值有两种方式, 直接用“=” 或者用键盘输入值 #!/bin/bash name1="Jack" echo $name ...

  3. Shell:子shell概念

    Blog:博客园 个人 目录 shell环境 什么是子shell 子shell的分类 shell环境 每个shell进程有一个自己的运行环境,不同的Shell进程有不同的Shell环境.Shell解析 ...

  4. Linux中shell和子shell一点点理解

    Linux执行脚本有两种方式,主要区别在于是否建立子shell   1.像sh,bash,./命令是用来执行shell脚本的,在bash/sh命令下,脚本文件可以无"执行权限",即 ...

  5. Shell学习笔记 - Shell变量

    一.变量的命名 变量名必须以字母或下划线开头,由字母.数字.或下划线组成,变量名的长度不能超过255个字符. 二.变量的分类 1. 用户自定义变量 2. 环境变量 3. 位置参数变量 4. 预定义变量 ...

  6. linux shell学习(字符串操作)--01

    http://blog.csdn.net/shuanghujushi/article/details/51298672 在bash shell的使用过程中,经常会遇到一些字符串string的操作,下面 ...

  7. linux shell 学习笔记--比较操作

    整数比较 -eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如:if [ "$a" -ne "$b&qu ...

  8. linux shell学习之shell流程控制

    在linux shell编程中,流程控制结构与语句,也算是shell脚本中的重点了,不了解的朋友,跟随脚本小编一起来学习下吧. linux控制流结构学习. 一,shell控制流结构 1.控制结构   ...

  9. shell学习——关于shell函数库的使用

    shell函数库的理解: 个人理解,shell函数库实质为一个脚本,脚本内包含了多个函数(函数具有普遍适用性). shell函数库的调用: 通过  . /path/lib/file.lib 或者 so ...

随机推荐

  1. 一、C#简单读写

    using System.IO; static string configFileName = "config.json"; //不存在就直接新建文件夹 public static ...

  2. [翻译] GTAppMenuController

    GTAppMenuController https://github.com/gianlucatursi/GTAppMenuController This is a simple project in ...

  3. iso、ios、osi的区别

    ISO  国际标准化组织(International Organization for Standardization)简称ISO,是一个全球性的非政府组织,是国际标准化领域中一个十分重要的组织.IS ...

  4. SQL insert语句中插入带有特殊符号

    1.插入数据库字符串中海油单引号,需要转义处理,例如插入“I‘m OK!” SQL语句: INSERT INTO tableTest(FileTXT) VALUES('I''m OK!') 2.如果S ...

  5. Mysql学习---Python操作Mysql 1231

    安装PyMysql 安装PyMysql:Py3默认自带pip3安装,Py2默认无pip命令 cmd进入PyCharm的安装目录完成安装 pip3 install pymysql 安装完成的位置:E:\ ...

  6. 沉淀再出发:关于IntelliJ IDEA使用的一些总结

    沉淀再出发:关于IntelliJ IDEA使用的一些总结 一.前言 在使用IDEA的时候我们会发现,如果我们先写了一个类的名字,而没有导入这个类的出处,就会提示出错,但是不能自动加入,非常的苦恼,并且 ...

  7. 利用Fiddler2和Proxifier分析你用的中国菜刀是否带有后门

    为了避免自己辛辛苦苦拿下的站点被一些拿来主义者不费吹灰之力就据为己有,下面来教大家如何检测菜刀有没有留后门. 对于有没有后门这个问题,大牛们会说抓包看一下就行了,那如何抓包呢?有很多软件可以,这里使用 ...

  8. BZOJ1369:[Baltic2003]Gem(树形DP)

    Description 给出一棵树,要求你为树上的结点标上权值,权值可以是任意的正整数 唯一的限制条件是相临的两个结点不能标上相同的权值,要求一种方案,使得整棵树的总价值最小. Input 先给出一个 ...

  9. 随手练——洛谷-P1008 / P1618 三连击(暴力搜索)

    1.普通版 第一眼看到这个题,我脑海里就是,“我们是不是在哪里见过~”,去年大一刚学C语言的时候写过一个类似的题目,写了九重循环....就像这样(在洛谷题解里看到一位兄台写的....超长警告,慎重点开 ...

  10. Monkeyrunner命令

    1.使用Monkeyrunner脚本命令时,需要导入模块才能使用模块的脚本命令,Monkeyrunner的常用模块有 MonkeyRunner,MonkeyDevice,MonkeyImage,Mon ...