@ user3439894 ने इस प्रश्न के भाग का उत्तर दिया है कि ईथरनेट को कैसे निष्क्रिय किया जाए और इसे नीचे कैसे रखा जाए; मैं इस सवाल का समाधान करना चाहता हूं कि ifconfig en0 down
ऐसा क्यों नहीं किया गया।
मूल कारण यह है कि macOS में नेटवर्क कॉन्फ़िगरेशन के दो अलग-अलग स्तर होते हैं: लाइव स्टेट (जो ifconfig en0 down
बदलता है) और "कॉन्फ़िगरेशन डेटाबेस" जो सिस्टम वरीयताएँ और / या networksetup
कमांड के नेटवर्क फलक में बनाई गई सेटिंग्स से मेल खाती है । और एक "कॉन्फ़िगरेशन डेमॉन" ( configd
) है जिसका काम यह है कि डेटाबेस जो कहता है कि यह होना चाहिए मैच के लिए लाइव नेटवर्क स्थिति को समायोजित करना।
इस तरह से काम करने का कारण यह है कि कॉन्फ़िगरेशन डेटाबेस लाइव राज्य की तुलना में अधिक लचीले और सुसंगत तरीके से नेटवर्क सेटिंग्स का वर्णन करता है। उदाहरण के लिए, कॉन्फ़िगरेशन डेटाबेस में कई समूह सेटिंग्स ("स्थान") हो सकते हैं और आसानी से उनके बीच स्विच कर सकते हैं, एक ही ऑपरेशन में सब कुछ समायोजित कर सकते हैं - इंटरफ़ेस स्थिति, आईपी सेटिंग्स, रूटिंग, डीएनएस आदि।
वैसे भी, जब आप उपयोग करते हैं ifconfig en0 down
, तो आपने लाइव राज्य के बीच एक असंगतता पैदा की है और जो कॉन्फ़िगरेशन डेटाबेस कहता है वह राज्य होना चाहिए। configd
इसे तुरंत नोटिस नहीं किया जाएगा, क्योंकि यह उस तरह की घटना नहीं configd
है (ईथरनेट को प्लग इन या अनप्लग्ड, वाईफाई नेटवर्क में शामिल होने या गिराए जाने आदि) के लिए देखा जाता है। लेकिन कुछ समय बाद, कोई चीज जाग जाएगी configd
और यह हो सकता है कि इंटरफ़ेस स्थिति को वापस उसी स्थिति में लाए, जो कॉन्फ़िगरेशन डेटाबेस कहता है कि यह होना चाहिए।
तो, समाधान नेटवर्क वरीयताएँ या का उपयोग करने के लिए है networksetup
। ये दोनों कॉन्फिग डेटाबेस में बदलाव करते हैं, फिर जागते हैं configd
इसलिए यह लाइव स्टेट में परिवर्तन लागू करेगा।
sudo networksetup -setnetworkserviceenabled Ethernet off
अलग व्यवहार करता है ?