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


85

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

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



Можете ли вы принять ответ ниже? Быть благодарным людям, которые ответили.
м-рик


Эти решения будут проверять только то, что произошло ПОСЛЕ последнего вращения журнала. Они не проверяют всю историю.
Краанг Прайм

Простой и быстрый способ дает этот ответ, askubuntu.com/a/250530/197730 , на этот вопрос Как вывести список всех установленных пакетов .
TooTone

Ответы:


69

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


8

5
Процедура в первой ссылке не различает автоматически установленные пакеты и установленные вручную пакеты. /var/log/apt/history.log(кстати, вы ошиблись адресом) через несколько месяцев.
Жиль

Жиль прав по обоим пунктам. У меня есть только журналы этих журналов примерно за месяц, и я даже не вижу, как установлена ​​частота удаления журналов (это делается с помощью 'newsyslog' во FreeBSD). Так что у меня до сих пор нет решения, но у меня есть несколько указателей. Я могу, по крайней мере, получить выходные данные команды в статье о клонировании, найти «высокоуровневые» имена, установить их на новое, сделать то же самое на новом блоке, разнести два результата и повторить, пока не будет выполнено. Я все еще хотел бы услышать больше идей.
Пол Хоффман

7

Вы можете перечислить пакеты, установка которых была запрошена явно 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)

1
--- совсем другой результат отcomm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Cbhihe

На Debian есть apt-mark showmanualчто эквивалентно вашей последней команде.
maxschlepzig

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

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


Это не сильно отличается от ответа @ ℝaphink и должно быть комментарием к нему.
Карл Рихтер

2

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

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

Это не сильно отличается от ответа @ ℝaphink и должно быть комментарием к нему.
Карл Рихтер

Кроме того, это не то же самое. tail перечислит последние строки в файле в том порядке, в котором они находятся в файле. tac изменит порядок так, что последняя строка будет первой, вторая - последней - вторая и т. д. Также, опять же, кажется, что вы рискуете ошибиться, когда говорите, что «лучше», не объясняя, почему. Я имею в виду, "лучше", в соответствии с кем? Для чего? Кажется, излишне уверенным в себе.
Тодд Уолтон

0

Другие ответы помогли, но дали слишком много информации. Чтобы сократить вывод, я начал с того 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 .


-1

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

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

1
Более эффективный (и аллитерирующий) будет: tail -25 /var/log/apt/history.log | tac
АРУ

Это не сильно отличается от ответа @ ℝaphink и должно быть комментарием к нему.
Карл Рихтер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.