जाँच करें कि इंटरफ़ेस eth0 ऊपर है (कॉन्फ़िगर किया गया है)


30

मुझे एक स्क्रिप्ट के साथ जांचना होगा, कि क्या eth0कॉन्फ़िगर किया गया है। यदि हां, तो स्क्रिप्ट कुछ नहीं करेगी। अन्यथा यह शुरू हो जाएगा wlan0। (मैं नहीं चाहता eth0और दोनों wlan0एक ही समय में हों)।

जाँच करने का सबसे आसान तरीका क्या होगा, क्या eth0पहले से है?

मैं डेबियन व्हीजी का उपयोग कर रहा हूं

स्पष्टीकरण:

मैं न केवल यह जांचना चाहूंगा कि केबल eth0को प्लग किया गया है, बल्कि यह कि इंटरफ़ेस कॉन्फ़िगर किया गया है (अर्थात इसमें या तो स्थिर आईपी सेट है, या इसे डीएचसीपी आईपी प्राप्त हुआ है)। यदि केबल को प्लग किया गया है, लेकिन eth0सही तरीके से कॉन्फ़िगर नहीं किया गया है, तो मैं शुरू करना चाहता हूंwlan0


2
मैं इस बारे में निश्चित नहीं हूं कि मैं क्या कहने जा रहा हूं, लेकिन cat /sys/class/net/ | grep eth0आपको ईजीली पार्सबल डेटा देना चाहिए। आप यह भी कर सकते हैंsudo ethtool eth0 | grep Link
कीवी

जवाबों:


45

आप इसे कई तरीकों से कर सकते हैं। यहाँ एक उदाहरण है:

$ cat /sys/class/net/eth0/operstate
up

5
दुर्भाग्य से, यह गारंटी नहीं देता है कि इंटरफ़ेस पूरी तरह से कॉन्फ़िगर किया गया है। आप /sys/class/net/eth0/carrierएक संकेत के लिए जाँच करने के लिए बिल्ली कर सकते हैं , लेकिन यह अभी भी एक डीएचसीपी पट्टे पर नहीं हो सकता है, आदि
orodbhen

7
ip a show ethX up

यदि कुछ भी प्रदर्शित नहीं होता है तो आपका इंटरफ़ेस नीचे है


यह विधि: "आईपी एक शो एथएक्स अप" और आउटपुट के लिए जाँच करें, पर्याप्त नहीं है
जोशुआ क्लेटन

5
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing 

तो यहाँ हम grepएक सर्वव्यापी ipटूल के stdoutलिए हैं, जिसमें हमारी रुचि का इंटरफ़ेस और "स्टेट यूपी" वाक्यांश शामिल हैं (@Lekensteyn के लिए धन्यवाद, बस थोड़ा अधिक विशिष्टता की आवश्यकता को इंगित करने के लिए UP)। हम तर्क aका संक्षिप्त रूप में उपयोग करते हैं addressऔर यह सिस्टम में सभी कॉन्फ़िगर किए गए नेटवर्क कार्डों की एक सूची प्राप्त करने के लिए पर्याप्त होना चाहिए।

उपयोग करने का एक फायदा ipयह हो सकता है कि यह वास्तव में हर जगह उपलब्ध होना चाहिए - यह है कि मैं आमतौर पर अपने एंड्रॉइड फोन के नेटवर्क उपकरणों को कैसे कॉन्फ़िगर करता हूं, उदाहरण के लिए।

:colonsआंशिक मिलान से बचने के लिए उपयोग किया जाता है - इस तरह से हम के लिए एक मैच की गारंटी eth0के रूप में एक अन्यथा संभव करने का विरोध कियाsomeothereth0 या eth007

शुक्रिया @RaphaelAhrens मुझे शुचिता की ओर ले जाने और मेरा समाधान समझाने के लिए।

संपादित करें:

वर्तमान आवश्यकताओं को संभालने के लिए आप कर सकते हैं:

ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'

ऊपर केवल एक सीआईडीआर आईपी पते प्रिंट होगा यदि आपका लक्ष्य $ifहै उत्तर प्रदेश, प्लग इन है और एक । IPv6 के लिए समाधान केवल मामूली संशोधन के साथ सरल है।

यदि आपको पसंद नहीं है sedतो आप दूसरे के साथ भी इसी तरह के परिणाम प्राप्त कर सकते हैं |pipe ... grepऔर -Aपहले के लिए एक संदर्भ विकल्प जोड़ सकते हैं grep- लेकिन मुझे पसंद है sed


1
आपको समझाना चाहिए कि आप क्या कर रहे हैं। ताकि हर कोई आपके जवाब से लाभ उठा सके।
राफेल अहरेंस

5
यह अपर्याप्त है। UPयदि डिवाइस ऊपर है, तो आउटपुट भी शामिल है, लेकिन कोई केबल कनेक्ट नहीं है 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000:। आप झूठी सकारात्मकता से बचने के लिए डिवाइस को भी निर्दिष्ट कर सकते हैं ip addr show dev eth0:।
लेकेनस्टाइन

0

अन्य तरीके काम नहीं करते हैं, लेकिन यह एक (उबंटू पर कम से कम) करता है:

while true; do
    ip route | grep "linkdown"
    if [ $? -eq 0 ]; then
        sleep 1  # network not yet up
    else
        break   # network up
    fi
done

ip routeडेबियन स्ट्रेच के साथ grep करने के लिए कोई "लिंकडाउन" नहीं है ।
इंगो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.