2012-03-23 13 views
25

में लोड किया गया है, मैं केवल उत्सुक हूं कि यह निर्धारित करने का कोई तरीका है कि कोई विशेष मॉड्यूल लोड/स्थापित है या नहीं।यह निर्धारित करने के लिए कि क्या एक विशिष्ट मॉड्यूल लिनक्स कर्नेल

$ lsmod सभी मॉड्यूल (डिवाइस ड्राइवर लोड) सूचीबद्ध करता है।

क्या मॉड्यूल नाम मतदान होने पर सही या गलत बूलियन आउटपुट लौटने का कोई तरीका है या कोई आदेश है। उदाहरण के लिए। अगर keyboard.o मौजूद है तो सच है और गलत झूठ। मुझे अपने ड्राइवर ऑटो रीफ्रेश प्रोग्राम को पूरा करने के लिए इस टिप की आवश्यकता है।

पीएस: modinfo कोशिश की। मैं अपने परीक्षण में व्यस्त बॉक्स क्लाइंट का उपयोग कर रहा हूं, तो क्या आप modinfo के अलावा कुछ विकल्प दे सकते हैं?

+1

क्या आपके पास grep तक पहुंच है? –

+0

सवाल थोड़ा अस्पष्ट है।क्या आप यह जांचने की कोशिश कर रहे हैं कि क्या ड्राइवर स्मृति में लोड हो गया है या सिस्टम पर स्थापित है? modinfo बाद के साथ मदद करेगा लेकिन पूर्व नहीं। – presto8

उत्तर

19

सुनिश्चित नहीं है कि 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

+1

क्या आप वैकल्पिक सुझाव दे सकते हैं? –

+3

बस एक नोट: 'modinfo' दृष्टिकोण वास्तव में _loaded_ चेक (जैसा कि प्रश्न शीर्षक में) के लिए काम नहीं करता है। यह मॉड्यूल लोड होने के बावजूद जानकारी दिखाता है। – BeeOnRope

17

modinfo module विधि मेरे लिए अच्छी तरह से काम नहीं करता। मैं इस पद्धति है कि वैकल्पिक पद्धति के समान है प्रस्तावित पसंद करते हैं:

#!/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 
+0

मेरे लिए काम नहीं कर रहा है :( – Megharaj

+0

केंद्र 6 में काम नहीं कर रहा है (हमेशा कहते हैं कि मॉड्यूल लोड नहीं होता है) – Anake

+5

'grep -Eq"^$ {MODULE} ";' –

0
!/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 
+0

हालांकि आपका उत्तर अच्छा दिखता है, आपको थोड़ा स्पष्टीकरण शामिल करना चाहिए। .. सादा कोड अच्छा हो सकता है, लेकिन कोड * और * स्पष्टीकरण बेहतर है – Barranka

3

बेहतर विचार एक पार्टी समारोह बनाने के लिए है पहले ही लोड हो चुका है

modprobe -n --first-time $MODULE && echo "Not loaded" || echo "Loaded" 

संपादित करें: 1: @Nobody के रूप में बताया यह भी Loaded प्रिंट अगर मॉड्यूल मौजूद नहीं है यही कारण है कि --dry-run (या आशुलिपि -n) के साथ संयोजन के रूप में झंडा एक अच्छा परीक्षण करता है। हम 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 में नहीं है जब तक कि आप जड़ हैं पर। उस स्थिति में आपको उपरोक्त में /usr/sbin/modprobe के लिए modprobe को प्रतिस्थापित करना होगा।

6

--first-time झंडा modprobe का कारण बनता है मॉड्यूल अगर विफल:

#!/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 के लिए बुलशिट दर्ज करते हैं तो यह दावा करता है कि $ MODULE लोड हो गया है। – Nobody

+0

@Nobody इसे मेरे सिस्टम पर रूट की आवश्यकता नहीं है। – jpath

+1

ओह, क्षमा करें, मैं केवल आधे दाएं (या शायद क्वार्टर-राइट था। आप पर टिप्पणी-अप-मतदाता)। डेबियन पर, सामान्य उपयोगकर्ताओं के लिए मोडप्रोब $ PATH में नहीं है, इसलिए बस अपने आदेश को कॉपी और पेस्ट करना केवल रूट के रूप में काम करता है। लेकिन जब मॉडप्रोब को अपने पूर्ण पथ से कॉल किया जाता है, तो यह सामान्य उपयोगकर्ताओं के लिए निष्पादन योग्य होता है और केवल वास्तविक डालने का ऑपरेशन विफल रहता है, इसलिए आपका समाधान सिद्धांत रूप से काम करता है। मुझे अभी भी लगता है कि पूछताछ/proc/मॉड्यूल अधिक सुंदर है चींटी, लेकिन यह स्वाद का मामला है। अगर मैंने आपका जवाब कम कर दिया होता, तो मैंने अब वोट हटा दिया होगा (लेकिन मैंने नहीं किया)। – Nobody

4

मैंने लिखा इस:

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 का उपयोग करते समय यह एकमात्र नाम है जो काम करेगा।

+2

आप यह सुनिश्चित करने के लिए कि आप मॉड्यूल नाम के केवल भाग से मेल नहीं खा रहे हैं, इसके बजाय आप '^^$ MODULE \>" के लिए मिलान करना चाहेंगे। – jpath