Как увидеть пакеты, установленные на определенную дату, используя «aptitude»?

54

Кто-нибудь знает, есть ли простой способ найти список установленных пакетов, отсортированный по дате, при использовании aptitude(или apt-get)?

Я установил несколько пакетов, чтобы попробовать что-то новое, но это не сработало. Я хотел бы удалить все эти пакеты, чтобы освободить место на диске.

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

Mikeage
источник

Ответы:

43

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


источник
4
Если вы используете этот подход, обязательно проверяйте только временные метки в *.listфайлах, так как другие файлы помечены датой пакета.
Дэйв
20

Я настроил aptitude для записи в журнал ( /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.

Это показывает точную дату и пакеты, которые установлены aptitude. Чтобы настроить это, следуйте указаниям aptitude;

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.

Вы найдете ссылку на ссылку aptitude на справочной странице aptitude.

Иеремия
источник
1
Выложите пожалуйста ссылку и как ее реализовать. Просто ссылка на некоторый текст руководства не очень полезна.
not2qubit
17

Существует простой способ увидеть дату установки всех пакетов. Просто выполните:

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

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

Спасибо за комментарии, которые привели меня к этому решению.

jmarceli
источник
2
Команда cdне нужна, если вы используете полный путь в catкоманде ...
papukaija
1
Цель cdкоманды состояла в том, чтобы lsвнутри этого каталога проверить доступные файлы dpkg.log. Но лучшее решение будет работать ls /var/log | grep 'dpkg.log', чтобы перечислить файлы журнала. Простите за беспорядок.
Джмарсели
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
}

Источник

РЕДАКТИРОВАТЬ

Я попробовал этот скрипт на сервере Ubuntu 8.10, и он работает очень хорошо. Не могли бы вы предоставить некоторую информацию, как вы решили свою проблему?

guerda
источник
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
a20
источник
1
Почему вы используете tac+ headвместо tail?
Занна
1
Прошло какое-то время, я забыл почему - но, возможно, есть вполне веская причина для этого ... или, может быть, у меня был момент блондинки: D
20
4

Вы также можете отследить свои предыдущие действия, проверив /var/log/apt/term.log и более старые файлы term.log.1.gz и т. Д.). Он имеет метки времени и полный журнал сообщений во время установки.


источник
2

[ОТВЕТ НА ФАКТИЧЕСКИЙ ВОПРОС], Да, есть ЛЕГКИЙ способ поиска пакетов, установленных на определенную дату, даже если это было сделано внутри терминала с помощью apt-get.

Если вы устанавливаете Synaptic Package Manager, который можно свободно установить из Ubuntu Software Center, вам нужно только открыть его меню FILE и выбрать опцию «History». Там вы найдете учет всех добавленных и удаленных пакетов приложений, упорядоченный по дате, независимо от того, как они были установлены или удалены.

gyropyge
источник
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
Рон
источник