উত্তর:
এটি একটি ফাইলে সংরক্ষণ করুন এবং তারপরে চালান bash <filename>
#!/bin/bash
ifconfig eth0 | grep "inet addr"
কেবলমাত্র আইপি অ্যাড্রেস দেখাচ্ছে নম্বর পেতে আরও নির্ভুল হওয়া:
#!/bin/bash
ifconfig eth0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1
আপডেট : এটি যদি আপনার পক্ষে কাজ করে না তবে অন্য উত্তরটি চেষ্টা করে দেখুন
grep "inet"
অন্য বিকল্প সরবরাহ করার জন্য, আপনি 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)
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
কিছু কাজ করতে পারে ... কত সুন্দর
@ মার্কাস-লিন্ডবার্গের প্রতিক্রিয়া আমার প্রিয়। আপনি যদি -o -4
আইপি এর পতাকাগুলিতে যুক্ত হন তবে আপনি আরও সহজে পার্সেবল (এবং ধারাবাহিক) আউটপুট পাবেন:
ip -o -4 a | awk '$2 == "eth0" { gsub(/\/.*/, "", $4); print $4 }'
-o
এর অর্থ দাঁড়ায় --oneline
, যা হ'ল এই ধরণের পরিস্থিতিতে সহায়তা করতে। -4
IPv4 ঠিকানা, যা সব অন্যান্য প্রতিক্রিয়া কি পরোক্ষভাবে সীমা যোগ করা হয়।
ip
পতাকা। cut
উন্নত awk
উইজার্ড্রির পরিবর্তে ব্যবহার করা :ip -o -4 addr show eth0 scope global | awk '{print $4;}' | cut -d/ -f 1
cut
জানার পরে "আবিষ্কার" করেছি awk
এবং আমি আমার পাইপলাইনে কমান্ডের সংখ্যা হ্রাস করতে চাই। যে কোনও ক্ষেত্রে দুর্দান্ত পরামর্শ।
এখানে কিছু অন্নিলাররা .....
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:
স্ট্রিংয়ের পাশে থাকা এক বা একাধিক অ-স্পেস অক্ষর ক্যাপচার করা হয় এবং শেষ পর্যন্ত আমরা কেবল সেগুলি ধারণ করা অক্ষরগুলি মুদ্রণ করি।
আপনার বর্তমান 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
আমি নেটিফেসগুলির মতো অজগর গ্রন্থাগারটি ব্যবহার করার পরামর্শ দিচ্ছি যা এই উদ্দেশ্যে বিশেষভাবে ডিজাইন করা হয়েছে।
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]
ip addr|awk '/eth0/ && /inet/ {gsub(/\/[0-9][0-9]/,""); print $2}'
এটি কেবলমাত্র ব্যবহৃত ip addr
যা প্রতিস্থাপন ifconfig
এবং প্রতিস্থাপনের awk
সাথে মিলিত (gsub)।
আপনার কাছে বিশ্রী না থাকলে কেবলমাত্র একটি বিকল্প কার্যকর হতে পারে (এটি কিছু এমবেডেড ডিভাইসের ক্ষেত্রে যেমন হয়):
ip addr show dev eth0 scope global | grep "inet\b" | cut -d/ -f 1 | egrep -o "([[:digit:]]{1,3}[.]{1}){3}[[:digit:]]{1,3}"
ifconfig eth0|grep 'inet '|awk '{print $2}'
এটি সাধারণ ব্যবহারকারীর সাথেও ব্যবহার করা যেতে পারে।
ip addr show eth0 | grep "inet " | cut -d '/' -f1 | cut -d ' ' -f6
ip addr show | grep "inet " | cut -d '/' -f1 | cut -d ' ' -f6
cut
দুটি বার ব্যবহার করে awk
এবং cut
আউটপুট পার্স করার পরিবর্তে using পরের বার আপনার প্রথমে অন্য সমস্ত উত্তর ভালভাবে পরীক্ষা করে নেওয়া উচিত এবং নিশ্চিত করা উচিত যে আপনি কোনও সদৃশ সমাধান পোস্ট করবেন না। এই ক্ষেত্রে এখানে, আমি এটি বিতর্কিত মনে করি এটি ডুপ্লিকেট বা ঠিক একই রকম, তাই দয়া করে এটি একটি সাধারণ ইঙ্গিত হিসাবে গ্রহণ করুন। ধন্যবাদ।
আমি খুঁজে পেতে পারে এটি সবচেয়ে সংক্ষিপ্ততম উপায়:
ip -f inet addr show $1 | grep -Po 'inet \K[\d.]+'
$1
আপনার নেটওয়ার্ক ইন্টারফেস দিয়ে প্রতিস্থাপন করুন ।
ip -f inet
আইপকে ইনট (ipv4) পরিবারের জন্য কেবল মানগুলি ফেরত দিতে বলে।
grep -Po
গ্রেপকে পরের-রেজেক্স হিসাবে পরের মানটি ইন্টারপ্রেট করতে বলে, এবং কেবলমাত্র মিলে যাওয়া মানগুলি মুদ্রণ করতে।
রেজেক্স \K[\d.]+
বলছে "সবকিছু এই বিন্দুতে ফেলে দেওয়া (\ কে), এবং যতগুলি সংখ্যক মানকে যথাসম্ভব একটি সারিতে বিন্দুতে অনুসরণ করবে"। এটি কেবলমাত্র আইপি ঠিকানার সাথে মেলে এবং শর্টফর্ম-এক্স সাবসনেট মাস্ক সহ এটির পরে সমস্ত কিছু উপেক্ষা করবে।
এই দিনগুলিতে বহুগুণ ইন্টারফেসের সাথে (যেমন আপনি যদি ডকার ব্যবহার করেন) এবং ইটিএইচ দ্বারা নামকরণ ইন্টারফেস এখন আর আদর্শ নয়
আমি এই আদেশটি আইপি / মাস্ক নিষ্কাশন করতে ব্যবহার করি:
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
বিকল্পটি ব্যবহার করুন ।
আমার স্ক্রিপ্টে আমি এরকম কিছু ব্যবহার করছি:
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
এটি কোনও প্রক্রিয়া উত্সাহ দেয় না।