![如何有效获取已安装的非 LTS 软件包列表?](https://linux22.com/image/829881/%E5%A6%82%E4%BD%95%E6%9C%89%E6%95%88%E8%8E%B7%E5%8F%96%E5%B7%B2%E5%AE%89%E8%A3%85%E7%9A%84%E9%9D%9E%20LTS%20%E8%BD%AF%E4%BB%B6%E5%8C%85%E5%88%97%E8%A1%A8%EF%BC%9F.png)
我想通过哪些软件包支持 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
您可以轻松修改它来寻找不同的支持期。