当前位置: 首页 > 科技观察

在Linux上记录和重播终端会话活动

时间:2023-03-15 20:02:30 科技观察

通常,Linux管理员使用history命令来跟踪在以前的会话中执行了哪些命令,但history命令的局限性在于它不存储命令的输出。在某些情况下,我们想要检查前一个会话的命令输出,并将其与当前会话进行比较。除此之外,在某些情况下,我们正在对Linux生产环境中的问题进行故障排除,并希望保存所有终端会话活动以供将来参考,因此在这种情况下,脚本命令就派上用场了。script是一个命令行工具,用于捕获/记录您的Linux服务器终端会话活动,稍后您可以使用scriptreplay命令重播记录的会话。在本文中,我们将演示如何安装脚本命令行工具以及如何记录Linux服务器终端会话活动,然后我们将看到如何使用scriptreplay命令重播记录的会话。RHEL7/CentOS7安装脚本工具脚本命令由rpm包util-linux提供,如果你的CentOS7/RHEL7系统没有安装,运行以下yum安装:[root@linuxtechi~]#yuminstallutil-linux-y在RHEL8/CentOS8上安装脚本工具运行以下dnf命令在RHEL8/CentOS8上安装脚本工具:[root@linuxtechi~]#dnfinstallutil-linux-y在基于Debian的系统(Ubuntu/LinuxMint)上安装脚本工具运行以下apt-get命令来安装脚本工具:root@linuxtechi~]#apt-getinstallutil-linux-y如何使用脚本工具直接使用script命令,在终端输入script命令并回车,它会开始捕获当前终端会话活动到一个名为typescript的文件中。[root@linuxtechi~]#scriptScriptstarted,fileistypescript[root@linuxtechi~]#要停止记录会话活动,键入退出命令并按回车:[root@linuxtechi~]#exitexitScriptdone,fileistypescript[root@linuxtechi~]#scriptcommandsyntax:~]#script{options}{file_name}脚本命令中可以使用的不同选项:options-script-command让我们通过执行脚本命令开始记录Linux终端会话,然后执行一些事情比如w,route-n,df-handfree-h,例子如下:script-examples-linux-server正如我们在上面看到的,终端会话日志保存在文件typescript:nowusecat/vicommand要查看typescript文件的内容,[root@linuxtechi~]#ls-ltypescript-rw-r--r--。1rootroot1861Jun2100:50typescript[root@linuxtechi~]#typescript-file-content-linux以上确认我们在终端执行的所有命令都已经保存在typescript文件中。在脚本命令中使用自定义文件名假设我们要使用自定义文件名来执行脚本命令,我们可以在脚本命令后指定文件名。在下面的示例中,我们使用名为session-log-(currentdatetime).txt的文件。[root@linuxtechi~]#scriptsessions-log-$(date+%d-%m-%Y-%T).txt脚本启动,文件为sessions-log-21-06-2019-01:37:39。txt[root@linuxtechi~]#现在运行这个命令并输入exit:[root@linuxtechi~]#exitexitScriptdone,fileissessions-log-21-06-2019-01:37:39.txt[root@linuxtechi~]#Appendcommandoutputtoscriptrecordfile假设脚本命令已经将命令输出记录到一个名为session-log.txt的文件中,现在我们要将新会话命令的输出追加到该文件中,那么在脚本命令中使用-a选项。[root@linuxtechi~]#script-asessions-log.txt脚本启动,文件为sessions-log.txt[root@linuxtechi~]#xfs_info/dev/mapper/centos-rootmeta-data=/dev/mapper/centos-rootisize=512agcount=4,agsize=2746624blks=sectsz=512attr=2,projid32bit=1=crc=1finobt=0spinodes=0data=bsize=4096blocks=10986496,imaxpct=25=sunit=0swidth=0blksnaming=version2bsize=4096ascii-ci=0ftype=1log=internalbsize=4096blocks=5364,version=2=sectsz=512sunit=0blks,lazy-count=1realtime=noneextsz=4096blocks=0,rtextents=0[root@linuxtechi~]#exitexitScriptdone,fileissessions-log.txt[root@linuxtechi~]#要查看更新的会话记录,使用catsession-log.txt命令。在没有shell交互的情况下将命令输出捕获到脚本日志文件假设我们要将命令输出捕获到会话日志文件,然后使用-c选项,示例如下:[root@linuxtechi~]#script-c"uptime&&hostname&&date"root-session.txt脚本启动,文件为root-session.txt01:57:402:30,3个用户,平均负载:0.00、0.01、0.05linuxtechiFriJun2101:57:40EDT2019脚本完成,文件为root-session.txt[root@linuxtechi~]#以静默模式运行脚本命令要以静默模式运行脚本命令,请使用-q选项,它将抑制脚本的启动和完成消息,示例如下如下:[root@linuxtechi~]#script-c"uptime&&date"-qroot-session.txt02:01:10up2:33,3users,loadaverage:0.00,0.01,0.05FriJun2102:01:10EDT2019[root@linuxtechi~]#将计时信息记录到文件中并将命令输出捕获到单独的文件中,这可以通过在脚本命令中传递计时文件(-timing)来实现,示例如下:语法格式:~]#script-t{file_name}[root@linuxtechi~]#script--timing=timing.txtsession.log脚本启动,文件为session.log[root@linuxtechi~]#uptime02:27:59up3:00,3users,loadaverage:0.00,0.01,0.05[root@linuxtechi~]#dateFriJun2102:28:02EDT2019[root@linuxtechi~]#free-htotalusedfreesharedbuff/cacheavailableMem:3.9G171M2.0G8.6M1.7G3.3GSwap:3.9G0B3.9G[root@linuxtechi~]#whoamiroot[root@linuxtechi~]#exexitScript完成,文件是session.log[root@linuxtechi~]#[root@linuxtechi~]#ls-lsession.logtiming.txt-rw-r--r--。1rootroot673Jun2102:28session.log-rw-r--r--。1rootroot414Jun2102:28timing.txt[root@linuxtechi~]#ReplayrecordLinuxterminalsessionactivity现在,使用scriptreplay命令来重放记录的终端会话活动注意:scriptreplay也是rpm包util-提供的Linux。scriptreplay命令需要计时文件才能工作。[root@linuxtechi~]#scriptreplay--timing=timing.txtsession.log以上命令的输出结果如下,记录了所有用户的Linux终端会话活动在一些业务关键的Linux服务器上,我们想跟踪所有用户活动,这可以使用脚本命令来完成,在/etc/profile文件中放入以下内容,[root@linuxtechi~]#vi/etc/profile………………………………………………if["x$SESSION_RECORD"="x"]thentimestamp=$(date+%d-%m-%Y-%T)session_log=/var/log/session/session.$USER.$$.$timestampSESSION_RECORD=startedexportSESSION_RECORDscript-t-f-q2>${session_log}.timing$session_logexitfi……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………保存文件退出。在/var/log文件夹下创建session目录:[root@linuxtechi~]#mkdir/var/log/session给文件夹赋权限:[root@linuxtechi~]#chmod777/var/log/session/[root@linuxtechi~]#现在,验证上面的代码是否有效。在我使用pkumar用户的情况下,以普通用户身份登录到Linux服务器:~]#sshroot@linuxtechiroot@linuxtechi'spassword:[root@linuxtechi~]$uptime04:34:09up5:06,3个用户,平均负载:0.00,0.01,0.05[root@linuxtechi~]$dateFriJun2104:34:11EDT2019[root@linuxtechi~]$free-htotalusedfreesharedbuff/cacheavailableMem:3.9G172M2.0G8.6M1.7G3.3GSwap:3.9G0B3.9G[root@linuxtechi~]$iuid=1001(pkumar)gid=1002(pkumar)groups=1002(pkumar)context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023[root@linuxtechi~]$whoamipkumar[root@linuxtechi~]$以root退出登录并查看用户的linux终端会话活动[root@linuxtechi~]#cd/var/log/session/[root@linuxtechi会话]#ls-l|greppkumar-rw-rw-r--。1pkumarpkumar870Jun2104:34session.pkumar.19785.21-06-2019-04:34:05-rw-rw-r--。1pkumarpkumar494Jun2104:34session.pkumar.19785.21-06-2019-04:34:05.timing[root@linuxtechisession]#Session-output-file-linux我们也可以使用scriptreplay命令重播用户的终端会话活动:[root@linuxtechisession]#scriptreplay--timingsession.pkumar.19785.21-06-2019-04\:34\:05在评论部分分享您的反馈和意见