每次运行命令时都会记录

每次运行命令时都会记录

我希望每次在终端中运行某种类型的命令时都进行记录。例如,每次运行:

sudo apt-get install [something]

我想添加[某物]到我的主目录中的日志文件,如下所示:

[timestamp] [something]
2012-10-02 mysql-server
2012-10-03 ruby1.9.1
2012-10-06 gedit-plugins
2012-10-07 gnome-panel synaptic

使这一过程自动发生的最简单的方法是什么?

答案1

请注意,系统上的任何使用sudo都将已登录/var/log/auth.log。该文件还包含其他与授权相关的信息(请参阅此处有更多关于日志文件的详细信息)。

Sudo 不仅会记录时间戳,还会记录调用 sudo 的用户、工作目录等。如果您只想提取使用情况apt-get install并仅记录软件包名称,可以这样做:

zcat /var/log/auth.log* | awk  '/apt-get install/ {print $1 " " $2 " " $16}'

我不知道日期的格式对你是否重要,我没有考虑,因为在上面的命令行中包含它会使它变得更长,更难读。但如果你想要一个更长的 bash 脚本来转换格式,我date -I -d "Apr 27"会帮你转换。

(顺便说一下,adm为了读取,你的用户必须是该组的成员/var/log/auth.log。如果你看到Permission denied,那么你可能需要在 grep 命令前面加上sudo,或者将自己添加到组中,sudo addgroup USERNAME adm其中 USERNAME 是你的用户名。)

答案2

最直接的方法是替换apt-get一个包装脚本,该脚本会将数据记录到日志文件中,然后调用apt-get传递包装脚本收到的所有参数(并返回原​​始程序返回的返回代码)。

如果您非常小心地模仿原始命令的行为,没有人会注意到任何差异。

相关内容