Answers:
不幸的是,尽管有添加dpkg的想法,但它并没有专门保存软件包的安装日期。但是,可以通过查看写入目录的文件的日期戳来找到安装日期/var/lib/dpkg/info
。
我已经配置了写入日志(/var/log/aptitude
)的能力。它产生这样的输出;
Aptitude 0.4.11.11: log report
Mon, Feb 9 2009 13:21:28 +0100
IMPORTANT: this log only lists intended actions; actions which fail due to
dpkg problems may not be completed.
Will install 6 packages, and remove 0 packages.
4096B of disk space will be used
===============================================================================
[UPGRADE] apt 0.7.20.1 -> 0.7.20.2
[UPGRADE] apt-utils 0.7.20.1 -> 0.7.20.2
[UPGRADE] base-passwd 3.5.19 -> 3.5.20
[UPGRADE] libgnutls26 2.4.2-5 -> 2.4.2-6
[UPGRADE] libpq5 8.3.5-1 -> 8.3.6-1
[UPGRADE] ucf 3.0015 -> 3.0016
===============================================================================
Log complete.
这显示了正确安装的确切日期和软件包。要配置它,请遵循aptitude参考。
Option:Aptitude::Log
Default:/var/log/aptitude
Description: If this is set to a nonempty string, aptitude will log the package
installations, removals, and upgrades that it performs. If the value of
Aptitude::Log begins with a pipe character (ie, ``|''), the remainder of its
value is used as the name of a command into which the log will be piped: for
instance, |mail -s 'Aptitude install run' root will cause the log to be emailed
to root. To log to multiple files or commands, you may set this option to a list
of log targets.
您可以在aptitude手册页中找到指向aptitude参考的链接。
有一种简单的方法可以查看所有软件包的安装日期。只需执行:
grep " install" /var/log/dpkg.log*
结果,您将获得所有安装的软件包的列表,其中包含确切的日期和时间。
感谢您提出的解决方案。
cd
如果您在cat
命令中使用完整路径,则该命令不是必需的...
cd
命令的目的是ls
在此目录中检查可用的dpkg.log文件。但是ls /var/log | grep 'dpkg.log'
,为了列出日志文件,将运行更好的解决方案。对不起,一团糟。
cat | cat
你能做些什么。但是,为什么不在一个命令中同时管理两个文件呢?(甚至更好:只要按照@MarcVanDaele所说的去做。)
我在网上找到了这个。它从dpkg日志文件中创建dpkg的历史记录。
看起来很简单。
function apt-history(){
case "$1" in
install)
cat /var/log/dpkg.log | grep 'install '
;;
upgrade|remove)
cat /var/log/dpkg.log | grep $1
;;
rollback)
cat /var/log/dpkg.log | grep upgrade | \
grep "$2" -A10000000 | \
grep "$3" -B10000000 | \
awk '{print $4"="$5}'
;;
*)
cat /var/log/dpkg.log
;;
esac
}
编辑
我在Ubuntu 8.10 Server上尝试了此脚本,并且效果很好。您能否提供一些信息,如何解决您的问题?
使用dpkg日志
locate dpkg.log | xargs cat {} | grep " install "
或者如果你没有 locate
find /var/log/ -name 'dpkg.log' | xargs cat {} | grep " install "
使用sort
以确保适当的基于时间的排序
locate dpkg.log | xargs cat {} | grep " install " | sort
使用tac
(反向cat
)*,头如以获得最新的4项
locate dpkg.log | xargs cat {} | grep " install " | sort | tac | head -n4
例如,对于最后一条命令,我得到:
2014-10-08 18:56:12 install xorg-server-source:all <none> 2:1.16.1-1
2014-10-08 18:49:34 install libelementary-data:all <none> 0.7.0.55225-1
2014-10-08 18:46:57 install e17:i386 <none> 0.17.6-1
2014-10-08 18:46:56 install libedje-bin:i386 <none> 1.8.6-2.1+b1
tac
+ head
代替tail
?
您还可以通过检查/var/log/apt/term.log和较旧的文件term.log.1.gz等来跟踪以前的操作。它具有时间戳和安装过程中消息的完整日志。
确实有一个“官方” pkginstall.sh
脚本可以做到这一点。请遵循官方文档中的说明。简要地说,从上面的链接下载脚本,确保它是可执行的,然后运行:
~/pkginstalls.sh
这将pkginstalls.txt
在您的主目录中创建文件,其中包含按日期排序的所有已安装软件包。
顺便说一句,这是脚本的内容:
#!/bin/bash
#pkginstalls.sh
#creates text file with a list of all packages installed by date
#first append all info from archived logs
i=2
mycount=$(ls -l /var/log/dpkg.log.*.gz | wc -l)
nlogs=$(( $mycount + 1 ))
while [ $i -le $nlogs ]
do
if [ -e /var/log/dpkg.log.$i.gz ]; then
zcat /var/log/dpkg.log.$i.gz | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))
done
#next append all info from unarchived logs
i=1
nulogs=$(ls -l /var/log/dpkg.log.* | wc -l)
nulogs=$(( $nulogs - $nlogs + 1 ))
while [ $i -le $nulogs ]
do
if [ -e /var/log/dpkg.log.$i ]; then
cat /var/log/dpkg.log.$i | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))
done
#next append current log
cat /var/log/dpkg.log | grep "\ install\ " >> $HOME/pkgtmp.txt
#sort text file by date
sort -n $HOME/pkgtmp.txt > $HOME/pkginstalls.txt
rm $HOME/pkgtmp.txt
exit 0
*.list
文件上的时间戳,因为其他文件上都标有打包日期。