ईथरनेट और वाई-फाई इंटरफेस के लिए लिनक्स मशीनों पर नामकरण कन्वेंशन मानक


12

लिनक्स मशीन पर ईथरनेट और वाई-फाई इंटरफेस के लिए नामकरण सम्मेलन मानक क्या है ?

हम एक उपकरण विकसित कर रहे हैं, जिसमें केवल लिनक्स मशीन के ईथरनेट और वाई-फाई इंटरफेस और इसकी वर्तमान स्थिति को दिखाना चाहिए

उदाहरण के लिए, नीचे मेरे लिनक्स (उबंटू) मशीन पर नेटवर्क इंटरफेस (भौतिक और आभासी दोनों) की सूची है:

docker0, enp0s25, lo,wlp3s0

जब मैं उपकरण चलाता हूं, तो नीचे मिलने वाला परिणाम है:

enp0s25, wlp3s0

हमने तर्क के साथ कोड लिखा है कि सभी ईथरनेट इंटरफेस हमेशा पत्र के साथ शुरू होते हैं eऔर वाई-फाई इंटरफेस हमेशा पत्र से शुरू होते हैं w

क्या तर्क सही है? यदि नहीं, तो हम इसे कैसे संबोधित कर सकते हैं?



मैं iwconfigदेखूंगा कि अन्य लोगों के वाईफाई इंटरफेस को कैसे फ़िल्टर किया जाता है।
पैट्रिक मेव्ज़ेक

1
क्या कोई कारण है कि आप lshw की तरह कुछ नहीं देखेंगे? विशेष रूप से lshw -class networkशायद की सामग्री का निरीक्षण करें ? सब कुछ है कि देखो के लिए है capabilities: ethernet physical? संभवतः कुछ अन्य क्षमताओं के लिए भी देखें?
Zoredache

@Dirkt द्वारा उठाए गए फ्रेम चैलेंज से निपटने के लिए, एक बेहतर सवाल यह होगा: "मुझे लिनक्स (या macOS, या अन्य ...) पर नेटवर्क इंटरफ़ेस का प्रकार कैसे मिलेगा?"
रोजर लिप्सकॉम्ब

जवाबों:


40

नेटवर्क इंटरफेस को कुछ भी नाम दिया जा सकता है, इसलिए कोई फर्क नहीं पड़ता कि आप क्या करते हैं, आप उन स्थितियों में भाग लेंगे जहां (1) एक "भौतिक" नेटवर्क इंटरफ़ेस है जिसमें एक नाम है जो आपके पैटर्न से मेल नहीं खाता है, या (2) एक है "भौतिक" नेटवर्क इंटरफ़ेस जो आपके पैटर्न से मेल खाएगा।

उस के शीर्ष पर, यदि मैं आपके टूल का उपयोगकर्ता था, तो जिस क्षण आपका टूल मुझे कुछ ऐसा करने की अनुमति नहीं देगा, क्योंकि मेरे पास एक नेटवर्क इंटरफ़ेस है जो "वर्चुअल" है, हालांकि व्यावहारिक उद्देश्यों के लिए इस पर विचार किया जाना चाहिए " भौतिक "मेरे सेटअप में, मैं आपके ऐप पर ज़ोर से और ज़ोर से कोसना शुरू कर दूंगा, और फिर कभी इसका उपयोग नहीं करूंगा।

भौतिक और आभासी नेटवर्क इंटरफेस सभी साझा करते हैं एक आम एपीआई एक चीज है जो लिनक्स को वास्तव में लचीला बनाता है। कृपया अपने उपयोगकर्ता को दाईं ओर करने की कोशिश न करें, और उसे या उससे दूर ले जाएं। आपके उपयोगकर्ता आपको धन्यवाद देंगे।


11
आपने वास्तव में इस सवाल का जवाब नहीं दिया है; आपने प्रश्न के पृष्ठभूमि संदर्भ को चुनौती देने वाले 3 पैराग्राफ खर्च किए हैं। जबकि मुझे पता है कि फ्रेम चैलेंज के उत्तर एक बात है, यह उन मामलों में से एक की तरह महसूस नहीं करता है ... खासकर जब से user4556274 ने पूछे गए सवाल का संक्षिप्त जवाब दिया
माइक ओउंसवर्थ

18
@MikeOunsworth: समस्या यह है कि user4556274 का उत्तर सामान्य मामले में काम नहीं करता है, यह केवल तभी काम करता है यदि इंटरफ़ेस नाम वास्तव में प्रेडिक्टेबल इंटरफ़ेस नाम हैं। जिसे एक साधारण ip link set ... name ...बदल सकता है। और हां, मैं खुद ही पूर्वानुमानित इंटरफ़ेस नाम सूचीबद्ध कर सकता था। मूल प्रश्न का उत्तर है "कृपया इसे इस तरह न करें"। कोई फर्क नहीं पड़ता कि आप इसके बारे में कैसे जाते हैं, यह काम नहीं करेगा।
dirkt

@ fpmurphy1 नहीं, मुझे लगता है कि उसका मतलब है कि अनुमानित इंटरफ़ेस नाम। इससे कोई फर्क नहीं पड़ता कि यह प्रणालीगत, पारंपरिक (ethn) है, आपकी कंपनी के विशिष्ट सम्मेलनों या किसी भी अन्य मानकों से, जो नामों का अनुमान लगाते हैं
slebetman

12
@MikeOunsworth: इसका उत्तर बहुत पहले पैराग्राफ के पहले ही वाक्य के पहले उप-खंड में है: "नेटवर्क इंटरफेस को कुछ भी नाम दिया जा सकता है [...]" इसलिए, जो ओपी के बारे में पूछ रहा है वह असंभव है और संभवतः नहीं किया जा सकता है। । आप एक नामकरण सम्मेलन मानक के आधार पर एक नेटवर्क इंटरफ़ेस के प्रकार का पता नहीं लगा सकते हैं, क्योंकि कोई नामकरण सम्मेलन मानक नहीं है और कोई भी अपने इंटरफेस को कुछ भी नाम दे सकता है जो वे चाहते हैं। उदाहरण के लिए, मेरे पुराने लिनक्स रूटर पर, मैं रंग का स्टिकर पीठ पर सिर, और शारीरिक ईथरनेट इंटरफेस के नाम थे red, blueऔर green
जॉर्ग डब्ल्यू मित्तग

1
@ JörgWMittag, निश्चित रूप से आप एक मानक के आधार पर उनका पता लगा सकते हैं, यदि आप जानते हैं कि मानक का उपयोग किया जाता है (और आप एक उम्मीद कर रहे हैं कि पहली बार में नाम में उस जानकारी को निर्यात करता है)। हम जानते हैं कि systemd के पास नेटवर्क इंटरफ़ेस के नामकरण के लिए एक मानक है , इसलिए इसका कोई उपयोग नहीं होता है।
21

27

सिस्टमड प्रेडिक्टेबल इंटरफ़ेस नामों के लिए , उपसर्गों को इसमें देखा जा सकता है udev-builtin-net_id.c:

* Two character prefixes based on the type of interface:
*   en — Ethernet
*   ib — InfiniBand
*   sl — serial line IP (slip)
*   wl — wlan
*   ww — wwan

ethXनामकरण की पारंपरिक शैली और नए सिस्टमडैम नामकरण दोनों के लिए , एक प्रारंभिक अक्षर किसी भी स्वचालित रूप से गति नाम के लिए ईथरनेट इंटरफ़ेस होना चाहिए। सभी वाईफाई इंटरफेस को दोनों योजनाओं में w से शुरू होना चाहिए , हालांकि w से शुरू होने वाले सभी इंटरफेस में वाईफाई नहीं होगा।

इस उपकरण का एक मनमाना पर्यावरण, टिप्पणी उपयोगकर्ताओं को ऐसी [के रूप में मनमाने ढंग से नाम, साथ Linux सिस्टम पर इंटरफेस का नाम बदलने सकता है कि (बल्कि सिर्फ आंतरिक वातावरण जिसमें आप नियंत्रित रूप से) में काम करने के लिए है, तो wan0, lan0, lan1, dmz0] प्रारंभिक अक्षरों के बारे में कोई धारणा टूट जाएगा जो ।


7
और हम में से कुछ कट्टर systemd refuseniks हैं।
क्राइसिस -ऑन स्ट्राइक-

1
ध्यान दें कि यह समाधान biosdevnameइंटरफ़ेस के नामकरण के लिए उपयोग किए जाने वाले सिस्टम पर काम नहीं करेगा , जहां ईथरनेट इंटरफ़ेस का नाम दिया जा सकता है p3p7। यह पद्धति नए सिस्टमड प्रेडिक्टेबल नामों का पूर्ववर्ती है और हालांकि अब यह आम डिस्ट्रोस पर पदावनत हो गया है, फिर भी कई सिस्टम होंगे जो इसे कुछ साल पहले डिफ़ॉल्ट होने पर उठाते थे।
11

systemd मदद से मेरे ईथरनेट इंटरफेस में से एक को 'rename3' कहता है। कौन सा यह अलग-अलग हो सकता है, आह :(
user1908704

1
@ user1908704: आमतौर पर इसका अर्थ है कि udv को एक ही नाम कई इंटरफेस को देने के लिए कहा गया था। (शायद आपके पास /etc/udev/rules.d में एक पुराना ऑटो-जेनरेट किया गया "लगातार नाम" फ़ाइल है।) ने कहा, नाम बदलने की प्रक्रिया v187 में पूरी तरह से परमाणु (या तो सफल या रोलबैक) और rename%uप्रारूप में तय की गई थी । t 2012 के बाद से स्रोत कोड में मौजूद था। मैं आपके सॉफ़्टवेयर से छह साल के आउट-डेट पर आहें भरना चाहूंगा।
15:16 बजे user1686

1
@ ग्रेविटी यह उबुन्टु 18.04 है। यह पता चलता है कि विशेष मदरबोर्ड में एक ही एसीपीआई प्रविष्टि के साथ दो एनआईसी होते हैं, जिसके परिणामस्वरूप दोनों एनो 1 होते हैं। चूँकि ऐसा नहीं हो सकता है, उनमें से एक को 'rename3' कहा जाता है। मैंने पूरी तरह से इस तर्क पर काम नहीं किया है कि दौड़ कौन जीतता है, लेकिन कोई भी बदलाव प्रतियोगिता को खराब कर सकता है और दूसरे का नाम बदल सकता है।
user1908704

8

नामकरण परंपरा है कि लैन इंटरफेस नामित कर रहे हैं eth0, eth1... और कहा कि WLAN इंटरफेस नाम हैं wlan0, wlan1...

आप जो देख रहे हैं वह तथाकथित "अनुमानित नाम" है जिसे सिस्टमड ने पेश किया है। व्यवहार में, वे पूर्वानुमान के अनुसार कुछ भी हैं, और वे तब भी बदल सकते हैं जब हार्डवेयर को बदल दिया जाता है, जो कि वास्तव में समस्या है जिससे वे बचने वाले हैं।

एक अनुमान के लिए शुरुआत पत्र काफी अच्छा हो सकता है। कुछ इंटरफेस, विशेष रूप से WLAN, में संकेत हैं /sys/class/net/*/uevent:

DEVTYPE=wlan

दुर्भाग्य से, DEVTYPEलैन इंटरफेस के लिए ऐसा नहीं है।


2
डिवाइस का नाम तब बदलता है जब हार्डवेयर परिवर्तन समस्या नहीं होती है, जो अनुमान लगाने योग्य इंटरफ़ेस नाम से बचने की कोशिश कर रहा है। जब हार्डवेयर अपरिवर्तित रहता है, तो अनुमानित इंटरफ़ेस नाम नाम परिवर्तन से बचता है । यह एक समस्या है जब हार्डवेयर उपकरणों को यादृच्छिक क्रम में पता लगाया जाता है।
जोहान मायरेन

@ JohanMyréen यह गलत है: "... कि वे (इंटरफ़ेस नाम) हार्डवेयर के जुड़ने या हटाए जाने पर भी स्थिर रहें" freedesktop.org/wiki/Software/systemd/…
RalfFriedl

पूर्वानुमेय इंटरफ़ेस नामों को शुरू करने की प्रेरणा यह थी कि जांच निर्धारित नहीं है और "नाम" eth0 "," eth1 "और इसलिए अब नियत नहीं किया गया है और यह बहुत अच्छी तरह से हो सकता है कि" eth0 "अपने बूट पर समाप्त होता है अगले पर "eth1"। यह एक बोनस है अगर अनुमानित नाम हार्डवेयर परिवर्तन से बच सकते हैं, लेकिन यह उनके लिए प्राथमिक कारण नहीं था।
जोहान मायरेन

1
जीत कुछ खो देते हैं - कुछ परिदृश्यों में, यह बहुत ही वांछनीय है यदि परिवर्तित हार्डवेयर मज़बूती से एक ही "नामकरण स्लॉट" में क्लिक करता है :)
रैकबैंडबॉमनमैन

@ JohanMyréen मैक या कुछ अन्य गुणों के आधार पर इंटरफ़ेस नाम निर्दिष्ट करने की पुरानी योजना नए नामों की परेशानी के बिना इंटरफेस को जोड़ते समय अधिक विश्वसनीय काम करती थी।
राल्फफ्राइडल

5

मेरे उत्तर के साथ एक चेतावनी (अधिकांश में भी लागू होती है): मुझे आपके आवेदन का उद्देश्य नहीं पता है। यदि यह किसी विशेष समस्या का निवारण करने के लिए, या फिर कभी भी उपयोग नहीं किए जाने वाले नेटवर्क को बेहतर ढंग से समझने के लिए एक फेंकने योग्य अनुप्रयोग है, तो इंटरफ़ेस के पहले अक्षर पर भरोसा करना एक त्वरित और गंदा विकल्प हो सकता है। यदि आप विंडसरक या tcpdump के अगले प्रतियोगी को लिखने की योजना बना रहे हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि आप इसे सभी प्रकार के किनारे के मामलों के लिए सही समझें।

और यदि आप जो एप्लिकेशन लिख रहे हैं, वह उन चरम सीमाओं के बीच कहीं गिरता है, तो केवल आप (और आपके ग्राहक) यह जान सकते हैं कि आपको अपने तर्क को लागू करने की कितनी सावधानी से आवश्यकता है।

अन्य लोगों ने पहले ही बताया है कि किसी भी कारण से नाम कभी विश्वसनीय नहीं होते हैं। अंतिम समस्या सॉफ्टवेयर में एक बहुत ही आम है: ज्ञात / प्रलेखित तथ्यों पर भरोसा करने के बजाय कठिन-कोडिंग मान्यताओं।

दूसरा मुद्दा जिसका उल्लेख नहीं किया गया है, वह भी आपकी आवश्यकताओं के बारे में एक धारणा पर आधारित है: आप जिन इंटरफेस की सूची चाहते हैं, वे हमेशा "हार्डवेयर ईथरनेट इंटरफेस" और "वाईफाई इंटरफेस" हैं।

तीसरा मुद्दा अभी तक एक और धारणा है: कि सभी इंटरफ़ेस उन श्रेणियों में गिर जाएंगे, जिनके बारे में आप अभी सोच सकते हैं। Infiniband के बारे में कैसे, जैसा कि @ user4556274 ने बताया है? कैसे एक वीपीएन के लिए सुरंग इंटरफेस के बारे में? कैसे के बारे में bridged इंटरफेस? शारीरिक और तार्किक इंटरफेस को मिलाने वाले ब्रिजेज इंटरफेस के बारे में कैसे?

लेकिन आप जो खोज रहे हैं उसे पूरा करने के लिए विकल्प हो सकते हैं। सबसे पहले, परिभाषित करें कि एक इंटरफ़ेस जिसे आप सूचीबद्ध करना चाहते हैं, बनाम एक चरित्र जो आप नहीं करते हैं।

ज्यादातर मामलों में, एक विशेषता जिस पर आप भरोसा कर सकते हैं वह रूटिंग टेबल है (हालांकि, यह केवल तब तक काम करेगा जब तक इंटरफ़ेस ऊपर है, इसलिए यह वह नहीं हो सकता है जो आप वास्तव में देख रहे हैं)।

कोई भी इंटरफ़ेस जिसमें एक डिफ़ॉल्ट मार्ग है (यानी, 0.0.0.0 के लिए एक मार्ग) वह है जिसकी आप तलाश कर रहे हैं।

ध्यान दें कि यह अभी भी एक धारणा पर आधारित है, बस एक और अधिक विश्वसनीय है: यह बोधगम्य है कि एक वर्चुअल मशीन या डॉक कंटेनर के माध्यम से सभी आउटबाउंड ट्रैफ़िक को रूट करने के लिए एक सिस्टम कॉन्फ़िगर किया गया है (उदाहरण के लिए, अगर कोई कंटेनर है जो फ़ायरवॉल चल रहा है )। और रिवर्स भी सच है: एक sysadmin संभावित रूप से डिफ़ॉल्ट मार्ग को हटाकर बाहर यातायात को बंद कर सकता है।

एक अन्य विकल्प वास्तविक हार्डवेयर से जाना है और देखें कि वह किस चालक का उपयोग करता है। फिर आप कुछ प्रसिद्ध ड्राइवरों को बाहर कर सकते हैं


4

क्या आप स्पष्ट रूप से बंधुआ या टीम इंटरफेस को छोड़कर? हमारे यहाँ डिफ़ॉल्ट उपयोग करने के लिए है bond0या team0हमारे सर्वर के लिए प्राथमिक इंटरफ़ेस के लिए।

मुझे लगता है कि आपको अपने तर्क पर फिर से विचार करने की आवश्यकता है। हो सकता है कि पुनरावृत्त करने की कोशिश करें, हालांकि सभी परिभाषित नेटवर्क किसी दिए गए सिस्टम पर इंटरफेस करते हैं, उन्हें ईथरनेट, वाईफाई, इन्फिबैंड, सीरियल आदि के बीच विभाजित करते हैं, और फिर अपना जादू करते हैं।


3

हार्डकोड, या पैटर्न का मिलान हार्डवेयर नामों से न करें। यह सभी उपकरणों पर लागू होता है। उपकरणों की सूची निर्धारित करने और उचित कार्रवाई करने के लिए udv द्वारा प्रदान किए गए उपकरणों पर भरोसा करें। 16.7 लगातार डिवाइस नामकरण देखें , और फिर उस पूरे दस्तावेज़ के माध्यम से पढ़ें , विशेष रूप से 16.2 और 16.3। ध्यान दें कि udv वितरण अज्ञेयवादी है, और init सिस्टम अज्ञेयवादी भी है, क्योंकि udv अब linux में डिवाइस प्रबंधन के लिए पसंदीदा तरीका है।

ध्यान दें कि @ user4556274, ने इसका उल्लेख करते हुए अपने उत्तर में कहा udev-builtin-net-id.c, जिसका संक्षेप में मतलब है कि जिस पैटर्न का मिलान आप पूरा करने की कोशिश कर रहे हैं, वह एक अंतर्निहित भाग है udev

का हवाला देते हुए PredictableNetworkInterfaceNames :

Systemd 197 के साथ हमने कई अलग-अलग नामकरण नीतियों के लिए systemd / udevd में उचित रूप से मूल समर्थन जोड़ा है और biosdevname के समान योजना बनाई है (लेकिन आमतौर पर अधिक शक्तिशाली, और कर्नेल-आंतरिक डिवाइस पहचान योजनाओं के करीब) डिफ़ॉल्ट। नेटवर्क इंटरफेस के लिए निम्नलिखित विभिन्न नामकरण योजनाएं अब मूल निवासी द्वारा समर्थित हैं:

  1. फ़र्मवेयर / BIOS को शामिल करने वाले नामों को ऑन-बोर्ड डिवाइसों के लिए सूचकांक संख्याएँ प्रदान की जाती हैं (उदाहरण: eno1)
  2. फर्मवेयर / BIOS को शामिल करने वाले नामों में पीसीआई एक्सप्रेस हॉटप्लग स्लॉट इंडेक्स नंबर दिए गए हैं (उदाहरण: ens1)
  3. हार्डवेयर के कनेक्टर की भौतिक / भौगोलिक स्थिति को शामिल करने वाले नाम (उदाहरण: enp2s0)
  4. इंटरफेस के मैक पते (उदाहरण: enx78e7d1ea46da) को शामिल करते हुए नाम क्लासिक, अप्रत्याशित कर्नेल-देशी एथिक्स नामकरण (उदाहरण: eth0)

डिफ़ॉल्ट रूप से, systemd v197 अब नीति 1 के बाद इंटरफेस का नाम देगा) यदि फर्मवेयर से जानकारी लागू होती है और उपलब्ध है, 2 पर वापस आ रही है) यदि फर्मवेयर से जानकारी उपलब्ध है और उपलब्ध है, तो 3 से गिर रही है) यदि लागू हो, तो वापस गिरना 5) अन्य सभी मामलों में। नीति 4) डिफ़ॉल्ट रूप से उपयोग नहीं की जाती है, लेकिन यदि उपयोगकर्ता ऐसा चुनता है तो उपलब्ध है।

यह संयुक्त नीति केवल अंतिम उपाय के रूप में लागू होती है। इसका मतलब है, यदि सिस्टम में biosdevname स्थापित है, तो यह पूर्ववर्तीता लेगा। यदि उपयोगकर्ता ने udev नियम जोड़े हैं जो कर्नेल उपकरणों के नाम को बदल देते हैं तो ये पूर्ववर्तीता भी लेंगे। इसके अलावा, कोई भी वितरण विशिष्ट नामकरण योजना आमतौर पर पूर्वता लेती है।


2

जैसा कि दूसरों ने कहा है कि आप पूरी तरह से नाम पर निर्भर नहीं हो सकते।

मेरे मामले में ऐसा लगता है कि वायरलेस के लिए /sys/class/net/<ifacename>/"वायरलेस" नामक एक निर्देशिका होगी यदि यह एक वायरलेस इंटरफ़ेस है:

# kbrandt @ kbrandtlx in /sys/class/net [9:47:43] C:130
$ ls
br-b293588ecdae  enp11s0  lo    veth6061cd8  virbr0-nic
docker0          enp12s0  ppp0  virbr0       wlp13s0

# kbrandt @ kbrandtlx in /sys/class/net [9:47:44] 
$ echo  /sys/class/net/*/wireless
/sys/class/net/wlp13s0/wireless
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.