Dpkg

dpkg -p 不適用於某些軟體包(如 vim)

  • June 6, 2021

我正在為 LPIC 考試而學習,實驗室的任務之一是查找有關 package with 的詳細資訊dpkg -p,特別是有關vim with 的詳細資訊dpkg -p vim。在解決方案中,該命令生成有關包的資訊,但我的輸出是:

root@home:~# dpkg -p vim
dpkg-query: package 'vim' is not available
Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.

Vim已安裝,我正在使用它,它也可以在系統上找到

root@home:~# type vim
vim is hashed (/usr/bin/vim)
root@home:~# which vim
/usr/bin/vim

我認為dpkg -p它以某種方式損壞了,但它可以與其他軟體包一起使用(我嘗試了幾個,它們都執行良好):

root@home:~# dpkg -p eject
Package: eject
Priority: important
Section: utils
Installed-Size: 160
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
...

我的系統(VPS)資訊是

Ubuntu 18.04.5 LTS
Linux 4.15.0-143-generic #147-Ubuntu SMP Wed Apr 14 16:10:11 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

為什麼我不能重現課程中的解決方案?謝謝!

在遙遠的時間裡,dpkg它不是被apt尚不存在的,而是被其他前端使用,比如dselect. 這些工具負責更新以文件結尾的可用軟體包列表,/var/lib/dpkg/available例如在執行時dselect updatedpkg -p的功能取決於最新的可用列表文件。

今天並非總是如此。apt根本不在乎/var/lib/dpkg/available。可能還有其他(可能是 GUI)工具仍會以某種方式更新此文件,因此/var/lib/dpkg/available可能會部分填充。

dpkg(or )的聯機幫助頁dpkg-query告訴我們:

-p,--print-avail包名…

顯示有​​關包名稱的詳細資訊,如 /var/lib/dpkg/available. 基於 APT 的前端的使用者應該 apt-cache show package-name使用.

還有:

--update-avail

$$ Packages-file $$

--merge-avail $$ Packages-file $$ 更新dpkgdselect的關於哪些包可用的想法。通過 action --merge-avail,舊資訊與 Packages-file 中的資訊相結合。使用 action --update-avail,舊資訊將替換為 Packages 文件中的資訊。與 Debian 一起發布的 Packages 文件簡稱為 «Packages»。如果 Packages-file 參數失去或命名為«-»,那麼它將從標準輸入中讀取(從 dpkg 1.17.7 開始)。dpkg將可用軟體包的記錄保存在/var/lib/dpkg/available.

您可以使用apt-cache dumpavail即時生成可用的文件格式輸出:

dumpavail dumpavail 將可用列表列印到標準輸出。這適用於 dpkg(1) 並由 dselect(1) 方法使用。

並合併結果(此範例未在 Ubuntu 上執行):

# apt-cache dumpavail | dpkg --merge-avail -
Updating available packages info, using -.
Information about 119859 packages was updated.

dpkg -p vim現在可以工作了,但直接使用apt-cache show vimapt show vim.

結論:一些 LPIC 問題可能已經過時,但要獲得考試,您必須學習在任何地方都不再使用的特定考試內容。

引用自:https://unix.stackexchange.com/questions/653084