apt-get иногда выдаёт сообщение, что некоторые пакеты были установлены автоматически и их можно удалить командой apt-get autoremove. Значит, где-то хранится признак, по какой причине был установлен тот или иной пакет.
Как получить список пакетов, установленных по запросу пользователя, без автоматически добавленных по зависимостям, и, если возможно, с датой установки?
Ответ
с помощью «тёплого лампового» aptitude
$ aptitude search -F '%p' '!~M ~i'
с помощью apt-mark
$ apt-mark showmanual
дату/время запуска (а также параметры и ещё много другой информции) программы apt-get можно найти в файлах /var/log/apt/*, программы aptitude — в файлах /var/log/aptitude*, программы dpkg (её ведь можно запустить и вручную для установки пакета из скачанного «вручную» файла) — в файлах /var/log/dpkg.log*. что плохо — все эти файлы ротируются и (насколько помню, но стоит это уточнить в настройках logrotate) со временем удаляются.
доп. информация:
поисковые шаблоны aptitude
настройка того, как отображаются пакеты в aptitude
дополнение по поводу даты установки. вообще-то она не фиксируется в «базе данных» dpkg, но более или менее релевантный результат можно получить, например, по дате последней модификации файлов /var/lib/dpkg/info/имя-пакета* (например, имя-пакета[:архитектура].list, содержащий список файлов пакета).
при распаковке архивов, содержащихся в файле с пакетом, программа dpkg указанные файлы (как минимум) перезаписывает (более точный алгоритм можно узнать в документации dpkg, или непосредственно в её исходных кодах).
как-нибудь так:
#!/bin/bash
export arch=$(dpkg --print-architecture)
dostat() {
stat --printf="$1\t%y
" $2
}
apt-mark showmanual | while read p; do
if [ -f /var/lib/dpkg/info/$p.list ]; then
dostat $p /var/lib/dpkg/info/$p.list
elif [ -f /var/lib/dpkg/info/$p:$arch.list ]; then
dostat $p /var/lib/dpkg/info/$p:$arch.list
else
echo $p
fi
done
пример вывода:
2vcard 2010-03-25 11:56:42.000000000 +0300
abcde 2013-07-20 20:50:31.000000000 +0400
abiword 2013-07-20 22:48:50.000000000 +0400
abook 2013-07-20 22:48:51.000000000 +0400
acl 2013-07-20 22:46:20.000000000 +0400
acpi 2013-07-20 20:50:34.000000000 +0400
acpid 2013-07-20 20:50:34.000000000 +0400
adduser 2013-07-20 20:48:04.000000000 +0400
alien 2013-07-20 20:50:38.000000000 +0400
alsa-base 2013-07-20 22:45:48.000000000 +0400
Комментариев нет:
Отправить комментарий