使用 Synaptic / apt / dpkg 检测下载(且未安装)的软件包?

使用 Synaptic / apt / dpkg 检测下载(且未安装)的软件包?

有什么办法可以检测到下载(在缓存中)未安装使用 Synaptic、apt 或 dpkg 的软件包?我是否必须为此创建一个特定的过滤器?如果是这样我该怎么做?我可以在哪里了解这一点?

我知道 apt 或 Synaptic 缓存已打开,/var/cache/apt/archives并且似乎如果您使用 apt 安装某些内容,则不会有任何内容进入缓存。另一方面,您可以在 Synaptic 中选择仅下载并稍后安装。

我想要的是知道缓存上有哪些尚未安装的内容。

答案1

又快又脏:

PATH=/sbin:$PATH dpkg --no-act -iGE /var/cache/apt/archives/*.deb 2>&1 |grep -v skipping

这要求 dpkg 假装 ( --no-act) 安装 ( -i) 缓存中的软件包,跳过已存在相同版本或更新版本的软件包 ( -GE)。您不需要成为 root 用户,但您确实需要/sbin在命令搜索路径中包含一些实用程序,因为即使它不会在模式下使用它们,也dpkg -i坚持在路径中包含一些实用程序。/sbin--no-act

答案2

我不认为你可以用 Synaptic 做到这一点,但这里有一个命令,它将查询缓存中所有包的状态并列出与已安装包不匹配的文件:

for deb in /var/cache/apt/archives/*.deb; do
    package=$(dpkg-deb -f $deb Package)
    if [ "$(dpkg-query -f '${Status}' -W $package 2>/dev/null)" != "install ok installed" ]; then
        echo $deb
    fi
done

这会查看*.deb缓存中存在的每个文件,确定它包含的包,并检查包的状态。它将列出与未完全安装和配置的包对应的任何文件。

吉尔斯的方法具有类似的相同效果,但操作全体apt如果您的缓存包含大量包,最终速度会更快。它也具有列出升级候选的优点,但它的缺点是运行某些dpkg挂钩(尽管有--no-act选项)。

apt运行后(v.apg-get或 Synaptic)在缓存中看不到包的原因是它apt会自动清理。

相关内容