Package-Management
Debian 在哪裡儲存已安裝軟體包的列表?
我需要找到在 Debian (Armbian) 伺服器死前安裝的軟體包列表。由於它處於離線狀態,因此我無法使用
apt
ordpkg
(或任何其他命令)。我需要知道哪些文件包含列表(即使它們是二進製文件)。我嘗試搜尋,但一切都只是說執行 aforementioend 命令,這不是一個選項。
如何從 /etc 和 /var 的備份中近似
dpkg --get-selections
?解決您的根本問題。已安裝軟體包的列表儲存在
/var/lib/dpkg/status
. 查找Status: install ok installed
行 - 這表明軟體包已正確安裝。以下 AWK 呼叫將從
status
文件中提取已安裝的包名稱:awk '/^Package:/ { package = $2 } /^Status: install ok installed/ { print package }' /path/to/status
如果系統支持多種架構,您還需要跟踪它:
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
記錄已安裝包的“自動安裝”標誌。您可以通過執行類似的東西來恢復標誌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
您可以結合這兩個文件來列出手動安裝的包,並依靠依賴管理來安裝自動安裝的包(儘管這不一定會導致安裝相同的包集):
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
可用軟體包的狀態。該文件包含有關軟體包是否標記為刪除、是否已安裝等資訊。