🐧 Удаление пакетов, установленных в определенную дату/время в системах Linux

by itisgood

Я устанавливаю и тестирую множество приложений в своих виртуальных машинах Linux.

После завершения тестирования я удаляю установленные пакеты, которые больше не используются.

Поскольку я часто устанавливаю много приложений, удаление пакетов вручную по одному отнимает много времени.

Кроме того, иногда я забываю удалить ненужные пакеты.

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

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

На Arch Linux, EndeavourOS и Manjaro Linux:

$ expac --timefmt='%Y-%m-%d %T' '%l\t%n'|sort -n

На Fedora, RHEL, CentOS, AlmaLinux и Rocky Linux:

$ sudo rpm -qa --last

На Debian, Ubuntu, Linux Mint и Pop OS:

$ grep " install " /var/log/dpkg.log

Приведенные выше команды выведут список всех пакетов, установленных на все даты.

Однако нас интересует поиск и удаление пакетов, установленных только в определенную дату и время.

Мы можем использовать параметр %yyy-%mm-%dd в команде grep, чтобы получить список всех пакетов, установленных в определенную дату и время.

Например, следующая команда отображает все установленные пакеты на 14 сентября 2021 года в моей системе Debian 11 bullseye.

$ grep "2021-09-14.*.install " /var/log/dpkg.log

Пример вывода:

2021-09-14 06:51:51 install tmpreaper:amd64 <none> 1.6.14+nmu2
2021-09-14 11:14:14 install hello:amd64 <none> 2.10-2
2021-09-14 11:17:13 install hello:amd64 <none> 2.10-2
2021-09-14 11:17:13 install tmpreaper:amd64 <none> 1.6.14+nmu2
2021-09-14 11:22:29 install hello:amd64 <none> 2.10-2
2021-09-14 11:22:29 install tmpreaper:amd64 <none> 1.6.14+nmu2
2021-09-14 11:41:16 install nano:amd64 5.4-2 5.4-2
2021-09-14 11:41:17 install tmpreaper:amd64 <none> 1.6.14+nmu2
2021-09-14 11:41:17 install vim-runtime:all 2:8.2.2434-3 2:8.2.2434-3
2021-09-14 11:41:18 install vim:amd64 2:8.2.2434-3 2:8.2.2434-3

Как видно из приведенного выше вывода, я установил пакеты tmpreaper, vim и nano.

Если включена ротация логов, содержимое файла /var/log/dpkg.log будет удалено.

В этом случае вы можете просмотреть лог-файл предыдущей установки с помощью команды:

$ grep "2021-09-14.*.install " /var/log/dpkg.log.1

Если вы хотите перечислить только имена пакетов, исключив из вывода дату/время установки и сведения об архитектуре, выполните команду:

$ grep "2021-09-14.*.install " /var/log/dpkg.log | awk '{ print $4 }' | cut -d: -f1

Теперь вы увидите только имена установленных пакетов на указанную дату:

tmpreaper
hello
hello
tmpreaper
hello
tmpreaper
nano
tmpreaper
vim-runtime
vim

Теперь мы получили название всех установленных пакетов на заданную дату.

Чтобы удалить все пакеты, установленные на определенную дату, просто добавьте соответствующие аргументы команды apt с помощью xargs в конец предыдущей команды.

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

Поэтому всегда рекомендуется выполнить пробный запуск, чтобы проверить, какие пакеты будут удалены, прежде чем выполнять фактическую команду.

Для имитации (dry run) процесса удаления пакетов просто добавьте -s или –simulate, как показано ниже.

$ grep "2021-09-14.*.install " /var/log/dpkg.log | awk '{ print $4 }' | cut -d: -f1 | xargs sudo apt purge -y -s

Приведенная выше команда только имитирует процесс удаления пакетов, но не удаляет их.

Как только вы узнаете, какие пакеты будут удалены, повторно выполните приведенную выше команду без опции -s или –simulate:

$ grep "2021-09-14.*.install " /var/log/dpkg.log | awk '{ print $4 }' | cut -d: -f1 | xargs sudo apt purge -y

Если включена ротация логов, выполните эту команду вместо этого:

$ grep "2021-09-14.*.install " /var/log/dpkg.log.1 | awk '{ print $4 }' | cut -d: -f1 | xargs sudo apt purge -y
В этот раз пакеты, установленные на указанную дату, будут удалены из вашей системы.

You may also like

Leave a Comment