Я собираюсь переместить сервер из одной коробки Ubuntu в другую. Я не клонирую старую коробку в новую; Я создаю новую систему и буду перемещать данные по мере необходимости. Я хочу установить все программное обеспечение, которое у меня есть на старом ящике, на новом.
Есть ли простой способ найти историю всех команд "sudo apt-get install", которые я давал с течением времени? То есть dpkg -l показывает мне все установленные пакеты, но не показывает, какой пакет верхнего уровня их установил. Если есть способ для dpkg предоставить мне установочный пакет, я могу найти там уникальные; в противном случае я хочу еще что-нибудь сказать «вы установили эти 24 пакета».
В apt
история в /var/log/apt/history.log
как сказано в комментарии выше. Тем не менее, это не будет перечислять пакеты, которые были установлены вручную, используя dpkg
или графические интерфейсы, такие как gdebi
. Чтобы увидеть все пакеты, которые прошли dpkg
вы можете посмотреть на /var/log/dpkg.log
.
http://www.debianadmin.com/clone-your-ubuntu-installation.html
и /var/adm/apt/history.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