linux shell 历史命令记录功能

来自:https://segmentfault.com/a/1190000000716056

在 Linux 下面可以使用 history 命令查看用户的所有历史操作,同时 shell 命令操作记录默认保存在用户目录的.bash_history 文件中。通过这个文件可以查询 shell 命令的执行历史,有助于运维人员进行系统审计和问题排查,同时在服务器遭受黑客攻击后,也可以查询黑客登录服务器的历史命令操作。但是黑客在入侵后,为了抹除痕迹,会删除.bash_history 文件,这个就需要合理备份这个文件了。

默认的 history 命令只能查看用户的历史操作记录,但是不能区分每个用户操作命令的时间。这点对于问题排查相当的不方便。解决办法是在 /etc/bashrc 文件中加入以下四行来让 history 命令自动记录所有 shell 命令的执行时间:

HISTFILESIZE=4000
HISTSIZE=4000
HISTTIMEFORMAT='%F %T'
export HISTTIMEFORMAT

HISTFILESIZE 表示在 .bash_history 文件中保存命令的记录总数,默认值是 1000;HISTSIZE 定义了 history 命令输出的记录总数;HISTTIMEFORMAT 定义了时间显示格式,该格式与 date 命令后的 “+"%F %T"” 是一样的;HISTTIMEFORMAT 作为 history 的时间变量将值传递给 history 命令。

高级技巧

上面那个虽然可以记录时间,但是无法作为审计目的使用,很容易被黑客篡改或者丢失。下面这种方法详细记录了登录过系统的用户、IP 地址、shell 命令以及详细操作的时间。并将这些信息以文件的形式保存在一个安全的地方,以供系统审计和故障排查。

把以下代码放入 /etc/profile 文件中,即可实现上述功能。

 
 
<button href="javascript:void(0);" _xhe_href="javascript:void(0);" class="copyCode btn btn-xs" data-clipboard-text="" #record="" history="" operation"="" data-toggle="tooltip" data-placement="top" title="" style="overflow: visible; color: rgb(255, 255, 255); font-style: inherit; font-variant: inherit; font-stretch: inherit; font-size: 12px; line-height: 1.5; font-family: inherit; margin: 0px 0px 0px 5px; cursor: pointer; vertical-align: middle; border: 1px solid transparent; white-space: nowrap; padding-right: 5px; padding-left: 5px; border-radius: 3px; -webkit-user-select: none; outline: 0px; background-image: none; background-color: rgba(0, 0, 0, 0.74902);">复制
#Record history operation USER_IP=`who -u am i 2>/dev/null |awk '{print $NF}' |sed -e 's/[()]//g'` LOGNAME=`who -u am i |awk '{print $1}'` HISTDIR=/user/share/.history if [ -z $USER_IP] then USER_IP=`hostname` fi if [ ! -d $HISTDIR] then mkdir -p $HISTDIR chmod 777 $HISTDIR fi if [ ! -d $HISTDIR/${LOGNAME}] then mkdir -p $HISTDIR/${LOGNAME} chmod 300 $HISTDIR/${LOGNAME} fi export HISTSIZE=4000 DT=`date +"%Y%m%d_%H%M%S"` export HISTFILE="$HISTDIR/${LOGNAME}/${USER_IP}.history.$DT" export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S]" chmod 600 $HISTDIR/${LOGNAME}/*.history* 2>/dev/null
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以记录常用的linux命令,特别是比较长的,非常有用。使用方法:把该Q可执行文件考备份到linux上,任何目录都行,第一次执行用./q的方式执行,第一次执行之后q程序会被加到系统目录,以后每次执行都可以像使用系统命令一样。例如 1.查看保存过的命令 [root@localhost ~]# q 1_____clear 2_____tar -xzvf 3_____tar -czvf 4_____rpm -ivh 5_____lsnrctl status 6_____lsnrctl start 7_____lsnrctl stop 8_____vi /home/oracle/ora/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora 9_____/opt/lampp/lampp start 10_____/opt/lampp/lampp restart 11_____/opt/lampp/lampp stop 2.添加新命令 [root@localhost ~]# q -a "sqlplus /as sysdba" 1_____clear 2_____tar -xzvf 3_____tar -czvf 4_____rpm -ivh 5_____lsnrctl status 6_____lsnrctl start 7_____lsnrctl stop 8_____vi /home/oracle/ora/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora 9_____/opt/lampp/lampp start 10_____/opt/lampp/lampp restart 11_____/opt/lampp/lampp stop 12_____sqlplus /as sysdba 3.删除命令 [root@localhost ~]# q -d 12 1_____clear 2_____tar -xzvf 3_____tar -czvf 4_____rpm -ivh 5_____lsnrctl status 6_____lsnrctl start 7_____lsnrctl stop 8_____vi /home/oracle/ora/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora 9_____/opt/lampp/lampp start 10_____/opt/lampp/lampp restart 11_____/opt/lampp/lampp stop 4.执行保存过的命令 [root@localhost ~]# q 10 Stopping XAMPP for Linux 1.8.1... XAMPP: Stopping Apache with SSL... XAMPP: Stopping MySQL... XAMPP: XAMPP-ProFTPD is not running. XAMPP stopped.
shell脚本中统计程序执行时间有几种方法。一种方法是使用date命令记录开始时间和结束时间,然后计算它们之间的时间差。例如,可以使用以下命令获取开始时间和结束时间,并计算它们之间的差值: ``` startTime=`date +%Y%m%d-%H:%M:%S` startTime_s=`date +%s` # 脚本执行的代码 endTime=`date +%Y%m%d-%H:%M:%S` endTime_s=`date +%s` sumTime=$[ $endTime_s - $startTime_s ] echo "$startTime ---> $endTime" "Total: $sumTime seconds" ``` 另一种方法是使用time工具来计算脚本的执行时间。当你运行一个脚本时,在脚本前加上time关键字,例如`time sh xxx.sh`,会返回三个时间数据: - real:该命令的总耗时,包括用户、系统和IO等待时间。 - user:该命令在用户模式下的CPU耗时,即内核外的CPU耗时,不包括IO等待时间。 - sys:该命令在内核中的CPU耗时,不包括IO和时间片切换耗时。 使用这两种方法之一,你可以方便地统计shell脚本的运行时间。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【ShellShell时间相关|统计Shell脚本执行时间|sleep](https://blog.csdn.net/bandaoyu/article/details/115525067)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值