Як бачити пакунки, встановлені на дату, використовуючи "aptitude"?


54

Хтось знає, чи існує простий спосіб знайти список встановлених пакетів, відсортованих за датою, під час використання aptitude(або apt-get)?

Я встановив купу пакетів, щоб спробувати щось нове, але це не вийшло. Я хотів би видалити всі ці пакунки, щоб отримати трохи місця на диску.

Я спробував просто переглядати список завантажених файлів .deb, але це здається досить зворотним способом зробити це (хоча це і спрацювало).

Відповіді:


43

На жаль, dpkg (здатність обробника пакунків працює на вершині) спеціально не зберігає дату встановлення пакунків, хоча є думка про її додавання. Однак дату встановлення можна дізнатися, поглянувши на маркування дати файлів, записаних у каталог /var/lib/dpkg/info.


4
Якщо ви використовуєте такий підхід, не забудьте перевірити лише часові позначки на *.listфайлах, оскільки інші файли мають печатку з датою упаковки.
Дейв

20

Я налаштував здатність записувати в журнал ( /var/log/aptitude). Це дає такий вихід;

Aptitude 0.4.11.11: log report
Mon, Feb  9 2009 13:21:28 +0100

IMPORTANT: this log only lists intended actions; actions which fail due to
dpkg problems may not be completed.

Will install 6 packages, and remove 0 packages.
4096B of disk space will be used
===============================================================================
[UPGRADE] apt 0.7.20.1 -> 0.7.20.2
[UPGRADE] apt-utils 0.7.20.1 -> 0.7.20.2
[UPGRADE] base-passwd 3.5.19 -> 3.5.20
[UPGRADE] libgnutls26 2.4.2-5 -> 2.4.2-6
[UPGRADE] libpq5 8.3.5-1 -> 8.3.6-1
[UPGRADE] ucf 3.0015 -> 3.0016
===============================================================================

Log complete.

Це показує точну дату та пакети встановлених можливостей. Щоб налаштувати це, дотримуйтесь посилання на здатність;

Option:Aptitude::Log

Default:/var/log/aptitude

Description: If this is set to a nonempty string, aptitude will log the package
installations, removals, and upgrades that it performs. If the value of
Aptitude::Log begins with a pipe character (ie, ``|''), the remainder of its
value is used as the name of a command into which the log will be piped: for
instance, |mail -s 'Aptitude install run' root will cause the log to be emailed
to root. To log to multiple files or commands, you may set this option to a list
of log targets.

Ви знайдете посилання на посилання на здатність на сторінці людини.


1
Будь ласка, опублікуйте посилання та як його реалізувати. Просто посилання на текст вручну не дуже допомагає.
not2qubit

17

Існує простий спосіб побачити дату встановлення всіх пакетів. Просто виконайте:

grep " install" /var/log/dpkg.log*

В результаті ви отримаєте список усіх встановлених пакетів з точною датою та часом.

Дякую за коментарі, які привели мене до рішення.


2
cdКоманда не потрібна , якщо ви використовуєте повний шлях в catкоманді ...
papukaija

1
Метою cdкоманди було lsвсередині цього каталогу перевірити наявні файли dpkg.log. Але краще рішення буде працювати ls /var/log | grep 'dpkg.log'для того, щоб перелічити файли журналів. Вибач за безлад.
jmarceli

2
чи просто "grep install /var/log/dpkg.log*"?
Марк Ван Даель

1
Так, я не знав, cat | catщо ти можеш зробити. Але чому б не запустити обидва файли в одній команді? (Або ще краще: просто зробіть те, що говорить @MarcVanDaele.)
mwfearnley

13

Я знайшов цю в Інтернеті. Це створює історію dpkg з файлу журналу dpkg.

Це виглядає дуже просто.

function apt-history(){
      case "$1" in
        install)
              cat /var/log/dpkg.log | grep 'install '
              ;;
        upgrade|remove)
              cat /var/log/dpkg.log | grep $1
              ;;
        rollback)
              cat /var/log/dpkg.log | grep upgrade | \
                  grep "$2" -A10000000 | \
                  grep "$3" -B10000000 | \
                  awk '{print $4"="$5}'
              ;;
        *)
              cat /var/log/dpkg.log
              ;;
      esac
}

Джерело

EDIT

Я спробував цей скрипт на сервері Ubuntu 8.10, і він працює дуже добре. Не могли б ви надати якусь інформацію, як ви вирішили свою проблему?


5
  • Використовуйте журнали dpkg

    locate dpkg.log | xargs cat {} | grep " install "
    
  • АБО якщо у вас немає locate

    find /var/log/ -name 'dpkg.log' | xargs cat {} | grep " install "
    
  • Використовуйте sortдля забезпечення належного замовлення за часом

    locate dpkg.log | xargs cat {} | grep " install " | sort
    
  • Використовуйте tac(назад cat) *, голову, наприклад, щоб отримати останні 4 записи

    locate dpkg.log | xargs cat {} | grep " install " | sort | tac | head -n4
    

Наприклад, для останньої команди я отримую:

2014-10-08 18:56:12 install xorg-server-source:all <none> 2:1.16.1-1
2014-10-08 18:49:34 install libelementary-data:all <none> 0.7.0.55225-1
2014-10-08 18:46:57 install e17:i386 <none> 0.17.6-1
2014-10-08 18:46:56 install libedje-bin:i386 <none> 1.8.6-2.1+b1

1
Чому б ви використовували tac+ headзамість tail?
Zanna

1
Минув час, я забув, чому - але можливо, для цього є цілком поважна причина .. або, можливо, у мене був момент блондинки: D
a20

4

Ви також можете відстежувати свої попередні дії, перевіряючи /var/log/apt/term.log та старіші файли term.log.1.gz тощо). Він має часові позначки та повний журнал повідомлень під час встановлення.


2

[ВІДПОВІДЬ ВІДПОВІДНЕ ЗАПИТАННЯ], так, існує ЛЕГИЙ спосіб пошуку пакетів, встановлених на певну дату, навіть якщо це було зроблено всередині терміналу за допомогою apt-get.

Якщо ви встановите диспетчер пакунків Synaptic, який вільно встановлюється з програмного забезпечення Ubuntu Software Center, вам потрібно лише відкрити його меню FILE і вибрати параметр «Історія». Там ви знайдете облік усіх доданих та вилучених пакетів додатків, впорядкованих за датою, незалежно від способів їх встановлення чи видалення.


2

Дійсно є "офіційний" pkginstall.shсценарій, який може це зробити. Дотримуйтесь інструкцій в офіційній документації . Коротко скачайте скрипт із вищевказаного посилання, переконайтесь, що він виконується, а потім запустіть із:

~/pkginstalls.sh

Це створить pkginstalls.txtфайл у вашому домашньому каталозі, що містить усі встановлені пакети, відсортовані за датою.

До речі, це вміст сценарію:

#!/bin/bash
#pkginstalls.sh
#creates text file with a list of all packages installed by date

#first append all info from archived logs

i=2
mycount=$(ls -l /var/log/dpkg.log.*.gz | wc -l)
nlogs=$(( $mycount + 1 ))

while [ $i -le $nlogs ]
do
if [ -e /var/log/dpkg.log.$i.gz ]; then
zcat /var/log/dpkg.log.$i.gz | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))

done

#next append all info from unarchived logs

i=1
nulogs=$(ls -l /var/log/dpkg.log.* | wc -l)
nulogs=$(( $nulogs - $nlogs + 1 ))
while [ $i -le $nulogs ]
do
if [ -e /var/log/dpkg.log.$i ]; then
cat /var/log/dpkg.log.$i | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))

done

#next append current log

cat /var/log/dpkg.log | grep "\ install\ " >> $HOME/pkgtmp.txt

#sort text file by date

sort -n $HOME/pkgtmp.txt > $HOME/pkginstalls.txt

rm $HOME/pkgtmp.txt

exit 0
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.