Как определить, загружен ли конкретный модуль в ядро linux
Мне просто интересно, есть ли способ определить, загружен/установлен ли какой-либо конкретный модуль.
$lsmod перечисляет все модули (загружен драйвер устройства).
Есть ли способ проверить или команду, которая возвращает true/false boolean output, если имя модуля опрошено. например. if keyboard.o существует return true else false. Мне нужен этот совет, чтобы завершить программу автоматического обновления драйверов.
PS: попробовал modinfo. Я использую клиент busybox в своем тестовом тестировании, поэтому можете ли вы предоставить некоторые альтернативы, кроме modinfo?
Ответы
Ответ 1
не уверен, что если modinfo modname
и проверка $?
будут работать для вас, просто предложение.
/tmp$ sudo modinfo e1000
/tmp$ echo $?
0
/tmp$ sudo modinfo keyboard
ERROR: modinfo: could not find module keyboard
/tmp$ echo $?
1
альтернативно вы также grep /proc/modules
Ответ 2
Метод modinfo module
не работает для меня. Я предпочитаю этот метод, аналогичный предложенному альтернативному методу:
#!/bin/sh
MODULE="$1"
if lsmod | grep "$MODULE" &> /dev/null ; then
echo "$MODULE is loaded!"
exit 0
else
echo "$MODULE is not loaded!"
exit 1
fi
Ответ 3
Я написал это:
MODULE=snd_aloop # for example
test -n "$(grep -e "^$MODULE " /proc/modules)" && echo "Loaded" || echo "Not loaded"
Он проверяет /proc/modules
. Если модуль упоминается там, предполагается, что он загружен, в противном случае нет.
Другие казались слишком длинными для меня (другой короткий требует корень, это не так). Конечно, он просто написал то, что уже упоминалось как "альтернативы".
Внимание: modprobe
принимает некоторые варианты имен модулей, кроме первичных, перечисленных в /proc/modules
. Например, загрузка snd-aloop
работает, но модуль называется snd_aloop
и указан как таковой в /proc/modules
и при использовании rmmod
, который также является единственным именем, которое будет работать.
Ответ 4
Флаг --first-time
вызывает отказ modprobe
, если модуль уже загружен. Это в сочетании с флагом --dry-run
(или стенограммы -n
) делает хороший тест:
modprobe -n --first-time $MODULE && echo "Not loaded" || echo "Loaded"
Изменить 1: Так как @Nobody указал, что это также печатает Loaded
, если модуль не существует. Мы можем исправить это, объединив его с modinfo
:
modinfo $MODULE >/dev/null 2>/dev/null &&
! modprobe -n --first-time $MODULE 2>/dev/null &&
echo "Loaded" || echo "Not loaded"
Изменить 2: В некоторых системах modprobe
живет в /usr/sbin
, который не находится в $PATH
, если вы не являетесь пользователем root. В этом случае вы должны подставить modprobe
для /usr/sbin/modprobe
в приведенном выше примере.
Ответ 5
Лучше всего создать функцию bash:
#!/bin/sh
function checkModule(){
MODULE="$1"
if lsmod | grep "$MODULE" &> /dev/null ; then
echo "$MODULE is loaded!"
return 0
else
echo "$MODULE is not loaded!"
return 1
fi
}
checkModule
if $?; then
#do somthing
fi
Ответ 6
!/bin/sh
# Module
MODULE="scsi_dh_rdac"
#Variables check if module loaded or not
MODEXIST=/sbin/lsmod | grep "$MODULE"
if [ -z "$MODEXIST" ]; then
/sbin/modprobe "$MODULE" >/dev/null 2>&1
fi
Ответ 7
module list
Возвращает:
Currently Loaded Modulefiles:
1) /coverm/0.3.0 2) /parallel/20180222