如何获取已安装软件包的列表及安装日期?

如何输出所有已安装软件的列表,包括安装日期和其他信息?
3个回答

打开终端并运行:

zgrep 'install ' /var/log/dpkg.log* | sort | cut -f1,2,4 -d' '

示例输出:

2018-09-02 16:10:59 python3-psutil:amd64
2018-09-02 16:11:00 menulibre:all
2018-09-07 14:58:58 indicator-stickynotes:all
2018-09-08 00:17:41 libdumbnet1:amd64
2018-09-08 00:17:41 libxmlsec1-openssl:amd64
...

由于此命令将查找所有日志,因此输出可能非常大。所以最好将其保存到文件中使用

zgrep 'install ' /var/log/dpkg.log* | sort | cut -f1,2,4 -d' ' > test.txt

1那将显示已经被移除的包裹。 - pbhj
1这只查看一个日志文件 dpkg.log.1 - 可以改进为在所有日志文件中使用 zgrep。但是这是个好的开始,+1。 - Organic Marble
1zgrep 'install ' /var/log/dpkg.log* | sort | cut -f1,2,4 -d' ' > test.txt - Organic Marble
1你是正确的,按你喜欢的方式修改。如果你导入所有日志文件,会得到大量输出。 - Organic Marble
$ cat /var/log/dpkg.log | grep '2020-01-05'. YYYY-MM-DD - noobninja

这是一个使用文件/var/log/dpkg.log*来构建当前已安装软件包列表以及最近安装日期的脚本。
#!/bin/bash

LOGDIR=$(mktemp -d)
cd $LOGDIR
cp /var/log/dpkg.log* .

# grep the relevant lines from the log files
for file in dpkg.log*
do
  zgrep ' install ' "$file" > ins.${file%.gz}
done

# Merge all the install lines chronologically into a single file
cat $(ls -rv ins.*) > install.log

# Construct a list of all installed packages in the format packagename:arch
dpkg -l | grep '^.i' | tr -s ' ' | cut -d' ' -f2,4 | tr ' ' : | cut -d: -f1,2 > installed.list

OUTFILE=$(mktemp -p .)

for package in $(< installed.list)
do
  # Get only the most recent installation of the respective package
  grep " $package" install.log | tail -n1 >> "$OUTFILE"
done

sort "$OUTFILE" > newest-installs.log
echo "List of installed packages written to ${LOGDIR}/newest-installs.log"

1也许可以尝试使用here-string构造。可能会更快,例如 if grep 'install ' <<< "$line"。另外,在if测试中,所有不匹配'install '的行都会被删除或清除,如果初始的grep操作正确的话;所以你可以使用if..else来代替。这样应该会更快。为什么要使用gunzip而不是使用zgrep呢? - pbhj
1@pbhj:谢谢!不过我注意到脚本并没有完全生效,因为有些软件包没有remove行,尽管它们已经被卸载了(这些可能是在安装Ubuntu期间临时使用的软件包)。还有一些软件包有重复的install行。 - Stefan Hamcke
@pbhj: 我之前没有使用 zgrep 只是因为我不知道这个命令而已 :-) 很好你提到了它。 - Stefan Hamcke

使用
tail -f /var/log/dpkg.log

或者

less /var/log/dpkg.log

或者

grep " install " /var/log/dpkg.log*
zgrep " install " /var/log/dpkg.log.*.gz

可以使用grep命令来查找特定的软件包(例如)
grep -E 'install .*<package-name>' /var/log/dpkg.log*