Where can I look up my update history?
Is there a place where I can look what updates I’ve installed?
On 10.04 Click (System > Administration > Synaptic Package Manager > File > History)
/var/log/apt contains a history of package installations. However, by default, it is managed by logrotate
which compresses and ages out old entries.
It’s now possible to do this through the software center as well! Go to History and you can display all of your updates and installations.
You can read the history.log
file in /var/log/apt
.
Eg. less /var/log/apt/history.log
.
As an alternative to lgarzo’s answer, you can grep
what you are interested in from /var/log/dpkg.log
. E.g., if you want to see everything you installed or upgraded yesterday, you could run:
cat /var/log/dpkg.log | grep "^2012-03-25.* installed "
One thing to note: this will also list manually installed packages (sudo dpkg -i ...
), which won’t show up in apt’s history.
Even better use zgrep if it’s installed so you can find lines in gzipped files as well
zgrep "^2012-03-25.* installed " /var/log/dpkg.log*
It became useful for us to have a slightly more easy and accurate answer to the question "when was the last time we patched this thing?". So I put this together. I tested it on 12.04 and 14.04 and 16.04. It returns reasonably accurate answers for that question.
Note: "reasonably accurate" probably isn’t "completely accurate".
Note: "for that question" only.
sample output:
xenial% 9: ./linuxpatchdate
2016-07-19 54
2017-02-24 363
2017-03-08 7
2017-03-09 2
subroutines and program:
#!/usr/bin/perl
#------------------ subroutines --------------------
sub parseRecord {
my $sdate = "";
my $useful = 0;
my $packages = 0;
my @ptmp;
while (my $recordLine = shift() ) {
if ($recordLine =~ m/^Start-Date: ([d-]*).*/) {
$sdate = $1;
}
elsif ($recordLine =~ m/^Commandline:.*upgrade/) {
$useful = 1;
}
elsif ($recordLine =~ m/^Install: (.*)/) {
$recordLine =~ s/([^)]*)//g;
@ptmp = split(/,/,$recordLine);
$packages = $packages + $#ptmp + 1;
}
elsif ($recordLine =~ m/^Upgrade: (.*)/) {
$recordLine =~ s/([^)]*)//g;
@ptmp = split(/,/,$recordLine);
$packages = $packages + $#ptmp + 1;
}
}
if ($useful) {
return ($sdate,$packages);
}
else {
return ("0",0);
}
}
#------------------ main program --------------------
@lines = split(/n/,`/bin/zcat -f /var/log/apt/history.log /var/log/apt/history*gz`);
my %patchHash;
my $line;
my @inputLines;
my $pushDate = "";
my $pushNum = "";
foreach $line (@lines) {
# all records separated by blank lines
if ($line !~ /./) {
# no-op
}
elsif ($line =~ m/^Start-Date: ([d-]*).*/) {
@inputLines = ();
push (@inputLines, $line);
}
elsif ($line =~ m/^End-Date: ([d-]*).*/) {
($pushDate, $pushNum) = parseRecord(@inputLines);
if ($pushNum != 0) {
$patchHash{$pushDate} += $pushNum;
}
}
else {
push (@inputLines, $line);
}
}
foreach $pushDate (sort(keys(%patchHash))) {
print "$pushDate $patchHash{$pushDate}n";
}