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

ger*_*ijk 5 lts package-management scripts

我想看看我的系统在多大程度上支持 LTS,其中哪些包支持 5 年,哪些不支持。我可以忽略一些非 5yr 支持的软件包,因为有些很少使用或不太可能遇到(安全)问题。

我认为这很有用,因为人们可以获得报告并得出结论,例如“我的系统是 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>
Run Code Online (Sandbox Code Playgroud)

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

real    0m1.535s
user    0m1.484s
sys     0m0.036s
Run Code Online (Sandbox Code Playgroud)

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

如何加快速度并获得系统上所有非 5yr 支持的软件包的报告?

我更喜欢apt-*在简单的 shell 脚本中使用一个简单的shell 命令。如果它需要更高级的脚本,比如进入 Python,这也很好。最后,我想发布一个(小)脚本来轻松快速地在系统上创建报告。

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

Ger*_*ger 6

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

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

看起来没那么糟糕吧?

总包数:

dpkg -l | grep 'ii' | wc -l
2602
Run Code Online (Sandbox Code Playgroud)

我正在运行一个 AMD E-350,它并不是一个非常快的 CPU ......

编辑:xargs 的最大参数数:

xargs --show-limits

...
POSIX upper limit on argument length (this system): 2091826
...
Run Code Online (Sandbox Code Playgroud)