Как получить версию ядра, используя имя ядра (не текущее ядро) - PullRequest
1 голос
/ 19 июля 2011

Просто я хочу почистить старые модули ядра.Это "uname -r", но мне нужно получить такую ​​информацию для всех ядер с Python (я уже знаю их имена и могу чистить файлы ядра, initramfs и System.map).если это возможно ...

Спасибо.

Ответы [ 4 ]

3 голосов
/ 19 июля 2011

Команда 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))
0 голосов
/ 19 июля 2011

Другой возможностью было бы попробовать несколько разных команд, пока вы не найдете ту, которая возвращает разумные результаты. «rpm -qa kernel» должно работать для RedHat и некоторых других, в то время как «dpkg --list | grep linux-image» должно справиться с Ubuntu Вероятно, не намного лучше, чем поиск в файловой системе напрямую, и вам все равно придется анализировать результат.

0 голосов
/ 19 июля 2011

Как указал @utdemir, не существует ни одного пути к ядру, которому должен соответствовать каждый, но есть Стандарт иерархии файловой системы , которому следуют многие дистрибутивы.Согласно FSH, файлы ядра должны находиться в / boot и называться vmlinux / vmlinuz (несжатый / сжатый).

0 голосов
/ 19 июля 2011

Возможно, немного грубовато, но вы можете попробовать заглянуть в /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
...