Подтвердить что ты не робот

Как определить, загружен ли конкретный модуль в ядро ​​linux

Мне просто интересно, есть ли способ определить, загружен/установлен ли какой-либо конкретный модуль.

$lsmod перечисляет все модули (загружен драйвер устройства).

Есть ли способ проверить или команду, которая возвращает true/false boolean output, если имя модуля опрошено. например. if keyboard.o существует return true else false. Мне нужен этот совет, чтобы завершить программу автоматического обновления драйверов.

PS: попробовал modinfo. Я использую клиент busybox в своем тестовом тестировании, поэтому можете ли вы предоставить некоторые альтернативы, кроме modinfo?

4b9b3361

Ответ 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