• 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
    
    
  • 相关阅读:
    docker学习笔记(一)-vagrant/docker machine安装docker,阿里云通过docker machine安装docker
    docker安装 centos7
    Robot Framework user guide
    Powershell 备忘
    如何在linux系统内用openssl 生成 过期的证书
    同时装了Python3和Python2,怎么用pip?
    python 基础笔记三
    python 基础笔记二
    python对文件的操作
    3-4 字典的嵌套
  • 原文地址:https://www.cnblogs.com/dzqk/p/9606334.html
Copyright © 2020-2023  润新知