Выводим список установленных пакетов в Linux по дате
Sep 20, 2018 07:02 · 536 words · 3 minute read
Порой необходимо узнать когда тот или иной пакет был установлен в операционной системе (например, в целях аудита). В данной статье рассмотрим как вывести список установленных пакетов в 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