如何通过内核名称获取内核版本(不是当前内核)
简单来说,我想清理旧的内核模块。可以用“uname -r”来查看当前内核的版本,但我想用Python获取所有内核的信息(我已经知道它们的名字,并且可以清理内核文件、initramfs和System.map)。如果可以做到的话……
谢谢。
4 个回答
0
可能有点简单粗暴,但你可以试着去看看 /boot
这个文件夹:
aix@aix:~$ ls -al /boot/vmlinu[xz]-*
-rw-r--r-- 1 root root 4050848 2010-09-16 19:24 /boot/vmlinuz-2.6.32-24-generic
-rw-r--r-- 1 root root 4050592 2010-10-16 21:37 /boot/vmlinuz-2.6.32-25-generic
-rw-r--r-- 1 root root 4050080 2010-11-24 10:58 /boot/vmlinuz-2.6.32-26-generic
-rw-r--r-- 1 root root 4049888 2010-12-02 04:42 /boot/vmlinuz-2.6.32-27-generic
-rw-r--r-- 1 root root 4052512 2011-01-11 00:27 /boot/vmlinuz-2.6.32-28-generic
-rw-r--r-- 1 root root 4053280 2011-02-11 21:37 /boot/vmlinuz-2.6.32-29-generic
-rw-r--r-- 1 root root 4055488 2011-03-02 01:24 /boot/vmlinuz-2.6.32-30-generic
-rw-r--r-- 1 root root 4055840 2011-04-08 23:26 /boot/vmlinuz-2.6.32-31-generic
-rw-r--r-- 1 root root 4049376 2011-04-20 23:38 /boot/vmlinuz-2.6.32-32-generic
-rw-r--r-- 1 root root 4050464 2011-07-08 02:00 /boot/vmlinuz-2.6.32-33-generic
这里面是我电脑上安装的内核。
另外,如果你使用的是Debian类的系统(比如Ubuntu),你可以运行:
aix@aix:~$ dpkg --list | grep linux-image
ii linux-image-2.6.32-24-generic 2.6.32-24.43 Linux kernel image for version 2.6.32 on x86
ii linux-image-2.6.32-25-generic 2.6.32-25.45 Linux kernel image for version 2.6.32 on x86
ii linux-image-2.6.32-26-generic 2.6.32-26.48 Linux kernel image for version 2.6.32 on x86
ii linux-image-2.6.32-27-generic 2.6.32-27.49 Linux kernel image for version 2.6.32 on x86
ii linux-image-2.6.32-28-generic 2.6.32-28.55 Linux kernel image for version 2.6.32 on x86
ii linux-image-2.6.32-29-generic 2.6.32-29.58 Linux kernel image for version 2.6.32 on x86
ii linux-image-2.6.32-30-generic 2.6.32-30.59 Linux kernel image for version 2.6.32 on x86
ii linux-image-2.6.32-31-generic 2.6.32-31.61 Linux kernel image for version 2.6.32 on x86
ii linux-image-2.6.32-32-generic 2.6.32-32.62 Linux kernel image for version 2.6.32 on x86
ii linux-image-2.6.32-33-generic 2.6.32-33.70 Linux kernel image for version 2.6.32 on x86
ii linux-image-generic 2.6.32.33.39 Generic Linux kernel image
而如果你用的是基于RPM的系统(比如RedHat),你需要用类似这样的命令:
$ rpm -qa kernel
kernel-2.6.18-128.7.1.el5
kernel-2.6.18-128.2.1.el5
kernel-2.6.18-194.17.4.el5
3
uname命令是用来查看当前运行的内核信息的,所以它对你没有帮助。不过,所有的模块都存放在 /lib/modules
这个文件夹里。下面的程序可以把这些模块全部清理掉。
#!/usr/bin/python2
import os
import shutil
moddirs = os.listdir("/lib/modules")
moddirs.remove(os.uname()[2])
for d in moddirs:
shutil.rmtree(os.path.join("/lib/modules", d))