Eth0 ইন্টারফেসে আইপি ঠিকানা প্রদর্শন করা হচ্ছে


24

স্ক্রিপ্ট ব্যবহার করে আমি কীভাবে eth0 এ দেখানো আইপি ঠিকানাটি প্রদর্শন করতে পারি?

উত্তর:


28

এটি একটি ফাইলে সংরক্ষণ করুন এবং তারপরে চালান bash <filename>

#!/bin/bash
ifconfig eth0 | grep "inet addr"

কেবলমাত্র আইপি অ্যাড্রেস দেখাচ্ছে নম্বর পেতে আরও নির্ভুল হওয়া:

#!/bin/bash
ifconfig eth0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1

আপডেট : এটি যদি আপনার পক্ষে কাজ করে না তবে অন্য উত্তরটি চেষ্টা করে দেখুন


2
অবশ্যই এটি সর্বশেষ উবুন্টুতে কাজ করে না। সর্বশেষতম ifconfig "ইনট অ্যাডারে <ip>" এর পরিবর্তে "inet <ip>" দেয়
থ্যাং করুন

আপনি কেবল ব্যবহার করতে পারেনgrep "inet"
আন্দ্রেই রাদুলেসকু

26

অন্য বিকল্প সরবরাহ করার জন্য, আপনি ip addrআইপি ঠিকানা পেতে এইভাবে কমান্ডটি ব্যবহার করতে পারেন :

ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1
  • ip addr show eth0 সম্পর্কে তথ্য প্রদর্শন করে eth0
  • grep "inet\b"কেবলমাত্র আইপিভি 4 ঠিকানা রয়েছে এমন লাইনটি দেখায় (আপনি যদি আইপিভি 6 ঠিকানা চেয়েছিলেন তবে এটিতে পরিবর্তন করুন "inet6\b")
  • awk '{print $2}' দ্বিতীয় ক্ষেত্রের মুদ্রণগুলি, যার আইপ্যাড্রেস / মুখোশ রয়েছে example 172.20.20.15/25
  • cut -d/ -f1 শুধুমাত্র আইপি ঠিকানার অংশ নেয়।

একটি স্ক্রিপ্টে:

#!/bin/bash
theIPaddress=$(ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)

এই সমাধান আসলে কাজ করে!
থ্যাং করুন

আইপি -4 ... এবং আইপি -6 ...! ধন্যবাদ!
তমুসজেরোয়েস

17

Https://stackoverflow.com/a/14910952/1695680 থেকে নেওয়া হয়েছে

hostname -i

তবে এটি কোনও স্থানীয় আইপি ঠিকানা (127.0.0.1) ফিরে আসতে পারে, তাই আপনাকে ব্যবহার করতে এবং ফিল্টার করতে হতে পারে:

hostname -I

হোস্টনামের ম্যানাপেজগুলি থেকে:

-i, --ip-address

হোস্ট নামের নেটওয়ার্ক ঠিকানা (এস) প্রদর্শন করুন। মনে রাখবেন যে হোস্টের নামটি সমাধান করা সম্ভব হলে এটি কাজ করে। এই বিকল্পটি ব্যবহার করা এড়িয়ে চলুন; পরিবর্তে হোস্টনাম - সমস্ত-আইপি-ঠিকানা ব্যবহার করুন।

-I, --all-ip-addresses

হোস্টের সমস্ত নেটওয়ার্ক ঠিকানা প্রদর্শন করুন। এই বিকল্পটি সমস্ত নেটওয়ার্ক আন্তঃমহলে সমস্ত কনফিগার করা ঠিকানা গণনা করে। লুপব্যাক ইন্টারফেস এবং আইপিভি 6 লিঙ্ক-স্থানীয় ঠিকানা বাদ দেওয়া হয়েছে। বিকল্প -i এর বিপরীতে, এই বিকল্পটি নাম রেজোলিউশনের উপর নির্ভর করে না। আউটপুট ক্রম সম্পর্কে কোনও অনুমান করবেন না।


রেকর্ডটির জন্য, আমি ip addr show label 'enp*'আরও ভাল পছন্দ করি তবে আমি বিরক্তিকর পার্স করছি, এর মতো ip addr show label 'enp*' | grep -oP inet\ \\S+ | cut -d' ' -f2কিছু কাজ করতে পারে ... কত সুন্দর
ThorSummoner

5

@ মার্কাস-লিন্ডবার্গের প্রতিক্রিয়া আমার প্রিয়। আপনি যদি -o -4আইপি এর পতাকাগুলিতে যুক্ত হন তবে আপনি আরও সহজে পার্সেবল (এবং ধারাবাহিক) আউটপুট পাবেন:

ip -o -4 a | awk '$2 == "eth0" { gsub(/\/.*/, "", $4); print $4 }'

-oএর অর্থ দাঁড়ায় --oneline, যা হ'ল এই ধরণের পরিস্থিতিতে সহায়তা করতে। -4IPv4 ঠিকানা, যা সব অন্যান্য প্রতিক্রিয়া কি পরোক্ষভাবে সীমা যোগ করা হয়।


Love ipপতাকা। cutউন্নত awkউইজার্ড্রির পরিবর্তে ব্যবহার করা :ip -o -4 addr show eth0 scope global | awk '{print $4;}' | cut -d/ -f 1
ডাফজে

@ ডাফজে সম্ভবত এটি ব্যক্তিগত স্বাদের বিষয় নয়। আমি cutজানার পরে "আবিষ্কার" করেছি awkএবং আমি আমার পাইপলাইনে কমান্ডের সংখ্যা হ্রাস করতে চাই। যে কোনও ক্ষেত্রে দুর্দান্ত পরামর্শ।
আমোস শাপিরা

আমি পুরোপুরি একমত, আমোস। আপনার সমাধানের জন্য ধন্যবাদ!
DuffJ

3

এখানে কিছু অন্নিলাররা .....

awk

ifconfig eth0 | awk '/inet addr/{split($2,a,":"); print a[2]}'

উপরের অর্ক কমান্ডের মধ্যে বিভক্ত ফাংশন ডিলিমিটারের উপর ভিত্তি করে দ্বিতীয় কলামটি বিভক্ত করে বিভক্ত :মানকে একটি এসোসিয়েটিভ অ্যারেতে সঞ্চয় করে a। সুতরাং a[2]দ্বিতীয় অংশের মান ধরে।

sed

ifconfig eth0 | sed -n '/inet addr/s/.*inet addr: *\([^[:space:]]\+\).*/\1/p'

বেসিক সেডে, \(...\)ক্যাপচারিং গ্রুপ নামে পরিচিত যা অক্ষরগুলি ক্যাপচার করতে ব্যবহৃত হয়। আমরা সেই ক্যাপচারিত অক্ষরগুলিকে ব্যাক-রেফারেন্সিংয়ের মাধ্যমে উল্লেখ করতে পারি। \([^[:space:]]\+\)কোনও অক্ষর ক্যাপচার করে তবে এক বা একাধিকবার স্থান নয়।

, grep

ifconfig eth0 | grep -oP 'inet addr:\K\S+'

\Kচূড়ান্ত মুদ্রণ থেকে পূর্বের মিলিত অক্ষরগুলি ত্যাগ করে এবং \S+এক বা একাধিক অ-স্থানের অক্ষরের সাথে মেলে।

পার্ল

ifconfig eth0 | perl -lane 'print $1 if /inet addr:(\S+)/'

inet addr:স্ট্রিংয়ের পাশে থাকা এক বা একাধিক অ-স্পেস অক্ষর ক্যাপচার করা হয় এবং শেষ পর্যন্ত আমরা কেবল সেগুলি ধারণ করা অক্ষরগুলি মুদ্রণ করি।


পছন্দ করেছেন আমি মনে করি এটি ভবিষ্যতের পাঠকদের জন্য সহায়ক হবে। উপরের আদেশগুলি থেকে কোনও প্রশ্ন জিজ্ঞাসা করুন নির্দ্বিধায় ... :)
অবিনাশ রাজ

2

এখানে একটি ভাল, শুধুমাত্র মাধ্যমিক কমান্ড হিসাবে গ্রেপ ব্যবহার করে:

আইপি অ্যাডারের শো এথ0 | গ্রেপ -ওপি 'ইনট \ কে \ এস [0-9।] +'

আপনার প্রয়োজনের চেয়ে আরও কমান্ড কেন ব্যবহার করা উচিত তা আমি দেখতে পাচ্ছি না


2

আপনার বর্তমান ipপরিবর্তিত ifconfig, রক্ষণাবেক্ষণ করা এবং সম্ভবত স্ক্রিপ্টিংয়ের জন্য সবচেয়ে গুরুত্বপূর্ণ বিষয় হিসাবে এটির পরিবর্তে ) ব্যবহার করা উচিত , এটি একটি ধারাবাহিক & পার্সেবল আউটপুট উত্পাদন করে। নিম্নলিখিত কয়েকটি অনুরূপ পন্থা:

আপনি যদি আপনার ইথারনেট ইন্টারফেসের জন্য আইপিভি 4 ঠিকানা চান eth0:

$ ip -4 -o addr show eth0 | awk '{print $4}'
192.168.1.166/24  

লিপি হিসাবে:

$ INTFC=eth0  
$ MYIPV4=$(ip -4 -o addr show $INTFC | awk '{print $4}') 
$ echo $MYIPV4
192.168.1.166/24

উপরে উত্পাদিত আউটপুট সিআইডিআর স্বরলিপি হয়। সিআইডিআর স্বরলিপি না চাইলে এটি ছিনিয়ে নেওয়া যায়:

$ ip -4 -o addr show eth0 | awk '{print $4}' | cut -d "/" -f 1 
192.168.1.166  

আইএমএইচও "সর্বাধিক মার্জিত" অন্য একটি বিকল্প নির্দিষ্ট দূরবর্তী হোস্টের সাথে সংযোগ স্থাপনের জন্য যা কিছু ইন্টারফেস ব্যবহার করা হয় তার IPv4 ঠিকানা পায় (এই ক্ষেত্রে 8.8.8.8)। এই উত্তরে @ গ্যাটোয়াটিগ্রাডোর সৌজন্যে :

$ ip route get 8.8.8.8 | awk '{ print $NF; exit }'
192.168.1.166

লিপি হিসাবে:

$ RHOST=8.8.8.8  
$ MYIP=$(ip route get $RHOST | awk '{ print $NF; exit }')
$ echo $MYIP
192.168.1.166

এটি একটি একক ইন্টারফেস সহ হোস্টে পুরোপুরি ভাল কাজ করে, তবে আরও সুবিধাজনকভাবে একাধিক ইন্টারফেস এবং / অথবা রুট স্পেসিফিকেশন সহ হোস্টগুলিতেও কাজ করবে।

যদিও ipএটি আমার পছন্দের পদ্ধতির হবে, অবশ্যই এই বিড়ালের চামড়ার একমাত্র উপায় নয়। hostnameআপনি যদি আরও সহজ / আরও সংক্ষিপ্ত কিছু পছন্দ করেন তবে এখানে এমন আরও একটি পদ্ধতির ব্যবহার রয়েছে :

$ hostname --all-ip-addresses | awk '{print $1}'  

অথবা, আপনি যদি আইপিভি 6 ঠিকানা চান:

$ hostname --all-ip-addresses | awk '{print $2}'  

লিপি হিসাবে:

$ MYV4IP=$(hostname --all-ip-addresses | awk '{print $1}') 
$ MYV6IP=$(hostname --all-ip-addresses | awk '{print $2}')
$ echo $MYV4IP
192.168.1.166 
$ echo $MYV6IP 
2601:7c1:103:b27:352e:e151:c7d8:3379

1

আমি নেটিফেসগুলির মতো অজগর গ্রন্থাগারটি ব্যবহার করার পরামর্শ দিচ্ছি যা এই উদ্দেশ্যে বিশেষভাবে ডিজাইন করা হয়েছে।

sudo pip install netifaces
python -c "import netifaces; print netifaces.ifaddresses('eth0')[netifaces.AF_INET][0]['addr']"

ব্যবহৃত ডিফল্ট নেটওয়ার্ক ইন্টারফেস প্রাপ্ত করতে।

default_inf = netifaces.gateways()['default'][netifaces.AF_INET][1]

1
ip addr|awk '/eth0/ && /inet/ {gsub(/\/[0-9][0-9]/,""); print $2}'

এটি কেবলমাত্র ব্যবহৃত ip addrযা প্রতিস্থাপন ifconfigএবং প্রতিস্থাপনের awkসাথে মিলিত (gsub)।

সাধারণ কাজের জন্য অনেকগুলি প্রক্রিয়া ব্যবহার বন্ধ করুন


1

আপনার কাছে বিশ্রী না থাকলে কেবলমাত্র একটি বিকল্প কার্যকর হতে পারে (এটি কিছু এমবেডেড ডিভাইসের ক্ষেত্রে যেমন হয়):

ip addr show dev eth0 scope global | grep "inet\b" | cut -d/ -f 1 | egrep -o "([[:digit:]]{1,3}[.]{1}){3}[[:digit:]]{1,3}"


1

আইপিভি 4 এর জন্য এখানে :

ip -f inet a|grep -oP "(?<=inet ).+(?=\/)"

এখানে আইপিভি 4 এবং নির্দিষ্ট ডেভ (এথ0) এর জন্য রয়েছে:

ip -f inet a show eth0|grep -oP "(?<=inet ).+(?=\/)"

আইপিভি 6 এর জন্য :

ip -6 -o a|grep -oP "(?<=inet6 ).+(?=\/)"


0

এটি সাধারণ ব্যবহারকারীর সাথেও ব্যবহার করা যেতে পারে।

ip addr show eth0 | grep "inet " | cut -d '/' -f1 | cut -d ' ' -f6

তিনি ip addr show | grep "inet " | cut -d '/' -f1 | cut -d ' ' -f6
এথ0 এর

এটি Askubuntu.com/a/560466/367990 এর মতো একই উত্তর , কেবলমাত্র cutদুটি বার ব্যবহার করে awkএবং cutআউটপুট পার্স করার পরিবর্তে using পরের বার আপনার প্রথমে অন্য সমস্ত উত্তর ভালভাবে পরীক্ষা করে নেওয়া উচিত এবং নিশ্চিত করা উচিত যে আপনি কোনও সদৃশ সমাধান পোস্ট করবেন না। এই ক্ষেত্রে এখানে, আমি এটি বিতর্কিত মনে করি এটি ডুপ্লিকেট বা ঠিক একই রকম, তাই দয়া করে এটি একটি সাধারণ ইঙ্গিত হিসাবে গ্রহণ করুন। ধন্যবাদ।
বাইট কমান্ডার

0

আমি খুঁজে পেতে পারে এটি সবচেয়ে সংক্ষিপ্ততম উপায়:

ip -f inet addr show $1 | grep -Po 'inet \K[\d.]+'

$1আপনার নেটওয়ার্ক ইন্টারফেস দিয়ে প্রতিস্থাপন করুন ।

ip -f inet আইপকে ইনট (ipv4) পরিবারের জন্য কেবল মানগুলি ফেরত দিতে বলে।

grep -Po গ্রেপকে পরের-রেজেক্স হিসাবে পরের মানটি ইন্টারপ্রেট করতে বলে, এবং কেবলমাত্র মিলে যাওয়া মানগুলি মুদ্রণ করতে।

রেজেক্স \K[\d.]+বলছে "সবকিছু এই বিন্দুতে ফেলে দেওয়া (\ কে), এবং যতগুলি সংখ্যক মানকে যথাসম্ভব একটি সারিতে বিন্দুতে অনুসরণ করবে"। এটি কেবলমাত্র আইপি ঠিকানার সাথে মেলে এবং শর্টফর্ম-এক্স সাবসনেট মাস্ক সহ এটির পরে সমস্ত কিছু উপেক্ষা করবে।


0

এই দিনগুলিতে বহুগুণ ইন্টারফেসের সাথে (যেমন আপনি যদি ডকার ব্যবহার করেন) এবং ইটিএইচ দ্বারা নামকরণ ইন্টারফেস এখন আর আদর্শ নয়

আমি এই আদেশটি আইপি / মাস্ক নিষ্কাশন করতে ব্যবহার করি:

IPMASK=$(ip a s|grep -A8 -m1 MULTICAST|grep -m1 inet|cut -d' ' -f6)

সুতরাং আমার কাছে যতগুলি ইন্টারফেস থাকবে এবং তাদের নাম যাই থাকুক না কেন, গ্রেইপ কেবল মাল্টিকাস্ট বিকল্পটি প্রথম গ্রহণ করবে।

আমি এই কমান্ডটি মাস্ক ছাড়াই কেবল আইপি বের করতে ব্যবহার করি:

IP=$(ip a s|grep -A8 -m1 MULTICAST|grep -m1 inet|cut -d' ' -f6|cut -d'/' -f1)

আমি এই বিধিগুলি বিভিন্ন বিডিএস এবং এনআইএক্স এ ব্যবহার করি এটি কখনই ব্যর্থ হয় না;)


আপনি যদি আউটপুট বিশ্লেষণ করতে যাচ্ছেন ipতবে -oবিকল্পটি ব্যবহার করুন ।
মুরু

0

আমার স্ক্রিপ্টে আমি এরকম কিছু ব্যবহার করছি:

re="inet[[:space:]]+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)"
if [[ $(ip addr show eth0) =~ $re ]]; then
    echo ${BASH_REMATCH[1]}
else
    echo "Cannot determin IP" 1>&2
fi

এটি কোনও প্রক্রিয়া উত্সাহ দেয় না।


0

তবুও অন্য একটি উপায় (ধরে নিলে আপনি CIDRঠিকানা চান না এবং চান না IPv4):

$ ip -br -4 addr show dev eth0 | awk '{split($3,a,"/"); print a[1]}'
  • ipকমান্ডটি ব্যবহার করে যা নেইdeprecated
  • ফিল্টারিংয়ের জন্য কেবল একটি কমান্ড ব্যবহার করে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.