यह 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 सिस्टम कॉल पर निर्भर करता है।