script学习,如何用linux监控你的同事?
环境:CentOS7
一、为什么要学习script命令
二、 什么是script命令
三、script命令的基本用法操作
选项:
-a, --append 附加输出
-c, --command <command> 运行命令而不是交互式shell
-e, --return 返回子进程的退出代码
-f, --flush 每次写入后运行flush--force 使用输出文件,即使它是一个链接
-q, --quiet 可以使script命令以静默模式运行-t, --timing[=<file>] 指明输出录制的时间数据
-V, --version 输出版本信息并退出
-h, --help
显示此帮助并退出终端会话录制。
script -t 2>demo.time -a demo.his #开始录像,ctrl+d或者exit结束2> 完整输出demo.time 对时间线的记录demo.his 对操作命令等内容的记录scriptreplay demo.time demo.his
四、实例,玩转script
1.情景一:自己想记录自己输入的命令,用于教学或者想实现学生作业的完成证明
##开始录像,直接输入命令回车就好,其中-t用于存储时序文件,这里导入到stderr,再重定向到test.time中,-q表示静默的方式,-a追加到test.his中,-f除了看视频回放还可以看日志,主要用于教学
##注意事项:必须是以exit 和ctrl+d结束,不然就会破坏时间线的记录,那只能看日志记录
[root@uplooking /tmp/liu]# script -t 2>test.time -q -a -f test.his
##回放视频,通过ls可以查看有两个文件
[root@uplooking /tmp/liu]# ls
test.his test.time
##回放视频,test.time 对时间线的记录,test.his 对操作命令等内容的记录,而且这两个文件很小,可以拷贝到需要播放的机器上进行播放。
[root@uplooking /tmp/liu]# scriptreplay test.time test.his
##也可以查看日志记录
[root@uplooking /tmp/liu]# cat test.his
2.情景二:想知道你的同事在做什么
##在对方家目录.bash_profile文件中加上下面内容,有些人会说我可以看他家目录的.history文件啊,但注意这个文件只要不是正常下线的都不会记录,而且只能看命令,不能看命令输出结果,就是回显
##变量是定义文件存放的位置和每次时间,并且只要他一登陆就会自动录像,exec就是防止他发现kill掉自己的进程,只要kill掉,他的终端就会掉线
m_path1=/data/mon/`date +%F-%H:%M`.time
m_path2=/data/mon/`date +%F-%H:%M`.his
exec script -t 2>$m_path1 -a -f -q $m_path2
3.情景三:我想实现想监控谁就监控谁,不想监控就取消,那说的就是下面这个脚本啦
#!/bin/bash ## 描述:可以对某个用户实施录像,并且回放,可以实施进行教学 ## 作者:小刘 ## 联系方式:xiaoli@qq.com ## TEL:13777773695 ## 版本:V_1.0 ## 注意录制视频时,时间不要太长,不然内存和磁盘占用空间大 read -p "请输入你要录像的用户:" user ##判断用户是否存在,如果不存在则退出 id $user &>/dev/null if [ $? -ne 0 ] then echo "$user不存在" exit 1 fi ##判断用户是否已经被录像 m_user(){ path="/home/$user/.bash_profile" num=`cat $path |grep '\<script\>' |wc -l` if [ $num -eq 1 ] then echo "$user已经被录像" exit fi } ##对用户实施录像 m_mon(){ path="/home/$user/.bash_profile" chattr +a $path echo "m_path1=/data/mon/\`date +%F-%H:%M\`.time" >>$path echo "m_path2=/data/mon/\`date +%F-%H:%M\`.his" >>$path echo "script -t 2>\$m_path1 -a -f -q \$m_path2" >> $path echo "正在实施录像....." } ##取消录像 m_cancael(){ path="/home/$user/.bash_profile" chattr -a $path sed -i '/\<script\>/{d}' $path sed -i '/\<m_path1\>/{d}' $path sed -i '/\<m_path2\>/{d}' $path sed -i '/\<'$user'\>/{d}' /root/mon_user.txt echo "正在实施取消录像....." read -p "实施录像请按:y 取消录像请按:n 查询被录像用户请按q:" yes case $yes in y) m_user m_mon echo "$user" >> /root/mon_user.txt ;; n) m_cancael ;; q) cat /root/mon_user.txt ;; *) echo "error:input error" exit 1 esac