Tôi có thể tra cứu lịch sử cập nhật của mình ở đâu?


140

Có nơi nào tôi có thể xem những bản cập nhật tôi đã cài đặt không?

Câu trả lời:


132

Bạn có thể đọc các history.logtập tin trong /var/log/apt.

Ví dụ. less /var/log/apt/history.log.


45

Trong 10.10, Trung tâm phần mềm Ubuntu có một danh sách tất cả các bản cập nhật bạn đã tải xuống trong quá khứ.

nhập mô tả hình ảnh ở đây


4
+1 Câu trả lời này cũng hoạt động trên các phiên bản gần đây hơn.
James Bradbury

4
@JamesBradbury Tùy chọn này được lấy từ Ubuntu 16.04 vào ngày
feeela

25

/ var / log / apt chứa lịch sử cài đặt gói. Tuy nhiên, theo mặc định, nó được quản lý theo logrotateđó nén và loại bỏ các mục cũ.


Vậy đây có phải là nơi tốt nhất để tôi kiểm tra lịch sử trên Ubuntu Server không?
Brettski

21

Ngày 10.04 Nhấp vào (Hệ thống> Quản trị> Trình quản lý gói Synaptic> Tệp> Lịch sử)


11
Tất cả những gì tôi nhận được là một danh sách các gói tôi đã cài đặt qua Synaptic, nó không hiển thị tất cả các gói tôi đã cập nhật qua Update Manager.
Ê-sai

19

Thay thế cho câu trả lời của lgarzo, bạn có thể grepquan 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*

11

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.

Lịch sử trung tâm phần mềm


Tôi cho rằng đó là 10.10?
vrcmr

Chắc chắn là. Tôi không nghĩ rằng điều này đã có sẵn trong các bản phân phối trước đó ...
Nick Pascucci

3

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";
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.