Is there a place where I can look what updates I've installed?
7 Answers
You can read the history.log file in /var/log/apt.
Eg. less /var/log/apt/history.log.
- 19,532
- 6
- 39
- 35
-
14Worth noting that there may be older history files in that folder, not just `/var/log/apt/history.log`. Maybe something like `/var/log/apt/history.log.1.gz` – Max Bileschi Nov 22 '19 at 16:17
-
3Still working even on Bionic. Just in case someone's afraid because of the response's age. – Alfabravo May 20 '20 at 15:24
-
6To read and filter rotated logs: `zcat /var/log/apt/history.log.* | perl -00 -ne 'print if /\ninstall/i'` ([with `-00`](https://learnbyexample.github.io/learn_perl_oneliners/record-separators.html) each paragraphs is a record) – Pablo Bianchi Jun 09 '21 at 17:04
-
Terminal log `/var/log/opt/term.log` could also be useful if you need to figure out what happened during the installation. – Danijel Mar 07 '22 at 08:26
/var/log/apt contains a history of package installations. However, by default, it is managed by logrotate which compresses and ages out old entries.
- 4,668
- 1
- 24
- 26
-
1
-
1You can search and filter [with `zcat`/`zgrep`/`zless`](https://askubuntu.com/questions/14328/where-can-i-look-up-my-update-history#comment2297404_116067) – Pablo Bianchi Jun 09 '21 at 17:09
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*
On 10.04 Click (System > Administration > Synaptic Package Manager > File > History)
- 6,267
- 10
- 37
- 60
-
12All I get is a list of packages that I installed via Synaptic, it doesn't show all the packages I updated via Update Manager. – Isaiah Nov 21 '10 at 19:39
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.

- 1,880
- 15
- 15
-
-
Sure is. I don't think this was available in previous distributions... – Nick Pascucci Nov 21 '10 at 19:53
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";
}
- 14,308
- 4
- 74
- 117
- 31
- 2
