如何在终端会话中记录所有输入和输出?


46

如何保存通过终端完成的所有工作的日志?例如,我想要记录通过终端在数据库上完成的所有工作。


这也内置在sudo中。
威廉·伊拉斯

我添加了您可以查看的答案
Mansur Ali

Answers:


66

准备开始记录日志文件时,键入:

script screen.log

现在,在停止脚本之前,终端中的所有输入和输出将存储在screen.log中。完成后,只需键入:

exit

您的screen.log文件将存储在本地目录中。如果要重定向它,请使用绝对路径名,例如~/screen.log。这将完全满足您的需求。

来源: Ubuntu指南-如何记录终端命令


您好,感谢您的答复。但是,如果我按照以下顺序从外壳程序登录mysql数据库,将可以正常工作:-1)脚本screen.log 2)mysql -u <用户> -p <数据库> 3)数据库的一些工作4)退出;我看到已创建文件screen.log,但其中不包含数据库的日志。我将尽快共享文件。感谢Ankt
Ankit

2
它应该与控制台中运行的所有内容一起工作,从“标准输入”(通常是键盘)读取并写入标准输出(通常是终端窗口)。因此,它应包括mysql命令行客户端。手册页(man script)甚至提到vi(编辑)...
Izzy 2012年

10

您可能需要尝试Asciinema。除了进行录制外,您还可以共享录制内容并将播放器嵌入到您的博客,文章或会议演讲中。


6

我有一个更好的方法来使用syslog记录每个shell命令,这在Linux发行版上可能有所不同,但是方法将保持不变

您需要执行以下步骤:

步骤1(创建Syslog服务)

# vim /etc/rsyslog.d/bash.conf

local6.*    /var/log/commands.log

步骤#2(打开bashrc并输入以下命令)

# vim /root/.bashrc

# Enable CLI Logging by Mansur 08-12-2016 
whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Ste#3(重新启动Syslog服务)

# /etc/init.d/rsyslog

这是一个日志示例:

12月7日22:13:00 Validationdb2 mahasan:root @ export [13291]:tail -f /var/log/mysql/mysql.log [0]
12月7日22:13:09validationdb2 mahasan:root @ export [13291]:ls -lh [0]
12月7日22:13:27validationdb2 mahasan:root @ export [13291]:触摸测试命令[0]

厚脸皮的战术!!!
汤姆H

嗨,曼苏尔,您能否解释一下这些命令的用法,这是我所不容易理解的。
Jasser

在步骤1中,我为命令记录命名,该服务将由进程用于向其发送日志,“ local6”将成为日志记录服务的终点。在步骤2中,我设置了我实际上想要的东西“ PROMPT_COMMAND ='RETRN_VAL = $?” 此部分将记录用户的输入和“ logger -p local6.debug”,这会将日志文件发送到服务,该服务通过help syslog进程记录日志数据
Mansur Ali
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.