44

特定のモジュールがロード/インストールされているかどうかを判断する方法はありますか?

$ lsmodは、すべてのモジュール(ロードされたデバイスドライバー)を一覧表示します。

モジュール名がポーリングされた場合にtrue/falseのブール出力を返すチェックまたはコマンドはありますか。たとえば。Keyboard.oが存在する場合はtrueを返し、そうでない場合はfalseを返します。ドライバーの自動更新プログラムを完了するには、このヒントが必要です。

PS:modinfoを試しました。テストDUTでbusyboxクライアントを使用しているので、modinfo以外の代替手段を提供できますか?

4

9 に答える 9

36

この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
于 2012-12-21T17:55:28.920 に答える
26

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

于 2012-03-23T20:13:34.470 に答える
12

モジュールがすでにロードされている場合、フラグは失敗します--first-timemodprobeこれを--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その場合、上記の代わりmodprobeに使用する必要が/usr/sbin/modprobeあります。

于 2015-05-18T19:50:43.153 に答える
9

私はこれを書いた:

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する場合は、それが機能する唯一の名前でもあります。

于 2016-11-15T16:16:29.417 に答える
5

より良いアイデアは、bash関数を作成することです。

#!/bin/sh
function moduleExist(){
  MODULE="$1"
  if lsmod | grep "$MODULE" &> /dev/null ; then
    return 0
  else
    return 1
  fi
}


if moduleExist "module name"; then
  #do somthing
fi
于 2014-09-27T08:16:55.633 に答える
5

特定のモジュールが実際にロードされているかどうかを確認する簡単な方法:

cat /proc/modules | grep -c nfnetlink

どの出力

2

これ2(TWO)は、モジュールがロードされていることを意味します。なしの実際の出力に-cは、MODULENAMEでロードされたすべてのモジュールが表示されます-MODULENAME-cを含む行をカウントします。したがって、0出力として(ZERO)行がある場合、モジュールはロードされません

于 2020-10-05T21:25:54.707 に答える
2
 !/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
于 2014-05-15T20:27:48.020 に答える
0
module list 

戻り値:

Currently Loaded Modulefiles:
  1) /coverm/0.3.0        2) /parallel/20180222
于 2019-10-22T04:15:06.820 に答える
0
grep -wEq "^${module%.o}" /proc/modules

あなたが要求するかどうかにかかわらず、trueを返します(たとえば、ifで使用できますkeyboardkeyboard.o

于 2020-12-21T20:14:18.627 に答える