如何通过命令行显示 apt-get 包管理历史记录?

NES*_*NES 136 apt history

有没有办法通过命令行显示由 apt-get 更改的包的历史记录?

Lek*_*eyn 152

使用 apt (apt-get) 的所有操作都会被记录下来。这些文件位于 /var/log/apt/ 中。要查看最近的历史日志,请执行:

less /var/log/apt/history.log
Run Code Online (Sandbox Code Playgroud)

这些日志会轮换(我猜是每个月),旧文件将带有数字后缀并进行压缩。因此,要查看下一个历史日志,请使用:

zless /var/log/apt/history.log.1.gz
Run Code Online (Sandbox Code Playgroud)

查看可用的日志:

ls -la /var/log/apt/
Run Code Online (Sandbox Code Playgroud)

  • 这是极好的。唯一缺少的是谁运行了命令。 (5认同)
  • @LimitedAtonement 查看/var/log/auth.log,它*可能*包含运行安装的用户。(如果安装是通过以 root 身份运行的 shell/程序调用的,这将无济于事) (4认同)
  • 同样有用:zgrep、zcat (3认同)
  • @LimitedAtonement 最新版本的 APT 提供了日志的“Requested-By:”部分,以显示谁调用了命令以及他们调用了哪个命令,例如“Commandline: packagekit role='update-packages'”或“Commandline: apt升级” (3认同)

Kre*_*dic 26

您还可以制作一个简短的命令来显示有趣的内容。

  • 将此自定义函数添加到您的~/.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
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 并在这样的终端中调用它:

    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
    
    Run Code Online (Sandbox Code Playgroud)

取自这里


小智 8

您也可以使用以下命令列出最近安装的软件包

grep "\ install\ " /var/log/dpkg.log
Run Code Online (Sandbox Code Playgroud)

  • 甚至更好:`grep "\ install\ " /var/log/apt/history.log` 以防您需要将列表复制并粘贴到 apt-get (2认同)