是否可以判断我的 Linux 内核是定制的(即编译的)而不是发行版?

是否可以判断我的 Linux 内核是定制的(即编译的)而不是发行版?

以 Ubuntu 为例,我们能否判断内核是否是自定义编译的而不是发行版自带的?

答案1

当然,只要检查是否dpkg知道即可。

首先检查您正在运行的内核版本。

uname -a
Linux orwell 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux

然后告诉dpkg在数据库中搜索内核镜像文件dpkg

dpkg -S /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64

或者,更好的是,dlocatedlocate包装中使用。dlocate首先从数据库构建一个缓存dpkg,并使用它。所以它很快。

dlocate /boot/vmlinuz-3.2.0-4-amd64
linux-image-3.2.0-4-amd64: /boot/vmlinuz-3.2.0-4-amd64

最后,检查 Debian 档案中是否包含此软件包。

apt-cache policy linux-image-3.2.0-4-amd64

linux-image-3.2.0-4-amd64:
  Installed: 3.2.68-1+deb7u1
  Candidate: 3.2.68-1+deb7u1
  Version table:
 *** 3.2.68-1+deb7u1 0
        500 http://security.debian.org/ wheezy/updates/main amd64 Packages
        100 /var/lib/dpkg/status
     3.2.65-1 0
        500 http://httpredir.debian.org/debian/ wheezy/main amd64 Packages

如果没有,那么它就是一个定制包。当然,如果 dpkg 不知道该映像文件,那么您的内核根本不是软件包的一部分,而是已在本地编译。

注意apt 区分 Debian 存档中的软件包和本地编译的同名软件包之间的区别。我认为它会检查包的 md5sum,但我忘记了它是如何做到这一点的细节。二进制包包含有关哈希的信息,apt-cache show linux-image-3.2.0-4-amd64例如,请参阅 的底部。例如

Package: linux-image-3.2.0-4-amd64
Source: linux
Version: 3.2.68-1+deb7u1
Installed-Size: 105729
[...]
Size: 23483788
MD5sum: f9736f30f8b68ae79b2747d8a710ce28
SHA1: 64bfde903892801dccd04b52b12316901a02cd96
SHA256: 775814b3eff4a964b593c0bdeaac20587a4e3ddb1257a9d2bfcf1e9d3b9bfd15

答案2

至少uname -r会给出内核版本,例如3.18.6.但是,当编译内核时,可以在其中配置并附加一个附加字符串,发行版通常这样做来指示它们自己的补丁级别(破折号后)和风格,例如3.18.6-32-generic.这是一条线索;显然,当您创建自定义内核时使用您自己的字符串可以是另一个。

uname -v给出一个字符串,默认情况下是这样的

#4 SMP PREEMPT Mon Mar 9 13:55:25 EDT 2015

这个数字是任意的,因为它是使用特定源树构建该内核而没有重置该树的次数——当您构建自己的源树时,这可能很有用。 SMP表示多任务(即非实时)内核,PREEMPT 是与调度程序的“抢占模型”相关的另一个配置选项。但这里最大的线索可能是它的建造时间。这可以用于匹配内核本身的修改/更改时间戳,请记住可以更改,例如使用touch.例如,stat在该内核上看起来像这样:

  File: ‘3.19-goldilocksSpecial’
  Size: 6858880         Blocks: 13400      IO Block: 4096   regular file
Device: 801h/2049d      Inode: 3156605     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-02-15 15:32:29.000000000 -0500
Modify: 2015-03-03 13:55:21.000000000 -0500
Change: 2015-03-03 14:02:26.767045553 -0500
 Birth: -

这非常符合Mon Mar 9 13:55:25 EDT 2015

答案3

与其他任何一样

sudo apt-cache policy linux-generic

是通过包管理器安装的版本

uname -r

比较版本

对我来说它

linux-generic:
  Installed: 3.19.0.15.14
  Candidate: 3.19.0.15.14

3.19.0-15-generic

这表明版本相同

答案4

我想说最普遍的正确答案是“不,你不能”。有多种方法可能在某些情况下有所帮助,并且这些方法已经被建议,但这些方法似乎都忽略了这种情况实际上是如何发生的。事实上,如果您使用自定义内核,该内核可以执行任何操作,包括隐藏其存在或显示为不同的内核。

如果您确实正在运行自定义内核并且不知道这一点,我会担心。了解正在使用哪个内核的唯一可靠方法是仔细跟踪您编译和安装的内核。

如果您确实不确定系统正在运行什么内核,或者该内核是从什么来源构建的,或者它来自哪里,我会认真考虑从已知的良好映像重新安装操作系统,并在将来更加小心您尝试和启动的内核来自或使用。

相关内容