सभी उपलब्ध नेटवर्क इंटरफेस के केवल डिवाइस नामों को सूचीबद्ध करें


21

मैं अपने लिनक्स सर्वर पर सभी उपलब्ध नेटवर्क-डिवाइस नामों की सूची प्राप्त करना चाहता हूं। मुझे लगा कि

ifconfig

काम करेगा, हालांकि ifconfig काफी उत्पादन करता है:

eth0      Link encap:Ethernet  Hardware Adresse 08:00:27:fc:5c:98  
          inet Adresse:192.168.2.222  Bcast:192.168.2.255  Maske:255.255.255.0
          inet6-Adresse: fe80::a00:27ff:fefc:5c98/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:329 errors:0 dropped:0 overruns:0 frame:0
          TX packets:177 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000 
          RX bytes:41496 (40.5 KiB)  TX bytes:32503 (31.7 KiB)

eth1      Link encap:Ethernet  Hardware Adresse 08:00:27:e9:35:7d  
          [...]

eth2      Link encap:Ethernet  Hardware Adresse 08:00:27:ff:db:fe  
          [...]

lo        Link encap:Lokale Schleife  
          [...]

मैं जो हासिल करना चाहता हूं वह एक सूची है जैसे

eth0
eth1
eth2
lo

या उससे भी बेहतर

eth0
eth1
eth2

मुझे लगता है कि यह "कैट", "सेड" और "ग्रीप" के संयोजन से किया जा सकता है, लेकिन मेरे पास असमान जानकारी को कैसे छीनना है, इसका कोई सुराग नहीं है।

जवाबों:


17

इसे आजमाइए:

ifconfig -a | sed 's/[ \t].*//;/^$/d'

इससे चूक होगी lo:

ifconfig -a | sed 's/[ \t].*//;/^\(lo\|\)$/d'

धन्यवाद डेनिस, यह एक आकर्षण की तरह काम किया ^ ^। परफेक्ट। नियमित एक्सप्रेशन वास्तव में कुछ हैं जो मुझे ^ ^ में देखना चाहिए
ftiaronsem

मुझे लगता है कि Linux और BSD अक्सर विभिन्न शामिल *nixउपयोगिताओं, लेकिन यह दुर्भाग्यपूर्ण इस समाधान पर एक मैक :( काम नहीं करता है
BLong

ifconfigठीक हो गया है, ipइसके बजाय का उपयोग करें
pstanton

यह ओएस एक्स के लिए काम करता है:ifconfig -a | sed -E 's/[[:space:]:].*//;/^$/d'
अगली सूचना तक रोक दिया गया।

22

एक और विकल्प होगा:

ip -o link show | awk -F': ' '{print $2}'

या हो सकता है:

ls /sys/class/net

उपयोग ls /sys/class/netकरना /etc/local.dस्क्रिप्ट में एक बेहतर समाधान है openrc- इन उपायों को प्रत्येक इंटरफ़ेस के अंत में sedएक अतिरिक्त के साथ समाप्त किया जाता :है जब से चलाया जाता है /etc/init.d/local(लेकिन नहीं जब स्क्रिप्ट को सीधे चलाया जाता है)।
स्टुअर्ट कार्डॉल

+1 के लिए -o- कि पता नहीं था
पेट्रिक

16

बस का उपयोग करें / sys / वर्ग / नेट और पट्टी बाहर पथ:

$ basename -a /sys/class/net/*
eth0
eth1
lo
ppp0
tun0

6

इसे इस्तेमाल करे:

ifconfig | cut -c 1-8 | sort | uniq -u
  • cut -c 1-8 प्रत्येक पंक्ति के पहले 8 अक्षर निकालता है
  • sort लाइनों की तरह
  • uniq -u केवल विशिष्ट रेखाएँ प्रिंट करता है जो वर्णन लाइनों के लिए रिक्त रेखाएँ निकालता है जिनके पहले आठ वर्णों में केवल रिक्तियाँ होती हैं

यह मेरे द्वारा कोशिश की गई दो लिनक्स मशीनों पर काम करता है, लेकिन मेरे मैकबुकप्रो (ओएस एक्स 10.6.4) पर, ifconfigरिक्त स्थान के बजाय टैब का उपयोग करता है, इसलिए यह थोड़ा अधिक जटिल है:

ifconfig | expand | cut -c1-8 | sort | uniq -u | awk -F: '{print $1;}'
  • expand टैब को रिक्त स्थान में परिवर्तित करता है
  • awk -F: '{print $1;}' बृहदान्त्र से पहले पहले क्षेत्र को प्रिंट करता है।

विशेष रूप से उपयोग किए गए मापदंडों की व्याख्या करने वाले बहुत विस्तृत उत्तर के लिए, आपका बहुत-बहुत धन्यवाद। अगर भविष्य में मेरे पास ऐसा ही मुद्दा होगा, तो मुझे पता है कि किस पद पर दिखना है ;-)। Unfortunatelly यह "लो" नहीं काट रहा था, इसलिए स्वीकृत उत्तर डेनिस पर जाता है। लेकिन यह वास्तव में एक बहुत ही उपयोगी जवाब है, धन्यवाद :-)
ftiaronsem

add | grep -v lo:-)
डौग हैरिस

4
ls /sys/class/net/
eth0  eth1  eth2  lo

या यदि आपको केवल eth * की आवश्यकता है

ls /sys/class/net/eth*
eth0
eth1
eth2

3

/sysफाइलसिस्टम का उपयोग करना :

basename -a $(ls /sys/devices/**/net/* -d)

IP और पर्ल का उपयोग करना:

ip -o l|perl -lane'$F[1]=~s/://g;print $F[1]'

1

यहाँ ifconfigआउटपुट से इंटरफ़ेस नाम निकालने का एक तरीका है :

ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p'

यदि आप कुछ नामों को छोड़ना चाहते हैं, तो एक तरीका और है grep:

ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p' | grep -Fvx -e lo

यदि आप अधिक नामों को बाहर करना चाहते हैं, -e fooतो grepकमांड में और जोड़ें ।


आपका समाधान डेनिस के समान ही समान रूप से काम करता है। Unfortunatelly I खिचड़ी भाषा दो पदों को स्वीकार करती है, इसलिए डेनिस बस तेज था। लेकिन फिर भी धन्यवाद, विशेष रूप से आपके grep स्पष्टीकरण के लिए।
फियोट्रोंसेम

1

केवल पहले कॉलम को प्रिंट करने के लिए:

netstat -a | awk '{print $1}'

आवश्यकतानुसार प्रविष्टियों को जोड़ने या हटाने के लिए आप awk में अन्य नियमों को शामिल कर सकते हैं।

संपादित करें: ifconfig के साथ भी ऐसा ही होता है (जैसे डग ने बताया)

ifconfig | awk '{print $1}'

यह 'लो' इंटरफेस को छोड़कर एक उदाहरण है

ifconfig | awk '{if ($1 != lo) print $1}'

यह काम नहीं करेगा। awkप्रमुख श्वेत स्थान को अनदेखा करेगा और प्रत्येक बाद की पंक्ति में पहले शब्द को भी प्रिंट करेगा।
डग हैरिस

Unfortunatelly, वास्तव में काम नहीं कर रहा है, सटीक मुद्दा डौग पीड़ित बताया। लेकिन आपकी मदद के लिए धन्यवाद, फिर भी मैं वास्तव में मेरी तरह एक नए व्यक्ति की मदद करने के लिए आपकी सराहना करता हूं।
ftiaronsem

1
/usr/sbin/ip addr show | awk '/^[1-9]/ {print $2}'

प्रदान करता है

lo:
eth0:
eth1:
eth2:

आउटपुट के रूप में


1

हालांकि एक स्वीकृत समाधान मौजूद है, मैं इस पर अपना समाधान प्रस्तुत करना चाहूंगा।

मेरे पास वर्चुअल इंटरफेस का एक गुच्छा है, और विभिन्न बैश स्क्रिप्ट में प्रयोग करने योग्य सूची प्राप्त करना चाहते हैं।

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.137  netmask 255.255.255.192  broadcast 11.22.33.191
        inet6 fe80::a00:27ff:fe8c:6bd3  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)
        RX packets 2969136  bytes 2394432908 (2.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1378821  bytes 358960701 (342.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.189  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

eth0:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.190  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

eth0:3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.180  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 673768  bytes 277972236 (265.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 673768  bytes 277972236 (265.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

मुझे लूपबैक में कोई दिलचस्पी नहीं है, जैसा कि मुझे पता है कि यह वहां है :)

इस एक-लाइनर को काम मिलता है:

ifconfig | egrep '^eth' | cut -f 1-2 -d ':' | cut -f 1 -d ' '| pcregrep -o1 "(((eth\d)(:\d))|(eth\d))"

एक आउटपुट का उत्पादन करता है जैसे:

eth0
eth0:1
eth0:2
eth0:3

का आनंद लें।


1

उपरोक्त सभी समाधान ठीक काम करते हैं। फिर भी आप यह कोशिश कर सकते हैं

ifconfig | grep HW | cut -c 1-6

चूंकि, loजो लूपबैक है, उसे एक एचडब्ल्यू एड्रेस नहीं सौंपा गया है, यह दिखाई नहीं देगा।

आउटपुट -

root @ glum: / होम / एमिट # ifconfig | grep HW | कट-सी 1-6
enp7s0
vmnet1
vmnet8
wlp6s0

1

सबसे आसान समाधान आदमी में है ifconfig (8)

आदमी ifconfig (8) अर्क http://www.manpagez.com/man/8/ifconfig/ :

-L ध्वज का उपयोग सिस्टम पर सभी उपलब्ध इंटरफेस को सूचीबद्ध करने के लिए किया जा सकता है, जिसमें कोई अन्य अतिरिक्त जानकारी नहीं है। इस ध्वज का उपयोग अन्य सभी झंडों और आदेशों के साथ पारस्परिक रूप से अनन्य है, केवल -d को छोड़कर (केवल सूची इंटरफेस जो नीचे हैं) और -u (केवल सूची इंटरफेस जो ऊपर हैं)।

तो, सूची का उपयोग करने के लिए:

ifconfig -l

नामों को एक स्थान से अलग किया जाएगा ताकि आपको इन रिक्त स्थान को \ n द्वारा बदलने के लिए sed का उपयोग करना पड़े:

ifconfig -l | sed 's/ / /g'


1

बेहतर:

netstat -i | grep '^[a-z]' | awk '{print $1}' | grep -v 'lo'

1
आपको शायद ऐसा करना चाहिए grep -v '^lo$'; आपकी वर्तमान कमांड (काल्पनिक उदाहरण) logicalऔर ridiculousइंटरफेस को बाहर कर देगी ।
स्कॉट

0

उपरोक्त समाधानों में से कोई भी मेरे लिए काम नहीं करता है, यहाँ मेरा समाधान है:

ifconfig -a  | egrep "^[a-z]+" | sed "s/: .*//" | grep -v "lo"
  1. सभी उपलब्ध इंटरफेस की सूची बनाएं
  2. केवल उन पंक्तियों को निकालें जिनमें डिवाइस नाम हैं (शुरुआत में कोई स्थान नहीं)
  3. असंबंधित अनुगामी भाग को हटा दें जो पहले स्थान से है
  4. loइंटरफ़ेस को छोड़ दें

आउटपुट:

eth0
eth0:1
wlan0

0

"ifcongif -l" को काम करना चाहिए। इसका आउटपुट इस तरह है "lo0 gif0 stf0 en0 ..." जिसमें कोई नई रेखा नहीं है।

मुझे यह किसी वेबसाइट पर मिला, लेकिन मैं इसे अब और नहीं ढूँढ सकता। और मैं अभी भी उस "-एल" ध्वज के अर्थ की तलाश कर रहा हूं।


0

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

आईपी ​​एड्र: राउटिंग, डिवाइसेस, पॉलिसी राउटिंग और टनल (एड्रेस)
grep को दिखाना / हेरफेर करना : यूनिटल के बाद एक स्पेस तो कुछ भी ढूंढें:
कट: यूज़: (:) एक सीमांकक के रूप में और फील्ड 2
ट्राय करें: किसी भी स्पेस को डिलीट करें

$ आईपी Addr | grep -E ': \ s। * ?:' | cut -d ":" -f 2 | tr -d ""

0

MacOS पर परीक्षण किया गया, निम्नलिखित कार्य किया गया। मुझे उन सभी इंटरफेस को खोजने की आवश्यकता थी जो यूपी थे। यह ऊपर डेनिस विलियमसन के जवाब पर आधारित है।

ifconfig -a | grep UP | sed 's/:.*//;/^$/d'


-1

ifconfig | grep flags | awk -F: '{print $1;}'


1
क्या आप विस्तार से बता सकते हैं कि यह क्या करता है? एक पंक्ति के उत्तर आमतौर पर सुपरयूज़र के लिए एक अच्छा प्रारूप नहीं होते हैं।
डॉकटोरो रीचर्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.