首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Debian在哪里存储已安装软件包的列表?

Debian在哪里存储已安装软件包的列表?
EN

Unix & Linux用户
提问于 2021-06-15 13:54:54
回答 1查看 1.9K关注 0票数 2

我需要找到安装在Debian (Armbian)服务器上的软件包列表。由于它是脱机的,所以我不能使用aptdpkg (或任何其他命令)。我需要知道which文件(S)包含列表(即使它们是二进制的)。我试着搜索,但一切只是说运行上述命令,这不是一种选择。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-06-15 13:57:13

如何近似dpkg --get-selections来自/etc和/var的备份?解决了您的潜在问题。

已安装软件包的列表存储在/var/lib/dpkg/status中。查找Status: install ok installed行--这表明包已正确安装。

以下AWK调用将从status文件中提取已安装的包名:

代码语言:javascript
复制
awk '/^Package:/ { package = $2 }
     /^Status: install ok installed/ { print package }' /path/to/status

如果系统支持多个体系结构,那么您也需要跟踪这一点:

代码语言:javascript
复制
awk '/^Package:/ { p = $2; i = 0 }
     /^Status: install ok installed/ { i = 1 }
     i && /^Architecture: all/ { print p; next }
     i && /^Architecture/ { printf "%s:%s\n", p, $2 }' /path/to/status

另一个有趣的文件是/var/lib/apt/extended_states,它记录已安装软件包的“自动安装”标志。您可以通过运行以下代码来还原这些标志

代码语言:javascript
复制
awk '/^Package:/ { p = $2 }
     /^Architecture/ { a = $2 }
     /^Auto-Installed: 1/ { printf "%s:%s\n", p, a }' /path/to/extended_states |
xargs sudo apt-mark auto

您可以将这两个文件组合起来列出手动安装的包,并依靠依赖关系管理来安装自动安装的包(尽管这并不一定会导致安装相同的软件包):

代码语言:javascript
复制
awk 'FNR == NR && /^Package:/ { p = $2 }
     /^Status: install ok installed/ { i = 1 }
     FNR == NR && i && /^Architecture: all/ { ps[p] = 1; next }
     FNR == NR && i && /^Architecture/ { ps[p ":" $2] = 1}
     FNR != NR && /^Package:/ { p = $2 }
     FNR != NR && /^Architecture:/ { a = $2 }
     /^Auto-Installed: 1/ { delete ps[p ":" a] }
     END { for (p in ps) print p }' /path/to/status /path/to/extended_states

请参阅man dpkg中的“文件”部分:

可用包的/var/lib/dpkg/status状态。此文件包含有关包是否标记为移除、是否已安装等信息。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/654369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档