特定のモジュールがLinuxカーネルにロードされているかどうかを確認する方法
特定のモジュールがロード/インストールされているかどうかを判断する方法があるのか興味があります。
$ lsmodはすべてのモジュールをリストします(デバイスドライバーがロードされます)。
モジュール名がポーリングされた場合、trueまたはfalseのブール出力を返すコマンドまたはコマンドを確認する方法はありますか。例えばkeyboard.oが存在する場合はtrue、そうでない場合はfalseを返します。ドライバーの自動更新プログラムを完了するには、このヒントが必要です。
PS:modinfoを試しました。テストDUTでbusyboxクライアントを使用しているので、modinfo以外の選択肢を提供できますか?
かどうか分からない 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
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
私はこれを書いた:
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
を使用する場合は、それだけが機能します。
モジュールが既にロードされている場合、--first-time
フラグによりmodprobe
が失敗します。 --dry-run
(または-n
の省略形)フラグと組み合わせて、Niceテストを作成します。
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
にありますが、rootでない限り$PATH
にはありません。その場合、上記の/usr/sbin/modprobe
をmodprobe
に置き換える必要があります。
より良いアイデアは、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