如何记录所有 shell 命令

如何记录所有 shell 命令

我正在运行 Ubuntu Server 12.04,并尝试记录所有 Shell 命令。我rsyslog默认尝试这样做。我在f 和中添加了“ *.* /var/log/everything.log” ,但我只得到了一些条目(登录、注销、服务停止/启动),我想拥有一切。rsyslog.con50-default.confls, cd [path], [Wrong command]

我是否必须修改 rsyslog 中的某些内容或将任何其他应用程序设置为详细。

谢谢 SP

答案1

作为使用 的替代方法bash_history,捕获通过你自己并将其保存到文件您可以使用trap脚本或函数中的命令之类的东西并将该代码放入.bashrc

幸运的是, 确切地您想要的脚本由理查德汉森不久以前在这个答案中,他的脚本会复制输入到 bash 中的每个命令,并将它们(带有时间戳)发送到名为.command_logdefault 的文件。将他的脚本放入.bashrc并启动终端后,Richard 的脚本会在.command_log命令执行后立即写入,而此bash_history功能仅在终端关闭后才写入文件。

Richard 的脚本将会像这样记录你的命令.command_log(尽管你使用的命令与我使用的命令不同):

2012-10-02T18:02:11+0100 /dev/pts/2 gksudo truecrypt
2012-10-02T21:52:03+0100 /dev/pts/2 xrandr -s 1280x1024
2012-10-03T00:16:52+0100 /dev/pts/2 mount
2012-10-03T00:17:12+0100 /dev/pts/2 udisks --unmount /dev/sdb1
2012-10-03T00:17:46+0100 /dev/pts/2 udisks --detach /dev/sdb

我已经使用了一段时间,发现 Richard 的脚本非常有用;你甚至可以grep搜索.command_log你想要的任何内容:

grep -i udisks .command_log 

因此,我认为如果您需要记录输入到 bash 中的每件事,这可能就是您想要的;我发现它非常有用。

答案2

取决于你想做什么。如果你想监控所有用户运行的内容,那么这很难实现。有一套管理程序叫做博斯可用于监视所有正在运行的进程。

但是,如果你只想存储所有命令输入,那么是的,这是由 bash 为您完成的。Bash 将命令历史记录存储在 中~/.bash_history。但是,默认情况下,只有当 shell 退出时才会写入命令历史记录。阅读网页,如果您想要自定义它,以便保存大部分历史记录。

答案3

如果您想要记录整个会话(即输入的命令和这些命令的结果),请使用:

script

如果没有参数,它会将结果保存到当前目录中名为“typescript”的文件中。

script bogus.txt将保存为“bogus.txt”

请参阅手册页以获取完整的命令列表 man script

相关内容