Как просмотреть историю установки apt-get?


18

Как я могу просмотреть историю apt-get installкоманд, которые я выполнил вручную?

Мне кажется, что все доступные методы показывают все, что было установлено с самого начала установки Ubuntu.

Как я могу просмотреть историю apt-get installс момента завершения процесса установки моей системы?


Ну да. Что еще вы ожидаете? Вы хотите показывать только те, что запускали из терминала, а не те, которые запускались через графический интерфейс или что-то еще? Пожалуйста, отредактируйте свой вопрос и уточните .
тердон

@terdon Окей сделал новое редактирование
TellMeWhy

1
Есть логи dpkgв /var/log/dpkg.log*.
Велкан

1
@ParanoidPanda Это не по-разному. Усечения истории, вещи, запускаемые в других оболочках, вещи, удаленные из истории или никогда не помещаемые туда в первую очередь, вещи, установленные из сценариев, вещи, запускаемые другими пользователями и т. Д. И т. Д.
Squidly

1
@MrBones: я знаю, и я заявил об этом в своем ответе (и в комментариях ниже). Однако ОП запросил способ просмотра всех случаев, когда они вручную выполнили apt-get installкоманду для установки пакета, и я предоставил решение, которое предоставляет эту информацию, если файл истории не был изменен определенными способами (например, записи имеют были удалены).

Ответы:


20

Я думаю , что ответ дается здесь на кос является лучшим способом я видел до сих пор. Хотя, поскольку Software Center использует apt, все, что он установил, тоже будет в списке.

Команда:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

Я проверю это, когда вернусь домой и приму его, если это
сработает

Это не! проверить обновление: askubuntu.com/a/680405/320386
kos

Используйте это, это способ более безопасная для выполнения этой задачи: zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?=.* install ) \K.*' | sed '1,4d': grep -Po '^Commandline:(?=.* install ) \K.*'будет фильтровать только apt-getкоманды , содержащие installс передним и задним пространством, sed '1,4d' может зависеть от конкретной установки; В моем 1,4удаляется ровно количество записей, поступающих с Ubiquity, которые вы хотите удалить. Дайте мне знать, если число совпадает в вашей установке, таким образом, по крайней мере, у нас есть базовая линия: |
Кос

@kos Я получаю дополнительные строки, такие как apt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y --no-remove install linux-genericновая команда. Они линии Ubiquity?
Arronical

Нет, похоже, они пришли из Software Updater; нет никакого способа отличить команды, запускаемые от пользователя, и команды, запускаемые каким-либо apt-getвнешним интерфейсом, кроме Ubiquity, который запускается только один раз (например, aptdaemonзаписи будут показаны и этой командой). Однако лучше всего использовать эту команду, которая по крайней мере исключает записи Ubiquity.
Кос

9

Просто введите следующую команду в своем терминале, чтобы просмотреть все журналы установки.

grep " install " /var/log/dpkg.log

3

Чтобы упростить @Arronical ответ, я недавно узнал об одном простом приеме: вы можете использовать zcat -qfкак txt, так и txt сжатые файлы.

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

становится

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

От человека zcat:

   -q --quiet
          Suppress all warnings.
   -f --force
          Force  compression  or  decompression  even if the file has multiple links or the corre‐
          sponding file already exists, or if the compressed data is read from  or  written  to  a
          terminal.  If  the  input  data is not in a format recognized by gzip, and if the option
          --stdout is also given, copy the input data without change to the standard  output:  let
          zcat  behave  as  cat.  If -f is not given, and when not running in the background, gzip
          prompts to verify whether an existing file should be overwritten.

2

Вот скрипт, который печатает только установленные в данный момент пакеты верхнего уровня , где «пакеты верхнего уровня» определены как пакеты atp, от которых не зависят никакие другие пакеты atp. Если такие программы верхнего уровня были установлены с помощью atp или менеджера пакетов, такого как synaptic, то они были выбраны пользователем вручную.

#!/bin/sh
NumDaysAgo=18
find /var/lib/dpkg/info -name "*.list" -mtime -$NumDaysAgo \
    -exec stat -c $'%y\t%n' {} \; | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list,,' | \
sort -r | \
while read Date Time Xxx Pkg
do 
    lncnt=$(apt-cache --installed rdepends $Pkg | wc -l)
    if [ $lncnt -eq "2" ]
        then echo "$Date $Time $Pkg"
    fi
done
echo "JOB COMPLETED: $BASH_SOURCE"

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

Ход программы:

  • Программа сначала собирает в список все установленные пакеты, читая имена файлов под /var/lib/dpkg/info/. Время мода файла - время установки.
  • Этот список отсортирован в обратном порядке.
  • Для каждого установленного пакета $Pkgвызов apt-cache rdepends $Pkg запрашивает обратные зависимости $Pkg. Если нет никаких зависимостей, то это пакет верхнего уровня, и информация о пакете печатается: дата и время имя_пакета

Примечания:

  • Сценарий зависит от формата вывода, apt-cache rdepends $Pkgкоторый предназначен для человеческих глаз и может измениться в будущих версиях apt.
  • Код для части, собирающей имена файлов в / var / lib / dpkg / info /, взят из этого поста unix.stackexchange . Как указывал этот плакат «mikel», журналыdpgk истории не являются надежными, потому что они будут развернуты после достижения определенного объема.
  • Справочная страница для apt-chache
  • Вызов, apt-cache rdepends ...по-видимому, очень медленный, потому что каждый вызов вычисляется путем итерации всех зависимостей. Следовательно, приведенный выше скрипт начинается с самых новых установок, чтобы предложить пользователю как можно больше мгновенного вознаграждения.
  • --installedФлаг после apt-cacheпроверки , что DPKG установленных пакетов также склонные установлено. Если бы пользователь или другая инсталляционная программа обошли apt и использовали dpkg напрямую, это было бы возможно. ЭТОТ СЛУЧАЙ НЕ БЫЛ ПРОВЕРЕН, но я думаю, что что-то заметное будет напечатано в стандартном выводе или выводе ошибки
  • Вывод не включает выбранные вручную пакеты, которые впоследствии стали зависимыми от более высокого пакета. Вывод также может включать пакеты, которые были установлены через apt другим сторонним программным обеспечением и, следовательно, не установлены вручную. Однако, если цель вывода - это основа для установки восстановленного linux из /homeкаталога резервной копии, который включает в себя упомянутое стороннее программное обеспечение, тогда этот вывод будет подходящим.
  • Некоторые из имен пакетов включают номера версий, а некоторые нет. Упоминается только для того, чтобы привлечь внимание к факту.

1

Если вы хотите увидеть все, что вы установили, запустив:

sudo apt-get install [package]

И вы не перепутали историю bash и не хотите просматривать историю такого типа установки для другого пользователя (или всех пользователей), тогда вы можете просто запустить:

history | grep "apt-get install"

И это должно дать вам в основном соответствующие результаты.


1
Я получу всю историю с этим?
TellMeWhy

@DevRobot: Если вы вручную не изменили записи с указанными apt-get installв них записями в .bash_historyфайле или не удалили этот файл, команда покажет вам все случаи, когда вы выполняли команду со строкой apt-get installв ней для своей учетной записи пользователя (даже если вы Запустите команду от имени пользователя root и, следовательно, не совсем как ваша учетная запись пользователя, которая выполняет команду с sudo).

2
Это может вызвать проблемы, если вы ввели более 200 команд
Arronical

2
@ Arronical доказательство ожидается при предъявлении претензий ;-)
Rinzwind

1
Я бы сам принял значение 500 по умолчанию ( gnu.org/software/bash/manual/html_node/… ).
Rinzwind

1

Если вы хотите историю apt-get installкоманд, используйте следующую команду:

grep "apt-get install" .bash_history

Выход:

ravan@ravan:~$ grep "apt-get install" .bash_history

sudo apt-get install --no-install-recommends ubuntu-mate-core ubuntu-mate-desktop
sudo apt-get install xfce4
sudo apt-get install xfce4.12
sudo apt-get install pgadmin
sudo apt-get install touchegg
sudo apt-get install aptitude
sudo apt-get install aptitude
sudo gedit .bash_history | grep "apt-get install" 
sudo apt-get installvim
grep "apt-get install" .bash_history
cat .bash_history | grep "apt-get install" 

Для получения дополнительной информации см. Дополнительная информация .

Существует также более подробная информация об установке /var/log/apt/в history.logи history.log.X.gzфайлы и term.logи term.log.X.gzфайлы

Если вы хотите историю только apt-getвключенных команд, то

history | grep apt-get


apt-mark showmanualпоказывает все пакеты, установленные при установке ОС, а не только те, которые были установлены вручную. Это странный способ вести себя!
Arronical

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

@ Arronical - Где находится справочная страница apt -mark showmanual? Я не вижу его на справочной странице Ubuntu 16.04 LTS для apt: < manpages.ubuntu.com/manpages/xenial/en/man8/apt.8.html >.
Крейг Хикс,


0

Для того , чтобы увидеть , что Вы установили и удалить, переустановить и т.д. Подробнее о поездке в APT-получить устанавливает.

Ответ может быть изменен на псевдоним:

alias apted='zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | fgrep Commandline: | cut -d " " -f 2- | grep -P "^|install"'

0

Обратите внимание, что некоторые аргументы могут быть установлены до установки, как это делает скрипт virtualmin во время установки: apt-get -y install packagename.

Поэтому, если вы хотите перехватить все команды установки, вам нужно изменить запрос регулярных выражений.

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get.*install (?!.*--reinstall)\K.*'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.