Выводим список установленных пакетов в Linux по дате

Sep 20, 2018 07:02 · 536 words · 3 minute read tips ubuntu debian centos

Порой необходимо узнать когда тот или иной пакет был установлен в операционной системе (например, в целях аудита). В данной статье рассмотрим как вывести список установленных пакетов в Linux, отсортированный по дате установки - давайте разберемся!

Как всем известно, в разных дистрибутивах Linux используются различные пакетные менеджеры, поэтому, в зависимости от операционной системы, команды будут отличаться.

Например, если вы используете дистрибутив Debian (и производные - Ubuntu, Kubuntu, Xubuntu и т.д.), то для вывода списка установленных пакетов достаточно запустить команду:

grep -i "installed" /var/log/dpkg.log

Как можно догадаться, данная команда выведет список пакетов, если их установка зафиксирована в файле /var/log/dpkg.log. Так как в Linux используется ротация логов с целью экономии места на диске, старые установочные логи хранятся в архивах. Если нужно узнать список вообще всех установленных пакетов в хронологическом порядке, то стоит воспользоваться командой:

zcat /var/log/dpkg.log.* | grep -i "installed"

Результат выполнения команды будет примерно следующим:

...

2018-09-12 09:41:34 status installed libcryptsetup12:amd64 2:2.0.2-1ubuntu1.1
2018-09-12 09:41:34 status installed libc-bin:amd64 2.27-3ubuntu1
2018-09-12 09:42:02 status installed man-db:amd64 2.8.3-2
2018-09-12 09:42:02 status installed initramfs-tools-bin:amd64 0.130ubuntu3.3
2018-09-12 09:42:08 status installed google-cloud-sdk:all 216.0.0-0
2018-09-12 09:42:08 status installed initramfs-tools-core:all 0.130ubuntu3.3
2018-09-12 09:42:08 status installed initramfs-tools:all 0.130ubuntu3.3
2018-09-12 09:42:21 status installed initramfs-tools:all 0.130ubuntu3.3

Команда zcat читает содержимое заархивированных файлов, после чего вывод перенаправляется на обработку команде grep. Если нужно найти время установки конкретного пакета, название (или хотя бы часть) которого вы знаете, можно сделать так:

zcat /var/log/dpkg.log.* | grep -i "installed" | grep "google-cloud"

2018-09-12 09:42:08 status installed google-cloud-sdk:all 216.0.0-0

В качестве альтернативы еще можно использовать команду zgrep, например:

zgrep "installed" /var/log/dpkg.log*

Вывод команды будет несколько отличаться:

...

/var/log/dpkg.log.9.gz:2018-01-15 08:35:54 status installed man-db:amd64 2.7.6.1-2
/var/log/dpkg.log.9.gz:2018-01-15 08:35:54 status installed libpython2.7-stdlib:amd64 2.7.14-2ubuntu2
/var/log/dpkg.log.9.gz:2018-01-15 08:35:55 status installed python2.7:amd64 2.7.14-2ubuntu2
/var/log/dpkg.log.9.gz:2018-01-15 08:35:55 status installed libpython-stdlib:amd64 2.7.14-2ubuntu1
/var/log/dpkg.log.9.gz:2018-01-15 08:36:00 status installed google-cloud-sdk:all 184.0.0-0
/var/log/dpkg.log.9.gz:2018-01-15 08:36:00 status installed python:amd64 2.7.14-2ubuntu1
/var/log/dpkg.log.9.gz:2018-01-15 08:36:00 status installed python-crcmod:amd64 1.7-2build4

Как видим, в данном примере в начале строки также присутствует имя файла, в котором нашлась соответствующая запись.

Для RPM-based дистрибутивов (RedHat, CentOS, Scientific Linux, Fedora, SUSE) вывести список установленных пакетов по дате можно с помощью следующей команды:

rpm -qa --last

Команда покажет примерно следующий результат:

...

libxml2-2.9.1-6.el7_2.3.x86_64 Sat 09 Dec 2017 10:15:00 AM EAT
findutils-4.5.11-5.el7.x86_64 Sat 09 Dec 2017 10:15:00 AM EAT
libgpg-error-1.12-3.el7.x86_64 Sat 09 Dec 2017 10:14:59 AM EAT
libffi-3.0.13-18.el7.x86_64 Sat 09 Dec 2017 10:14:59 AM EAT
libcap-ng-0.7.5-4.el7.x86_64 Sat 09 Dec 2017 10:14:59 AM EAT
libattr-2.4.46-12.el7.x86_64 Sat 09 Dec 2017 10:14:59 AM EAT
libacl-2.2.51-12.el7.x86_64 Sat 09 Dec 2017 10:14:59 AM EAT
dbus-libs-1.6.12-17.el7.x86_64 Sat 09 Dec 2017 10:14:59 AM EAT
sed-4.2.2-5.el7.x86_64 Sat 09 Dec 2017 10:14:58 AM EAT

Для поиска даты установки конкретного пакета, достаточно добавить его название в качестве параметра к команде выше, например:

rpm -qa --last postfix3

postfix3-3.2.0-1.gf.el7.x86_64 Thu 25 May 2017 01:04:35 AM EAT

В дистрибутивах Arch Linux (в том числе Antergos, Manjaro, Apricity, Ninja OS) для решения нашей задачи можно воспользоваться утилитой expac. Для получения информации в понятном формате, вызывать данную утилиту необходимо с использованием параметра:

expac --timefmt='%F %T' '%l %n'

Можно дополнить данный вызов сортировкой и дополнительными фильтрами - все зависит только от ваших требований. Например, так можно вывести 5 последних установленных пакетов в системе:

expac --timefmt='%F %T' '%l %n' | sort -n | tail -n 5
2018-01-15 14:41:15 webkitgtk
2018-01-16 09:18:26 babl
2018-01-16 09:18:26 gegl02
2018-01-16 09:18:26 lcms
2018-01-16 09:18:26 libspiro
tweet Share