Выводим список установленных пакетов в 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) вывести список установленных пакетов по дате можно с помощью следующей команды:
Команда покажет примерно следующий результат:
. 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 . Для получения информации в понятном формате, вызывать данную утилиту необходимо с использованием параметра:
Можно дополнить данный вызов сортировкой и дополнительными фильтрами — все зависит только от ваших требований. Например, так можно вывести 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
Read more
© Copyright 2023 Yevhen Lebid
Можно ли получить список последних установленных пакетов?
Можно ли получить список пакетов, которые были недавно установлены через apt-get?
9 ответов
Команда для отображения недавно установленных пакетов, которые были установлены любым способом ( apt-get Центр программного обеспечения и др.):
grep " install " /var/log/dpkg.log
Пример вывода:
2010-12-08 15:48:14 install python-testtools 0.9.2-1 2010-12-08 15:48:16 install quickly-widgets 10.09 2010-12-08 22:21:31 install libobasis3.3-sdk 3.3.0-17 2010-12-09 12:00:24 install mc 3:4.7.0.6-1 2010-12-09 23:32:06 install oggconvert 0.3.3-1ubuntu1 2010-12-09 23:34:50 install mpg123 1.12.1-3ubuntu1 2010-12-09 23:34:52 install dir2ogg 0.11.8-1 2010-12-09 23:34:53 install faad 2.7-4 2010-12-09 23:34:54 install wavpack 4.60.1-1 2010-12-10 11:53:00 install playonlinux 3.8.6
Вы можете запустить эту команду, чтобы получить список только недавно установленных имен пакетов,
awk '$3~/^install$/ ' /var/log/dpkg.log
Команда перечислить историю apt-get (ПРИМЕЧАНИЕ: это не список установленных зависимостей, это просто список предыдущих apt-get команды, которые были выполнены):
grep " install " /var/log/apt/history.log
Пример вывода:
Commandline: apt-get install libindicate-doc Commandline: apt-get install googlecl Commandline: apt-get --reinstall install ttf-mscorefonts-installer Commandline: apt-get install valac libvala-0.10-dev Commandline: apt-get install libgtksourceview-dev Commandline: apt-get install python-sphinx Commandline: apt-get install python-epydoc Commandline: apt-get install quickly-widgets Commandline: apt-get install libreoffice3* libobasis3.3* Commandline: apt-get install mc
Чтобы увидеть также старые пакеты, отсортированные по времени установки:
grep " install " /var/log/dpkg.log.1 /var/log/dpkg.log
И для пакетов, установленных очень давно:
gunzip -c `ls -tr /var/log/dpkg.log.*.gz` | grep " install "
Центр программного обеспечения Ubuntu показывает всю историю всех пакетов, которые были установлены / обновлены / удалены. Просто нажмите «История» внизу списка слева.
Следующий трюк отвечает на просьбу Александра Дубинского ограничить это пакетами, устанавливаемыми вручную:
Альтернатива, показывающая больше информации в хронологическом порядке и доступ ко всем доступным журналам:
zcat -f /var/log/dpkg.log* | grep " install " | sort > /tmp/dpkg.log grep -F "`comm -12 <(apt-mark showmanual | sort) <(cat /tmp/dpkg.log | cut -d " " -sf4 | grep -o "^[^:]*" | sort)`" /tmp/dpkg.log | grep \
grep \ ограничивает результаты новыми установками. Вы можете, например, использовать grep, чтобы ограничить поиск трехмесячным периодом, добавив grep 2016-0[567] до первого трубопровода; это очень гибкий.
Все на одной линии; для командного использования
Выберите и напечатайте только недавно установленные имена пакетов, все в одной строке.
Для этого измените ответ с наибольшим количеством голосов на:
cat /var/log/dpkg.log |awk '/ install / '
Это приводит к одной строке имен пакетов. Такая строка может быть легко добавлена к sudo apt-get purge команда.
Пример вывода
libgnome-media-profiles-3.0-0 gstreamer0.10-gconf gnome-media gnome-menus librest-0.7-0 libgoa-1.0-common libgoa-1.0-0 libwacom-common libwacom2 ubuntu-docs apg libgnome-control-center1 libgnomekbd-common libgnomekbd7 gnome-control-center-data gnome-icon-theme-symbolic gnome-settings-daemon ubuntu-system-service gnome-control-center gnome-online-accounts gnome-session-bin indicator-power mousetweaks
Перечисление пакетов один под другим
По многочисленным просьбам, здесь есть несколько адаптированная версия для перечисления пакетов один под другим:
cat /var/log/dpkg.log |awk '/ install / '
Есть пакет под названием wajig. Проверьте его на наличие командной строки, это первое, что я сейчас установил. Как aptitude, за исключением того, что он работает так, как будто вы ожидаете, что сработает диспетчер команд. Так что на самом деле это не похоже на способности. Команды ниже являются лишь небольшим подмножеством.
wajig help Common JIG commands: update Update the list of downloadable packages new List packages that became available since last update newupgrades List packages newly available for upgrading install Install (or upgrade) one or more packages or .deb files remove Remove one or more packages (see also purge) toupgrade List packages with newer versions available for upgrading upgrade Upgrade all of the installed packages or just those listed listfiles List the files that are supplied by the named package listnames List all known packages or those containing supplied string whatis For each package named obtain a one line description whichpkg Find the package that supplies the given command or file Run 'wajig -v commands' for a complete list of commands.
Вот некоторая оболочка для вывода списка установленных файлов dpkg. (который должен включать все установленные пакеты apt / aptitude / software center/synaptic)
grep -A 1 "Package: " /var/lib/dpkg/status | \ grep -B 1 -Ee "ok installed|half-installed|unpacked|half-configured|config-files" -Ee "^Essential:yes" | \ grep "Package:" | cut -d\ -f2
Это не включает информацию о времени и дате установки. Но может быть полезно при определении любых различий в пакетах, установленных от os install до current.