जवाबों:
/ var / log / apt में पैकेज इंस्टॉलेशन का इतिहास होता है। हालाँकि, डिफ़ॉल्ट रूप से, यह प्रबंधित किया जाता है, logrotate
जो पुरानी प्रविष्टियों को संपीड़ित करता है और आयु करता है।
लार्जो के जवाब के विकल्प के रूप में, आप grep
जिस चीज में रुचि रखते हैं , वह कर सकते हैं /var/log/dpkg.log
। उदाहरण के लिए, यदि आप वह सब कुछ देखना चाहते हैं जिसे आपने कल स्थापित या अपग्रेड किया था, तो आप चला सकते हैं:
cat /var/log/dpkg.log | grep "^2012-03-25.*\ installed\ "
एक बात ध्यान दें: यह मैन्युअल रूप से स्थापित संकुल ( sudo dpkg -i ...
) को सूचीबद्ध करेगा, जो कि उपयुक्त इतिहास में नहीं दिखाई देगा।
यदि यह स्थापित है तो भी बेहतर उपयोग zgrep, तो आप gzipped फ़ाइलों में भी लाइनें पा सकते हैं
zgrep "^2012-03-25.*\ installed\ " /var/log/dpkg.log*
अब सॉफ्टवेयर सेंटर के माध्यम से भी ऐसा करना संभव है! इतिहास पर जाएं और आप अपने सभी अपडेट और इंस्टॉलेशन प्रदर्शित कर सकते हैं।
हमारे लिए इस सवाल का थोड़ा और आसान और सटीक उत्तर देना उपयोगी हो गया "पिछली बार जब हमने इस चीज़ को पैच किया था"। इसलिए मैंने इसे एक साथ रखा। मैंने 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";
}