如何有效获取已安装的非 LTS 软件包列表?

如何有效获取已安装的非 LTS 软件包列表?

我想通过哪些软件包支持 5 年和哪些不支持来了解我的系统在多大程度上支持 LTS。我可以忽略一些不支持 5 年的软件包,因为这些软件包很少使用或不太可能出现(安全)问题。

我认为这很有用,因为人们可以获得报告并得出结论,例如“我的系统是 100% LTS”“由于软件包 X、Y、Z,我的系统只有 99% LTS”“由于使用 KDE,我的系统现在有 50% LTS”

与……相关我的答案在问题中12.04 LXDE 有 LTS 吗?,我发布了一个查看 Ubuntu 哪些软件包具有五年支持的方法。例如:

$ apt-cache show unity | grep ^Supported
Supported: 5y

$ apt-cache show lxde-core | grep ^Supported
<no output>

我可以编写一个脚本来获取所有包的所有信息,但是命令apt-cache速度非常慢:

real    0m1.535s
user    0m1.484s
sys     0m0.036s

安装 2700 多个软件包后,这大约需要 70 分钟(!)。

我怎样才能加快速度并获取系统上所有非 5 年支持软件包的报告?

我更喜欢apt-*在简单的 shell 脚本中使用简单的 shell 命令。如果需要更高级的脚本,比如使用 Python,那么也可以。最终,我想发布一个(小)脚本,以便轻松快速地创建系统报告。

注意:我对讨论某个特定版本的 Ubuntu 是否提供 LTS 不感兴趣 - 这实际上只是软件包。您可以在系统上混合使用 LTS 和非 LTS 软件包。

答案1

我不知道你的系统,但这是我所做的:

time dpkg -l | grep 'ii' |  awk ' {print $2}' | xargs apt-cache show | grep '^Supported:' | grep -v '5y' | wc -l
158

real        0m27.549s
user        0m5.580s
sys         0m21.701s

看起来不是很糟糕吧?

总包裹数量:

dpkg -l | grep 'ii' | wc -l
2602

我正在运行 AMD E-350,它并不是一款速度超快的 CPU...

编辑:xargs 的最大参数数量:

xargs --show-limits

...
POSIX upper limit on argument length (this system): 2091826
...

答案2

这里有一个快速的单行命令来获取维护时间少于 5 年完整 LTS 期限的软件包列表,使用grep-dctrl(1):

sudo apt-get install dctrl-tools
dpkg -l | grep '^ii' |  awk ' {print $2}' | xargs apt-cache show | grep-dctrl -v -FSupported --exact-match -nsPackage 5y | sort | uniq

您可以轻松修改它来寻找不同的支持期。

相关内容