উত্তর:
Lgarzo এর উত্তরের বিকল্প হিসাবে, grep
আপনি যা আগ্রহী তা করতে পারেন /var/log/dpkg.log
। উদাহরণস্বরূপ, আপনি গতকাল ইনস্টল করা বা আপগ্রেড করা সমস্ত কিছু দেখতে চাইলে আপনি চালাতে পারেন:
cat /var/log/dpkg.log | grep "^2012-03-25.*\ installed\ "
একটি বিষয় লক্ষণীয়: এটি ম্যানুয়ালি ইনস্টল করা প্যাকেজগুলিও তালিকাভুক্ত করবে ( sudo dpkg -i ...
), যা অ্যাপের ইতিহাসে প্রদর্শিত হবে না।
Zgrep ইনস্টল করা থাকলে আরও ভাল ব্যবহার করুন যাতে আপনি জিজেপড ফাইলগুলিতে লাইনও খুঁজে পেতে পারেন
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
subroutines এবং প্রোগ্রাম:
#!/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";
}