Câu trả lời:
Thay thế cho câu trả lời của lgarzo, bạn có thể grep
quan tâm đến điều gì /var/log/dpkg.log
. Ví dụ: nếu bạn muốn xem mọi thứ bạn đã cài đặt hoặc nâng cấp ngày hôm qua, bạn có thể chạy:
cat /var/log/dpkg.log | grep "^2012-03-25.*\ installed\ "
Một điều cần lưu ý: điều này cũng sẽ liệt kê các gói được cài đặt thủ công ( sudo dpkg -i ...
), sẽ không hiển thị trong lịch sử của apt.
Thậm chí sử dụng zgrep tốt hơn nếu nó được cài đặt để bạn cũng có thể tìm thấy các dòng trong các tệp được nén.
zgrep "^2012-03-25.*\ installed\ " /var/log/dpkg.log*
Bây giờ cũng có thể làm điều này thông qua trung tâm phần mềm! Chuyển đến Lịch sử và bạn có thể hiển thị tất cả các bản cập nhật và cài đặt của mình.
Nó trở nên hữu ích cho chúng tôi để có một câu trả lời dễ dàng và chính xác hơn một chút cho câu hỏi "lần cuối cùng chúng tôi vá thứ này là khi nào?". Vì vậy, tôi đặt điều này cùng nhau. Tôi đã thử nghiệm nó vào ngày 12.04 và 14.04 và 16.04. Nó trả về câu trả lời hợp lý chính xác cho câu hỏi đó. Lưu ý: "chính xác hợp lý" có lẽ không "hoàn toàn chính xác". Lưu ý: "chỉ cho câu hỏi đó".
đầu ra mẫu:
xenial% 9: ./linuxpatchdate
2016-07-19 54
2017-02-24 363
2017-03-08 7
2017-03-09 2
chương trình con và chương trình:
#!/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";
}