ifconfig
इस तरह के FreeBSD और OpenBSD के रूप में ऑपरेटिंग सिस्टम पर कमांड ऑपरेटिंग सिस्टम के बाकी के साथ लाइन में अद्यतन किया गया था। यह आजकल उन ऑपरेटिंग सिस्टम पर सभी प्रकार के नेटवर्क इंटरफ़ेस सेटिंग्स को कॉन्फ़िगर कर सकता है, और नेटवर्क प्रोटोकॉल की एक श्रृंखला को संभाल सकता है। बीएसडी ioctl()
इन चीजों के लिए सहायता प्रदान करते हैं।
लिनक्स की दुनिया में ऐसा नहीं हुआ। आज, तीन ifconfig
आज्ञाएँ हैं:
ifconfig
से जीएनयू inetutilsjdebp% inetutils-ifconfig -l
enp14s0 enp15s0 लो
jdebp% inetutils-ifconfig लो
लो लिंक एनकैप: लोकल लूपबैक
inet addr: 127.0.0.1 Bcast: 0.0.0.0 मास्क: 255.0.0.0
UP LOOPBACK रनिंग MTU: 65536 मीट्रिक: 1
आरएक्स पैकेट: 9087 त्रुटियां: 0 गिरा: 0 ओवररन: 0 फ्रेम: 0
TX पैकेट: 9087 त्रुटियां: 0 गिरा: 0 ओवररन: 0 वाहक: 0
टकराव: 0 txqueuelen: 1000
आरएक्स बाइट्स: 51214341 TX बाइट्स: 51214341
jdebp%
-
ifconfig
से नेट -3 नेट उपकरण jdebp% ifconfig -l
ifconfig: विकल्प --help 'उपयोग जानकारी देता है।-l' not recognised.
ifconfig:
jdebp% ifconfig लो
lo: झंडे = 73 <UP, LOOPBACK, RUNNING> mtu 65536
inet 127.0.0.1 नेटमास्क 255.0.0.0
inet6 :: 1 प्रीफिक्सलीन 128 स्कोपिड 0x10 <होस्ट>
inet6 :: 2 प्रीफिक्सलीन 128 स्कोपिड 0x80 <कंपेटिटर्स, ग्लोबल>
inet6 fe80 :: प्रीफिक्सलेन 10 स्कोपिड 0x20 <लिंक>
लूप txqueuelen 1000 (स्थानीय लूपबैक)
RX पैकेट 9087 बाइट 51214341 (48.8 MiB)
आरएक्स त्रुटियां 0 गिरा 0 ओवररन 0 फ्रेम 0
TX पैकेट 9087 बाइट्स 51214341 (48.8 MiB)
TX त्रुटियां 0 गिरा 0 ओवररन 0 वाहक 0 टकराव 0
jdebp%
-
ifconfig
nosh टूलसेट से (संस्करण 1.40 का) jdebp% ifconfig -l
enp14s0 enp15s0 लो
jdebp% ifconfig लो
आरे
लिंक लूपबैक चल रहा है
लिंक पता 00: 00: 00: 00: 00: 00 bdaddr 00: 00: 00: 00: 00: 00
inet4 पता 127.0.0.1 प्रीफिक्सलेन 8 bdaddr 127.0.0.1
inet4 पता 127.53.0.1 प्रीफिक्सलेन 8 bdaddr 127.255.255.255
inet6 पता :: 2 स्कोप 0 उपसर्ग 128
inet6 पता fe80 :: स्कोप 1 प्रीफिक्सलेन 10
inet6 पता :: 1 स्कोप 0 उपसर्ग 128
jdebp% sudo ifconfig lo inet4 127.1.0.2 उपनाम
jdebp% sudo ifconfig lo inet6 :: 3/128 उपनाम
jdebp% ifconfig लो
आरे
लिंक लूपबैक चल रहा है
लिंक पता 00: 00: 00: 00: 00: 00 bdaddr 00: 00: 00: 00: 00: 00
inet4 पता 127.0.0.1 प्रीफिक्सलेन 8 bdaddr 127.0.0.1
inet4 पता 127.1.0.2 प्रीफ़िक्सल 32 bdaddr 127.1.0.2
inet4 पता 127.53.0.1 प्रीफिक्सलेन 8 bdaddr 127.255.255.255
inet6 पता :: 3 स्कोप 0 प्रीफिक्सलेन 128
inet6 पता :: 2 स्कोप 0 उपसर्ग 128
inet6 पता fe80 :: स्कोप 1 प्रीफिक्सलेन 10
inet6 पता :: 1 स्कोप 0 उपसर्ग 128
jdebp%
जैसा कि आप देख सकते हैं, GNU inetutils और NET-3 नेट-टूल्स की ifconfig
कुछ चिह्नित कमियां हैं, IPv6 के संबंध में, कई एड्रेस वाले इंटरफेस के संबंध में, और कार्यक्षमता के संबंध में -l
।
IPv6 समस्या कुछ टूल्स में स्वयं गायब कोड में है। लेकिन मुख्य में यह इस तथ्य के कारण होता है कि लिनक्स ioctl()
इंटरफ़ेस के माध्यम से आईपीवी 6 कार्यक्षमता प्रदान नहीं करता है (जैसा कि अन्य ऑपरेटिंग सिस्टम करते हैं) । यह केवल कार्यक्रमों को नेटवर्किंग ioctl()
s के माध्यम से IPv4 पतों को देखने और हेरफेर करने देता है ।
इसके बजाय लिनक्स एक अलग इंटरफ़ेस के माध्यम से send()
और recv()
एक विशेष, और कुछ हद तक अजीब, सॉकेट्स के परिवार को यह कार्यक्षमता प्रदान करता है AF_NETLINK
।
जीएनयू और NET -3 ifconfig
रों सकता है इस नए एपीआई का उपयोग करने के लिए समायोजित किया गया है। ऐसा करने के खिलाफ तर्क यह था कि यह अन्य ऑपरेटिंग सिस्टम के लिए पोर्टेबल नहीं था, लेकिन ये कार्यक्रम पहले से ही पोर्टेबल नहीं थे, वैसे भी यह एक तर्क से ज्यादा नहीं था।
लेकिन वे समायोजित नहीं थे, और इस दिन के रूप में बने रहे। (कुछ लोगों ने वर्षों में विभिन्न बिंदुओं पर उन पर काम किया, लेकिन सुधार, कहने के लिए दुख की बात है, इसे कार्यक्रमों में कभी नहीं बनाया। उदाहरण के लिए: बर्न एक्केनफेल्स ने कभी भी एक पैच को स्वीकार नहीं किया, जो नेट -3 नेट-टूल में कुछ नेटलिंक एपीआई क्षमता को जोड़ता है । ifconfig
, पैच लिखे जाने के 4 साल बाद।)
इसके बजाय, कुछ लोगों ने टूलसेट को पूरी तरह से एक ip
कमांड के रूप में पुनर्निवेशित किया , जिसने नए लिनक्स एपीआई का उपयोग किया, एक अलग वाक्यविन्यास था, और एक फैशनेबल -स्टाइल इंटरफ़ेस के पीछे कई अन्य कार्यों को जोड़ा ।command subcommand
मुझे ifconfig
FreeBSD की कमांड-लाइन सिंटैक्स और आउटपुट शैली की आवश्यकता थी ifconfig
(जो न तो GNU है और न ही NET-3 ifconfig
है, और जो ip
निश्चित रूप से नहीं है)। तो मैंने एक लिखा। सबूत के तौर पर कि कोई ऐसा लिख सकता है जो ifconfig
लिनक्स पर नेटलिंक एपीआई का उपयोग करता है, यह करता है।
तो आप के बारे में प्राप्त ज्ञान ifconfig
, जैसे कि आप क्या उद्धृत करते हैं, वास्तव में किसी भी अधिक सच नहीं है। अब यह कहना असत्य है कि " ifconfig
नेटलिंक का उपयोग न करें।" दो को कवर करने वाला कंबल तीन को कवर नहीं करता है।
यह कहना हमेशा असत्य रहा है कि "नेटलिंक अधिक कुशल है"। ifconfig
नेटलिंक एपीआई और एपीआई के बीच दक्षता के लिए काम करने वाले कार्यों के लिए , इसमें बहुत कुछ नहीं ioctl()
है। किसी भी दिए गए कार्य के लिए एपीआई कॉल की संख्या बहुत अधिक है।
वास्तव में, प्रत्येक एपीआई कॉल नेटलिंक मामले में दो सिस्टम कॉल है, जैसा कि ioctl()
सिस्टम में एक के विपरीत है। और यकीनन नेटलिंक एपीआई का नुकसान यह है कि एक भारी इस्तेमाल की जाने वाली प्रणाली पर यह स्पष्ट रूप से उपकरण की संभावना को शामिल करता है जिससे एपीआई कॉल के परिणाम के बारे में सूचित करते हुए एक पावती संदेश प्राप्त नहीं होता है।
इसके अलावा, यह कहना असत्य है कि यह ip
GNU और NET-3 ifconfig
s से "अधिक बहुमुखी" है क्योंकि यह netlink का उपयोग करता है । यह अधिक बहुमुखी है क्योंकि यह अधिक कार्य करता है, एक बड़े कार्यक्रम में चीजें करता है जो एक के अलावा अन्य कार्यक्रमों के साथ करेगा ifconfig
। यह केवल एपीआई के संकेत से अधिक बहुमुखी नहीं है कि यह उन अतिरिक्त कार्यों को करने के लिए आंतरिक रूप से उपयोग करता है। इस बारे में API में कुछ भी अंतर्निहित नहीं है। एक एक सब-इन-वन उपकरण है जो FreeBSD इस्तेमाल किया लिख सकता है ioctl()
एपीआई, उदाहरण के लिए राज्य, और समान रूप से अच्छी तरह से है कि यह "अधिक बहुमुखी" की तुलना में अलग-अलग ifconfig
, route
, arp
, और ndp
आदेशों।
एक लिख सकता है route
, arp
और ndp
लिनक्स के लिए आदेश होते हैं जो नेटलिंक एपीआई, भी इस्तेमाल किया।
आगे की पढाई
ip
अधिक बहुमुखी बनाता है , क्योंकि सभी प्रकार की शांत विशेषताएं लिनक्स पर ioctls का उपयोग करने के लिए बस असंभव है (क्योंकि ioctls वहाँ नहीं हैं और संभावना कभी नहीं होगी)।