Ifconfig कमांड से पहला IP एड्रेस कैसे कैप्चर करें?


9

ifconfigकमांड से आने वाले पहले आईपी एड्रेस को कैसे कैप्चर करें ?

ifconfig -a
enw178032: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 100.14.22.12  netmask 255.255.0.0  broadcast 100.14.255.255
        inet6 fe80::250:56ff:fe9c:158a  prefixlen 64  scopeid 0x20<link>
        ether 00:10:56:9c:65:8a  txqueuelen 1000  (Ethernet)
        RX packets 26846250  bytes 12068811576 (11.2 GiB)
        RX errors 0  dropped 58671  overruns 0  frame 0
        TX packets 3368855  bytes 1139160934 (1.0 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

अपेक्षित परिणाम:

IP=100.14.22.12

3
इस सवाल का जवाब दिया गया है, या तो awk या grep / cut, आदि का उपयोग करना, लेकिन यह अभी भी इस्कॉनफिग से उपयोग करने और grep करने के लिए सामान्य रूप से एक बुरा विचार है। आधुनिक लिनक्स बिल्ड में आईपी बेहतर अनुकूल और बेहतर समर्थित है।
पेड्रो

1
यह एक XY समस्या की तरह लगता है। आप वास्तव में क्या जानकारी चाहते हैं? मशीन का मुख्य नेटवर्क-फेसिंग आईपी पता? मशीन का कोई भी नेटवर्क-फेसिंग आईपी पता? पहले नेटवर्क एडेप्टर का आईपी पता? कोई भी IP पता, इससे कोई फर्क नहीं पड़ता कि वह क्या है? आपके लिए आवश्यक जानकारी प्राप्त करने के लिए संभवतः अधिक प्रत्यक्ष, सटीक और पोर्टेबल तरीका है।
अलेक्स.फोन्निच

जवाबों:


20

यह ifconfigएक स्क्रिप्ट में एक आईपी पते प्राप्त करने के लिए उपयोग करने से बेहतर है इसे कुछ वितरणों में वर्गीकृत किया गया है (जैसे कि CentOS और अन्य, इसे डिफ़ॉल्ट रूप से स्थापित न करें)।

अन्य प्रणालियों में, ifconfig का आउटपुट वितरण के रिलीज के अनुसार भिन्न होता है (उदाहरण के ifconfigलिए, उदाहरण के लिए, डेबियन 8 से डेबियन 9 में भिन्न आउटपुट / रिक्ति / क्षेत्र )।

ipजिस तरह से आप पूछ रहे हैं, उसके साथ आईपी पता प्राप्त करने के लिए :

ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '

या बेहतर अभी तक:

$ ip -o -4  address show  | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249

या, जैसा कि आप पूछते हैं "आईपी ="

#!/bin/bash
echo -n "IP="
ip -o -4  address show  | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '

@Roman से बेशर्मी से विचार अपनाने

$ ip -o -4  address show  | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } ' 
IP=192.168.1.249

सामान्य उत्पादन:

 $ ip -o -4  address show 
1: lo    inet 127.0.0.1/8 scope host lo\       valid_lft forever preferred_lft forever
2: eth0    inet 192.168.1.249/24 brd 192.168.1.255 scope global eth0\       valid_lft forever preferred_lft forever

से man ip:

-o, -ऑनलाइन
आउटपुट प्रत्येक रिकॉर्ड को एक ही लाइन पर रखता है, लाइन की जगह '\' वर्ण के साथ फीड करता है। यह सुविधाजनक है जब आप wc (1) या grep (1) आउटपुट के साथ रिकॉर्ड गिनना चाहते हैं।

क्यों ifconfigनहीं सलाह दी जाती है, इसका एक उदाहरण देखें : BBB: `bbb-conf --check` आईपी पते को` inet` के रूप में दिखाना - ifconfig woes

यह समझने के लिए कि ifconfigबाहर क्यों है, 'ifconfig' और 'ip' कमांड के बीच अंतर देखें

ifconfigनेट-टूल्स से है, जो लंबे समय तक लिनक्स नेटवर्क स्टैक के साथ पूरी तरह से सक्षम नहीं है। यह अभी भी नेटवर्क कॉन्फ़िगरेशन के लिए ioctl का उपयोग करता है, जो कर्नेल के साथ बातचीत करने का एक बदसूरत और कम शक्तिशाली तरीका है।

2005 के आसपास नेटवर्क स्टैक को नियंत्रित करने के लिए एक नया तंत्र पेश किया गया था - नेटलिंक सॉकेट्स।

नेटवर्क इंटरफ़ेस को कॉन्फ़िगर iproute2करने के लिए उस पूर्ण-द्वैध नेटलिंक सॉकेट तंत्र का उपयोग किया जाता है, जबकि ifconfigएक ioctl सिस्टम कॉल पर निर्भर करता है।


मैं eth0 को डिफ़ॉल्ट के रूप में सेट नहीं करना पसंद करता हूं क्योंकि मशीनों पर यह नाम बदल रहा है, क्या हम लचीला वाक्यविन्यास प्रदान कर सकते हैं
येल

@ यूल बदल गया, लो eth0 हालाँकि रोमन ने मेरे अंदर "आईपी =" छापने से बेहतर किया awk। मेरे लिए बहुत ज्यादा दिमागी ताकत, अभी भी जागना। बचें ifconfig, इसका कोई भविष्य नहीं है, और आईपी पते की स्थिति बदल जाती है, लिनक्स के लिए कम से कम दो अलग-अलग संस्करण / कार्यान्वयन (!) हैं जो मुझे पता है।
रुई एफ रिबेरो

बस जानकारी के लिए, iproute2 के नए संस्करणों पर (जैसे: CentOS7 और न ही डेबियन 8 पर) आईपी एक -briefपैरामीटर ले सकता है और इसका आउटपुट पार्स करना आसान हो जाता है (2015-08-31: git.kernel.org/pub/scm/network/iproute2 /iproute2.git/commit/… )
AB

@AB भी मैं उपयोग के रूप में मदद करता है, धन्यवाद, यह जाँच करेगा कहां
रुई एफ Ribeiro

1
आह, मुझे नहीं पता था कि -oवास्तव में लिपियों के लिए क्या उपयोगी लगता है
एबी

6

Awk समाधान:

ifconfig -a | awk 'NR==2{ sub(/^[^0-9]*/, "", $2); printf "IP=%s\n", $2; exit }'

नमूना उत्पादन:

IP=10.0.2.15

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.