Назад | Перейти на главную страницу

Как мне получить историю «apt-get install» в Ubuntu?

Я собираюсь переместить сервер из одной коробки Ubuntu в другую. Я не клонирую старую коробку в новую; Я создаю новую систему и буду перемещать данные по мере необходимости. Я хочу установить все программное обеспечение, которое у меня есть на старом ящике, на новом.

Есть ли простой способ найти историю всех команд "sudo apt-get install", которые я давал с течением времени? То есть dpkg -l показывает мне все установленные пакеты, но не показывает, какой пакет верхнего уровня их установил. Если есть способ для dpkg предоставить мне установочный пакет, я могу найти там уникальные; в противном случае я хочу еще что-нибудь сказать «вы установили эти 24 пакета».

В apt история в /var/log/apt/history.log как сказано в комментарии выше. Тем не менее, это не будет перечислять пакеты, которые были установлены вручную, используя dpkg или графические интерфейсы, такие как gdebi. Чтобы увидеть все пакеты, которые прошли dpkgвы можете посмотреть на /var/log/dpkg.log.

Вы можете перечислить пакеты, установка которых была явно запрошена с помощью apt-mark.

apt-mark showmanual

Если вы используете старый выпуск Debian, вот способ вручную.

Следующая команда дает список пакетов, установка которых была запрошена вручную или автоматически. Если вы не в процессе (де) установки пакетов, это список установленных пакетов.

dpkg --get-selections | sed -n 's/\t\+install$//p'

Следующая команда дает расширенный набор автоматически установленных пакетов:

</var/lib/apt/extended_states awk -v RS= '/\nAuto-Installed: *1/{print$2}'

Собирая все вместе, следующая команда выводит список установленных вручную пакетов:

comm -23 <(dpkg --get-selections | sed -n 's/\t\+install$//p') \
         <(</var/lib/apt/extended_states \
           awk -v RS= '/\nAuto-Installed: *1/{print$2}' |sort)

Я тоже "грешу" tar.gz-ed файлы истории следующим образом:

zgrep -E "Commandline: apt(|-get) install" /var/log/apt/history.log*

Если вам тоже нужна метка времени, просто добавьте дополнительный параметр -B1.

grep -i "Commandline" /var/log/apt/history.log

Показывает все пакеты, которые вы установили, используя: sudo apt-get install xxxxx

Вместо комбинации tac / head лучше использовать tail (для последних 25 строк):

tail -n 25 /var/log/apt/history.log

Другие ответы помогли, но дали мне слишком много результатов. Чтобы сократить выход, я начал с apt-mark showmanual как в этот ответ, а затем отфильтровал изначально установленные пакеты (см. этот ответ как получить список изначально установленных пакетов; Я использую ubuntu 18.04.2, поэтому ссылка ниже).

BASE_PACKAGES_MANIFEST=http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-amd64.manifest
REMOVE_VERSIONS_REGEX='[0-9][.-][0-9][.-][0-9]|[0-9][.-][0-9]|[0-9]'
paste  <( apt-mark showmanual ) <( apt-mark showmanual | sed -r "s/$REMOVE_VERSIONS_REGEX//g" ) |
    grep -vf <( curl $BASE_PACKAGES_MANIFEST | cut -f1 | sed -r "s/$REMOVE_VERSIONS_REGEX|:amd//g" ) |
    cut -f1 |
    sort |
    uniq

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

Другой способ, который мне нравится, это этот ответ, который ищет все журналы apt.

Чтобы получить список самых последних установленных пакетов в порядке убывания, мне нравится использовать (например, 25 строк):

tac /var/log/apt/history.log |head --lines=25