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


Есть ли способ показать историю пакетов, которые были изменены apt-get через командную строку?


110
2018-01-15 13:04


происхождения


возможный дубликат Можно ли получить список недавно установленных пакетов? - BuZZ-dEE


ответы:


Все действия с apt (apt-get) регистрируются. Эти файлы доступны в / var / log / apt /. Чтобы просмотреть последний журнал истории, выполните:

less /var/log/apt/history.log

Эти журналы вращаются (каждый месяц я думаю), старые файлы будут суффиксны с числом и сжаты. Поэтому, чтобы просмотреть следующий журнал истории, используйте:

zless /var/log/apt/history.log.1.gz

Чтобы просмотреть доступные журналы:

ls -la /var/log/apt/

120
2018-01-15 13:10



Это отлично. Единственное, чего не хватает, - это то, кто управлял командами. - Limited Atonement
@LimitedAtonement Посмотрите /var/log/auth.log, это май содержать пользователя, выполняющего установку. (это не поможет, если установка была вызвана через оболочку / программу, запущенную как root) - Lekensteyn
Также полезно: zgrep, zcat - ishmael
этот файл также регистрирует пакеты зависимостей, установленные в результате первоначального apt-get? - Mahesha999
@LimitedAtonement в последних версиях APT предлагает часть журнала «Requested-By:», чтобы показать, кто вызвал эту команду, а также какую команду они вызывают, например «Commandline: packagekit role = 'update-packages» или «Commandline: apt Обновить" - Michael Tunnell


Вы также можете сделать короткую команду, чтобы отобразить интересный контент.

  • Добавьте эту пользовательскую функцию в свою ~/.bashrc:

    ### pars for fun: install | remove | rollback
    function apt-history(){
    
          case "$1" in
            install)
                  grep 'install ' /var/log/dpkg.log
                  ;;
            upgrade|remove)
                  grep $1 /var/log/dpkg.log
                  ;;
            rollback)
                  grep upgrade /var/log/dpkg.log | \
                      grep "$2" -A10000000 | \
                      grep "$3" -B10000000 | \
                      awk '{print $4"="$5}'
                  ;;
            *)
                  cat /var/log/dpkg.log
                  ;;
          esac
    }
    
  • И назовите это в терминале следующим образом:

    kreso@h17:~$ apt-history install
    2013-08-06 14:42:36 install gir1.2-nautilus-3.0:amd64 <none> 1:3.8.2-0ubuntu1~ubuntu13.04.1
    2013-08-06 14:42:36 install python-nautilus:amd64 <none> 1.1-3ubuntu1
    2013-08-06 14:42:37 install insync-nautilus:all <none> 1.0.20
    2013-08-07 14:41:37 install powertop:amd64 <none> 2.1-0ubuntu1
    2013-08-07 18:44:10 install libdiscid0:amd64 <none> 0.2.2-3build1
    2013-08-07 18:44:11 install sound-juicer:amd64 <none> 3.5.0-0ubuntu1
    

Взято из Вот


19
2017-08-25 10:12



zgrep ... /var/log/dpkg.log*- выводит записи из архивов. - Ctrl-C


Вы также можете использовать следующую команду для отображения недавно установленных пакетов

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

5
2018-02-13 23:28



даже лучше: grep "\ install\ " /var/log/apt/history.log если вам нужно скопировать и вставить список в apt-get - mchid


Если вы хотите, чтобы эти пакеты были установлены и не впоследствии удалите, попробуйте следующее:

comm -23 <(grep "apt-get install" /var/log/apt/history.log | sed 's/.* //' | sort) \ 
<(grep "apt-get remove" /var/log/apt/history.log | sed 's/.* //' | sort) 

Это установки минус любые соответствующие удаления.

Рекомендации:


2
2017-07-30 03:26



+1: Хороший однострочный, но действителен только для последнего периода вращения журнала. Также вместо sort, используйте sort -uв обоих случаях, чтобы избежать дублирования строк, например, в пакете, таком как oracle-java8-installer и многие другие. - Cbhihe


Вот как вы на самом деле это делаете, скажем, бормотание:

_P=mutter &&
(cat /var/log/dpkg.log{,.1};zcat /var/log/dpkg.log.*.gz) |
egrep --text "^[^ ]* [^ ]* (configure|install|remove|status [^ ]*|trigproc|upgrade) $_P[: ]" |
sort --reverse | less

С помощью dpkg.log захватывает операции, которые apt-get не видит.

Вывод:

2016-12-20 09:47:35 status unpacked mutter:amd64 3.22.2-2ubuntu1~ubuntu16.10.1
2016-12-20 09:47:35 status installed mutter:amd64 3.22.2-2ubuntu1~ubuntu16.10.1
…

1
2017-12-20 22:58



Обратите внимание, что тройные обратные ссылки здесь не работают так, как вы думаете. - edwinksl


Чтобы получить историю обновлений для определенного пакета, предполагая, что он был установлен / обновлен с помощью apt, это oneliner (bash и zgrep), например, для пакета skypeforlinux:

package='skypeforlinux'; pregex="(${package}[^\)]+\))"; while read -r line; do [[ "$line" =~ ^Start-Date:[[:space:]]([[:digit:]].+) ]] && curdate="${BASH_REMATCH[1]} "; [[ "$line" =~ $pregex ]] && echo "$curdate ${BASH_REMATCH[1]}"; done < <(for i in `ls -tr /var/log/apt/history*`; do zgrep -B3 "$package" $i; done)

Это файлы журналов истории grep apt для skypeforlinux, включая предыдущие три строки, чтобы получить дату. Затем повторяет результат и перекликается с соответствующими датами и версиями.

Заменить пакет значение переменной с вашим именем пакета, даже работает для нескольких пакетов, если они начинаются с одной строки.

Пример с выходом:

package='apache'; pregex="(${package}[^\)]+\))"; while read -r line; do [[ "$line" =~ ^Start-Date:[[:space:]]([[:digit:]].+) ]] && curdate="${BASH_REMATCH[1]} "; [[ "$line" =~ $pregex ]] && echo "$curdate ${BASH_REMATCH[1]}"; done < <(for i in `ls -tr /var/log/apt/history*`; do zgrep -B3 "$package" $i; done)
2017-10-19  15:00:09  apache2-utils:amd64 (2.4.18-2ubuntu3.5)
2017-11-24  14:24:45  apache-pom-java:amd64 (10-2build1, automatic)
2018-02-22  16:42:02  apache2-data:amd64 (2.4.18-2ubuntu3.5, automatic)
2018-02-26  15:34:34  apache2:amd64 (2.4.18-2ubuntu3.5)
2018-02-26  15:36:32  apache2-data:amd64 (2.4.18-2ubuntu3.5)
2018-02-26  15:40:50  apache2-data:amd64 (2.4.18-2ubuntu3.5, automatic)
2018-02-26  15:42:07  apache2:amd64 (2.4.18-2ubuntu3.5)
2018-02-26  15:42:39  apache2:amd64 (2.4.18-2ubuntu3.5)
2018-03-15  10:08:50  apache-pom-java:amd64 (10-2build1)
2018-04-20  08:55:07  apache2-data:amd64 (2.4.18-2ubuntu3.5, 2.4.18-2ubuntu3.8)
2018-07-06  08:55:11  apache2-data:amd64 (2.4.18-2ubuntu3.8, 2.4.18-2ubuntu3.9)

0
2017-07-19 09:54