1

只是我想清理旧内核的模块。它是“uname -r”,但我需要使用 Python 获取所有内核的此类信息(我已经知道它们的名称并且可以清理内核文件、initramfs 和 System.map)。如果可能的话……

谢谢你。

4

4 回答 4

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))
于 2011-07-19T12:02:29.767 回答
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
于 2011-07-19T11:59:09.157 回答
0

正如@utdemir 指出的那样,没有每个人都必须遵守的内核路径,但是有许多发行版遵循的Fileystem 层次结构标准。根据 FSH,内核文件应该位于/boot并称为 vmlinux/vmlinuz(未压缩/压缩)。

于 2011-07-19T11:59:35.897 回答
0

另一种可能性是尝试一些不同的命令,直到找到返回合理结果的命令。“rpm -qa kernel”应该适用于 RedHat 和其他一些,而“dpkg --list | grep linux-image”应该适用于 ubuntu。可能并不比直接搜索文件系统好多少,无论如何您都必须解析结果。

于 2011-07-19T12:05:00.913 回答