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


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

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


67
2017-08-28 00:14


Источник


Ага! это было задано раньше, и у него есть хороший ответ. - Gilles
Можете ли вы принять ответ ниже? Быть благодарным людям, которые ответили. - m-ric
Возможный дубликат Как получить список всех корневых / основных установленных пакетов на Debian - Rob Moir
Эти решения будут проверять только то, что произошло ПОСЛЕ последнего вращения журнала. Они не проверяют всю историю. - Kraang Prime


Ответы:


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


54
2017-08-28 08:53





http://www.debianadmin.com/clone-your-ubuntu-installation.html

и /var/adm/apt/history.log


6
2017-08-28 00:31



В первой ссылке не проводится различие между автоматически установленными пакетами и установленными вручную пакетами. /var/log/apt/history.log (вы ошибаетесь, если вы ошибаетесь), через несколько месяцев он будет повернут. - Gilles
Жиль прав по обоим пунктам. Я имею в виду только месячную стоимость этих журналов, и я даже не вижу, как устанавливается скорость удаления журнала (это делается с помощью «newsyslog» на FreeBSD). Поэтому у меня все еще нет решения, но у меня есть некоторые указатели. Я могу по крайней мере grep вывести из команды в статье клонирования, искать «высокоуровневые» имена, устанавливать их на новую, делать то же самое в новом окне, различать два результата и повторять до тех пор, пока они не будут удовлетворены. Я бы еще хотел услышать больше идей. - Paul Hoffman


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

apt-mark showmanual

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

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

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)

4
2017-08-28 08:11



--- совсем другой результат 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


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

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


1
2018-04-01 22:47



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


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

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

0
2017-10-21 16:47



Это не сильно отличается от ответа @ ℝaphink и должно быть комментарием к нему. - Karl Richter
Кроме того, это не то же самое. tail отобразит последние строки в файле в том порядке, в котором они находятся в файле. tac изменит порядок, так что последняя строка будет первой, вторая - последней секундой и т. д. Также снова кажется, что вы рискуете ошибиться, когда говорите что-то «лучше», не объясняя почему. Я имею в виду, «лучше», согласно кому? За какое требование? Кажется, слишком уверенно. - Todd Walton


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

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

-2
2017-08-21 10:56



Более эффективным (и всевозможным) будет: tail -25 /var/log/apt/history.log | tac - agc
Это не сильно отличается от ответа @ ℝaphink и должно быть комментарием к нему. - Karl Richter