我希望每次在终端中运行某种类型的命令时都进行记录。例如,每次运行:
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
传递包装脚本收到的所有参数(并返回原始程序返回的返回代码)。
如果您非常小心地模仿原始命令的行为,没有人会注意到任何差异。