Debian:获取已安装文件的包名称

Debian:获取已安装文件的包名称

我通过 SSH 连接到运行 Linux 内核 3.11.1 的 PC:

root@alix:~# uname -r
3.11.1

如何找出哪个软件包分别安装了该特定文件或内核版本?

我试过

root@alix:/boot# dpkg -S vmlinuz-3.11.1 
dpkg-query: no path found matching pattern *vmlinuz-3.11.1*

其他已安装的内核版本可以通过以下命令找到dpkg-S:

root@alix:/boot# dpkg -S vmlinuz-3.2.23
linux-image-3.2.23-ath5kmod: /boot/vmlinuz-3.2.23-ath5kmod

我的目的:我想安装3.11.1版本相应的Linux头文件来为其编译内核模块。apt-cache 搜索 linux-headers列出了 15 个不同的标头版本,但没有列出 3.11.1 的标头版本。

非常感谢。

答案1

您可以列出每个已安装的软件包,并使用内核软件包dpkg -l筛选结果grep

dpkg -l | grep 'linux-image'
dpkg -l | grep 'linux-image' | grep '3.11'

要查找正在运行的内核的内核头文件包:

apt-cache search linux-headers-`uname -r`

答案2

我最初的问题是没有适用于当前安装的 Linux 内核 (3.11.1) 的合适的内核头文件。

最后,我通过四个步骤解决了这个问题:

  1. 删除了通过安装的内核apt-get
  2. 删除了自定义内核:

    • /boot/vmlinuz*内核版本*
    • /boot/initrd*内核版本*
    • /boot/系统映射*内核版本*
    • /启动/配置-内核版本
    • /lib/模块/内核版本/
    • 这里详细说明。
  3. 安装的内核包管理器默认发送的相应标头apt-get(版本 3.2.0-4-486)。

  4. 通过更新 grub更新grub

现在,我可以编译并使用所需的 Linux 内核模块了。感谢克里克为我指明了正确的方向。 :)

答案3

使用定位(1)命令来自定位包裹:

$ dlocate /boot/vmlinuz-*
linux-image-4.9.0-6-amd64: /boot/vmlinuz-4.9.0-6-amd64
linux-image-4.9.0-7-amd64: /boot/vmlinuz-4.9.0-7-amd64

dlocate将文件名作为参数并返回拥有/提供给定文件的包的名称。

答案4

apt-get install linux-headers应该为您提供所有已安装内核的标头

相关内容