有什么办法可以检测到下载(在缓存中)和未安装使用 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
会自动清理。