zoukankan      html  css  js  c++  java
  • Shell学习——子shell操作记录转储

    概述

    主要介绍子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
    
    
  • 相关阅读:
    【代码笔记】iOS-书架页面
    iOS-@inerface的11条规范写法
    (转)iOS-蓝牙学习资源博文收集
    iOS App启动图不显示的解决办法.
    理解点击屏幕的事件响应--->对- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法的理解
    理解点击屏幕的事件响应--->对UIView的hitTest: withEvent: 方法的理解
    iOS GCD中级篇
    iOS开发UI篇—自定义layer
    iOS开发UI篇—CALayer
    iOS-绘制图层-CALayer的属性
  • 原文地址:https://www.cnblogs.com/dzqk/p/9606334.html
Copyright © 2011-2022 走看看