Je suis juste curieux de savoir s'il existe un moyen de déterminer si un module particulier est chargé/installé.
$ lsmod liste tous les modules (pilote de périphérique chargé).
Existe-t-il un moyen de vérifier ou une commande qui renvoie une sortie true/false booléenne si un nom de module est interrogé. pour par exemple. si keyboard.o existe, retourne vrai sinon faux. J'ai besoin de cette astuce pour compléter mon programme d'actualisation automatique du pilote.
PS: essayé modinfo. J'utilise le client busybox dans mon DUT de test, alors pouvez-vous donner d'autres alternatives que modinfo?
je ne sais pas si modinfo modname
et vérifier $?
fonctionneront pour vous, juste une suggestion.
/tmp$ Sudo modinfo e1000
/tmp$ echo $?
0
/tmp$ Sudo modinfo keyboard
ERROR: modinfo: could not find module keyboard
/tmp$ echo $?
1
sinon vous aussi grep /proc/modules
La méthode modinfo module
ne fonctionne pas bien pour moi. Je préfère cette méthode qui est similaire à la méthode alternative proposée:
#!/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
L'indicateur --first-time
entraîne l'échec de modprobe
si le module est déjà chargé. Cela, en conjonction avec le drapeau --dry-run
(ou le raccourci -n
), fait un test de Nice:
modprobe -n --first-time $MODULE && echo "Not loaded" || echo "Loaded"
Edit 1: Comme @Nobody l’a fait remarquer, ceci affiche également Loaded
si le module n’existe pas. Nous pouvons résoudre ce problème en le combinant avec modinfo
:
modinfo $MODULE >/dev/null 2>/dev/null &&
! modprobe -n --first-time $MODULE 2>/dev/null &&
echo "Loaded" || echo "Not loaded"
Edit 2: Sur certains systèmes, modprobe
habite /usr/sbin
, qui ne figure pas dans $PATH
sauf si vous êtes root. Dans ce cas, vous devez remplacer modprobe
par /usr/sbin/modprobe
ci-dessus.
J'ai écrit ceci:
MODULE=snd_aloop # for example
test -n "$(grep -e "^$MODULE " /proc/modules)" && echo "Loaded" || echo "Not loaded"
Il vérifie /proc/modules
. Si le module est mentionné ici, il est supposé être chargé, sinon pas.
Les autres m'ont semblé trop longs (l'autre court a besoin de racine, ce n'est pas le cas). Bien sûr, il est juste écrit ce qui a déjà été mentionné comme "alternatives".
Attention: modprobe
accepte certaines variantes de noms de modules autres que le principal répertorié dans /proc/modules
. Par exemple, charger snd-aloop
fonctionne, mais le module s'appelle snd_aloop
et est répertorié comme tel dans /proc/modules
. Lorsque vous utilisez rmmod
, c'est également le seul nom qui fonctionne.
La meilleure idée est de créer une fonction 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
!/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