Как я могу перечислить установленные пакеты по дате установки?
Мне нужно сделать это в Debian / Ubuntu. Ответы для других дистрибутивов также были бы хорошими.
Я установил много вещей для компиляции определенного фрагмента кода и хочу получить список пакетов, которые мне пришлось установить.
debian
package-management
apt
Элазар Лейбович
источник
источник
Ответы:
Дистрибутивы на основе RPM, такие как Red Hat, просты:
В Debian и других дистрибутивах на основе dpkg ваша конкретная проблема также проста:
Если файл журнала не был повернут, в этом случае вы должны попробовать:
В общем,
dpkg
иapt
, кажется, не отслеживать дату установки, если не считать такого поля наdpkg-query
странице руководства .И, в конце концов, старые
/var/log/dpkg.log.*
файлы будут удалены путем ротации журналов, так что не гарантируется, что вы получите всю историю вашей системы.Одно предложение, которое появляется несколько раз (например, эта ветка ), - это посмотреть
/var/lib/dpkg/info
каталог. Файлы там предлагают вам попробовать что-то вроде:Чтобы ответить на ваш вопрос о выборе, вот первый проход.
составить список пакетов по датам
построить список установленных пакетов
присоединиться к 2 спискам
По какой-то причине для меня не очень много различий, поэтому может быть ошибка или неверное предположение о том, что
--get-selections
значит.Очевидно, что вы можете ограничить пакеты либо с помощью
find . -mtime -<days>
илиhead -n <lines>
, и изменить формат вывода, как вам нравится, напримерперечислить только те варианты, которые были установлены (изменены?) за последние 4 дня.
Вы также можете удалить
sort
команды после проверки используемого порядка сортировкиdpkg --get-selections
и сделатьfind
команду более эффективной.источник
apt-get
больше, чемrpm
, но теперь Debian получает -1 за то, что не сохранил дату установки в базе данных. Уловка Debian включает в себя все установленные пакеты, а не только выбранные , но это хорошее начало.half-installed
записи), если вы делаете:grep install\ /var/log/dpkg.log
grep " install " /var/log/dpkg.log
перечисляет только строки «install», а не показывает «status».Микель показал, как это сделать на уровне dpkg . В частности,
/var/lib/dpkg/info/$packagename.list
создается, когда пакет установлен (а не изменен впоследствии).Если вы использовали инструменты APT (что вы, вероятно, и сделали, так как вас беспокоит автоматическая установка против пакетов, установленных вручную), то есть история
/var/log/apt/history.log
. Пока он не свернут, он отслеживает все установки, обновления и удаления APT с аннотацией для пакетов, помеченных как автоматически установленные. Это довольно недавняя функция, представленная в APT 0.7.26, поэтому в Debian она появилась в squeeze. В Ubuntu 10.04 имеет,history.log
но автоматически установленная аннотация отсутствует до 10.10.источник
Грубо, но работает:
источник
ls
. См. Mywiki.wooledge.org/ParsingLs для заметок о том, почему это опасно / по своей сути глючит - более безопасный вариант - использоватьfind -printf
илиstat --format
генерировать поток, который может быть однозначно проанализирован.ls -al --time-style=long-iso
должно быть полезным. Кроме того, вероятно, неслыханно, что кто-то назовет пакет APT с\n\t\r\v
его именем./var/log/apt/history.log
Файл имеет неудобный формат ИМХО.Я бы предпочел более отформатированную запись в лог-файле
или некоторый XML, показывающий не только {пакет}, но и любые {зависимости}.
В настоящее время реализовано, вы можете найти информацию, которую вы ищете, но для извлечения подробностей требуется некоторая криминалистическая обработка.
источник
Это работает для меня в системе Debian, я предполагаю, что формат файла изменился с 2011 года. Эта система довольно свежа, поэтому я не ожидаю, что это сработает на более старой системе, хотя для этого может потребоваться просто разархивировать журналы и использовать шар, чтобы обратиться ко всем из них.
Первые два поля в каждой строке файла
/var/log/dpkg.log
- это дата и время. Обратите внимание на завершающее пространство с установкой в части grep, это потому, что обновления могут инициировать установку, но если я правильно понял, вы хотели знать, что было установлено пользователями.источник
Вот одна строка, которую каждый хочет и нуждается:
Результат покажет все (новые) установленные и обновленные пакеты в хронологическом порядке.
Линия объяснения:
ls -1t
- получить всеdpkg.log*
имена файлов в хронологическом порядкеzcat -f
- Если файл имеет GZIP типа , то разжимать его, ELSE просто передать содержание.tac
- Обратный вывод cat , построчно, чтобы убедиться, что мы получаем правильный хронологический порядок.grep
- Проверяйте только установленные или обновленные пакеты.awk -F ':a'
- Отделите поле архитектуры от имени пакета.column -t
- довольно печатать столбцы, разделенные пробеломКонечно, хотелось бы создать для этого псевдоним, но, к сожалению, это невозможно, поскольку awk зависит как от одинарных, так и от двойных кавычек. В связи с этим это лучше всего поместить в сценарий bash, где
:
разделитель лучше обрабатывается для других архитектур в столбце поля.Выход:
Минус:
источник
Отмечая это, вы упоминаете, что приветствуются ответы на другие вопросы. rpm имеет большой набор тегов выходного формата, одним из которых является INSTALLTIME. (Используя
wget
в качестве примера)Это может быть отформатировано несколькими способами. Я использую это таким образом:
На этих двух страницах содержится масса полезной информации по решению проблем метаданных RPM:
http://www.rpm.org/max-rpm/s1-rpm-query-parts.html
http://www.rpm.org/max-rpm/s1-rpm-query-handy-queries.html
Сортировка этой информации даст вам рабочее решение вашей проблемы.
источник
GNU / Linux Debian не имеет встроенных инструментов для этой проблемы, но вся информация о программах, установленных стандартным способом , сохраняется в файлах с именем программы-name.list в каталоге / var / lib / dpkg / info / . Но там нет информации об установленных вручную программах.
Длинное однолинейное решение :
Пояснение :
ls -rt
выводит файлы, отсортированные по дате изменения в обратном порядке, то есть с самыми новыми файлами в конце списка.stat
печатает дату файла в удобочитаемой формеprintf
отображает название пакета и дату его последнего изменения.for
Цикл в целом имена печатает пакет и даты от старого к новому.Пример вывода (усеченный):
Основным недостатком этого решения является то, что оно недостаточно хорошо протестировано на производстве.
источник
/var/lib/dpkg/info/
. Именно поэтому использование/var/log/dpkg.log*
может быть предпочтительным.Это грубо, но работает так же быстро, как и другие решения. Формат даты - ггггммддччммсс, что означает, что бит или переупорядочение и удаление формата приводят к числу, которое можно отсортировать.
Большое спасибо другим решениям, в этом списке перечислены имена пакетов в порядке установки, которые можно было бы использовать во встроенной для копирования операционной системе.
источник