Страницы

Поиск по вопросам

четверг, 30 мая 2019 г.

Получить список пакетов, установленных пользователем

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

Комментариев нет:

Отправить комментарий