在哪里可以查看我的更新历史记录?


140

在哪里可以查看已安装的更新?

Answers:


132

您可以在中读取history.log文件/var/log/apt

例如。less /var/log/apt/history.log



25

/ var / log / apt包含软件包安装的历史记录。但是,默认情况下,通过logrotate压缩和老化旧条目来管理它。


那么这是我查看Ubuntu Server历史记录的最佳场所吗?
Brettski

21

在10.04上,单击(系统>管理> Synaptic软件包管理器>文件>历史记录)


11
我得到的只是通过Synaptic安装的软件包的列表,它没有显示我通过Update Manager更新的所有软件包。
以赛亚书

19

作为lgarzo答案的替代方法,您可以从中找到grep您感兴趣的东西/var/log/dpkg.log。例如,如果您想查看昨天安装或升级的所有内容,则可以运行:

cat /var/log/dpkg.log | grep "^2012-03-25.*\ installed\ "

需要注意的一件事:这还将列出手动安装的软件包(sudo dpkg -i ...),该软件包不会显示在apt的历史记录中。

最好使用zgrep(如果已安装),以便您也可以在gzip压缩文件中找到行

zgrep "^2012-03-25.*\ installed\ " /var/log/dpkg.log*


3

对我们“何时最后一次修补此问题?”这个问题提供一个稍微简单和准确的答案对我们很有用。所以我把这放在一起。我在12.04、14.04和16.04上进行了测试。它为该问题返回合理准确的答案。注意:“合理准确”可能不是“完全准确”。注意:仅“针对该问题”。

样本输出:

xenial% 9: ./linuxpatchdate 
2016-07-19 54
2017-02-24 363
2017-03-08 7
2017-03-09 2

子程序和程序:

#!/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";
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.