আমি কীভাবে নিজের আইপি ঠিকানা পেতে পারি এবং এটি শেল স্ক্রিপ্টের একটি ভেরিয়েবলে সংরক্ষণ করতে পারি?
আমি কীভাবে নিজের আইপি ঠিকানা পেতে পারি এবং এটি শেল স্ক্রিপ্টের একটি ভেরিয়েবলে সংরক্ষণ করতে পারি?
উত্তর:
আপনি যদি ওয়ালান এবং অন্যান্য বিকল্প ইন্টারফেসগুলিকে বিবেচনা করতে চান তবে এটি এত সহজ নয়। আপনি যদি জানেন যে কোন ইন্টারফেসের জন্য আপনি ঠিকানা চান (উদাহরণস্বরূপ, eth0, প্রথম ইথারনেট কার্ড), আপনি এটি ব্যবহার করতে পারেন:
ip="$(ifconfig | grep -A 1 'eth0' | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 1)"
অন্য কথায়, আমার জন্য নেটওয়ার্ক কনফিগারেশন তথ্য পান, সন্ধান করুন, eth0
সেই লাইনটি এবং পরেরটিটি ( -A 1
) সন্ধান করুন, কেবল সর্বশেষ লাইনটি পান, বিভক্ত হওয়ার সময় সেই লাইনের দ্বিতীয় অংশটি পান :
, তারপরে বিভক্ত হওয়ার সময় এর প্রথম অংশটি পান স্থান সহ
grep
"eth0:" দিয়ে কোনও ইন্টারফেস উপেক্ষা করতে আমি আপনার কোডে একটি অতিরিক্ত যুক্ত করেছি; এটি এখন আমার প্রত্যাশার মতোই কাজ করে (কেবলমাত্র "eth0" আইপি ঠিকানা প্রদান করে এবং কোনও উপ-ইন্টারফেস নয় (eth0: 0, eth0: 1, ইত্যাদি):ip="$(ifconfig | grep -v 'eth0:' | grep -A 1 'eth0' | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 1)"
ifconfig eth0
ip address
আমি বিশ্বাস করি আপনার আইপিভি 4 ঠিকানা পাওয়ার "আধুনিক সরঞ্জামগুলি" উপায়টি 'আইফোনফিগ' এর পরিবর্তে 'আইপি' পার্স করা, সুতরাং এটি এমন কিছু হবে:
ip4=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1)
ip6=$(/sbin/ip -o -6 addr list eth0 | awk '{print $4}' | cut -d/ -f1)
বা এই জাতীয় কিছু।
ip
আমার ব্যবহৃত সমস্ত রেড হ্যাট এবং ফেডোরা ডিস্ট্রোজে উপলব্ধ। ip
আইপ্রাউট 2 প্যাকেজের অংশ ( লিনাক্সফাউন্ডেশন.আর / কোলবোরেট / ওয়ার্কগ্রুপস / নেটওয়ার্কিং / আইপ্রুটি 2 )। ifconfig
এবং route
অনুমান করা হয়, যদিও এগুলি প্রচুর লোকের দ্বারা বিশেষত স্ক্রিপ্টগুলিতে ব্যবহার করা অবিরত রয়েছে। ip
আমার মতামত, আরও অনেক পার্সেবল।
ip
আমি দেখেছি এমন সমস্ত ডেবিয়ান এবং ডেবিয়ান ভিত্তিক ডিস্ট্রোগুলিতেও উপলব্ধ। এটি আইপ্রেট প্যাকেজের অংশ যা গুরুত্বপূর্ণ হিসাবে চিহ্নিত হয়েছে।
ip
iproute2 প্যাকেজের অংশ যা ডিফল্টরূপে অনেকগুলি ডিস্ট্রো। এটি সবচেয়ে ভাল ভাতে। en.wikipedia.org/wiki/Iproute2
/sbin/ip
পরিবর্তে কেন ip
?
awk
এবং cut
আস্তে আমার কাছে মজাদার, এখানে একটি সম্ভাব্য বিকল্প যা আসলে ভাল নাও হতে পারে আছে:ip -o -4 addr show eth0 | awk '{ split($4, ip_addr, "/"); print ip_addr[1] }'
কেন সহজভাবে না IP=$(hostname -I)
?
hostname -i
আমাকে দেয় 127.0.0.1
, hostname -I
আমাকে সঠিক আইপি adress ... দেয়
-i Display the network address(es) of the host name. Note that this works only if the host name can be resolved. Avoid using this option; use hostname --all-ip-addresses
/etc/hosts
সম্পর্কিত আইপি ঠিকানার সাথে যুক্ত করছে
-I
ফ্রিবিএসডি-তে নেই , তবে আপনি ব্যবহার করতে পারেনdig +short `hostname -f`
আপনি যদি কোনও ইন্টারফেসের ঠিকানা চান, তবে সবচেয়ে সহজ উপায় হ'ল মুর্টিলগুলি ইনস্টল করা:
anthony@Zia:~$ ifdata -pa br0
172.16.1.244
ifdata
বেশিরভাগই প্রতিটি প্রশ্নের উত্তর দেয় যা আপনার ifconfig
জন্য আউটপুট পার্স করার প্রলুব্ধ হয় ।
যদি আপনি আপনার আইপি ঠিকানাটি বাইরের দেখতে যেমন দেখতে পান তবে এটি খুঁজে পেতে চান (কোনও NAT, ইত্যাদির বাইরে), প্রচুর পরিষেবা রয়েছে যা এটি করবে। একটি মোটামুটি সহজ:
anthony@Zia:~$ curl ifconfig.me
173.167.51.137
ifdata
যুক্ত করা ভাল হবে iproute2
। হতে পারে একটি নতুন বাইনারি নামে পরিচিতipdata
আইপিভি 4 এবং আইপিভি 6 ঠিকানা পেতে এবং প্রধান ইন্টারফেসটি ধরে নেই eth0
(এই দিনগুলি em1
বেশি সাধারণ ), চেষ্টা করুন:
ips=$(ip -o addr show up primary scope global |
while read -r num dev fam addr rest; do echo ${addr%/*}; done)
-o
এক-লাইন আউটপুট ফরম্যাট, যা সহজ সঙ্গে প্রক্রিয়া ব্যবহার read
, grep
ইত্যাদিup
সক্রিয় নয় এমন ডিভাইসগুলি বাদ দেয়scope global
ব্যক্তিগত / স্থানীয় ঠিকানা যেমন 127.0.0.1
এবং হিসাবে বাদ দেয়fe80::/64
primary
অস্থায়ী ঠিকানাগুলি বাদ দেয় (ধরে নিবেন এমন কোনও ঠিকানা চান যা পরিবর্তিত হয় না)-4
/ পাস করতে পারেন -6
। আপনি সহজেই অন্যান্য ইন্টারফেস পরামিতি পেতে পারেন। ব্যক্তিগতভাবে, লুপ করার সময় আমি অপছন্দ করি এবং আমি পছন্দ করিgrep -o 'inet6\? [0-9a-f\.:]*' | cut -f 2 -d ' '
নিজের আইপি ঠিকানার মাধ্যমে আপনি কী বোঝাতে চান তা নির্ভর করে। সিস্টেমে কয়েকটি সাবনেটগুলিতে আইপি অ্যাড্রেস থাকে (কখনও কখনও সাবनेटে বেশ কয়েকটি), যার মধ্যে কিছু আইপিভি 4, কিছু আইপিভি 6 ইথারনেট অ্যাডাপ্টার, লুপব্যাক ইন্টারফেস, ভিপিএন টানেল, ব্রিজ, ভার্চুয়াল ইন্টারফেসের মতো ডিভাইস ব্যবহার করে ...
আমি আপনাকে বোঝাতে চাইছি এমন আইপি ঠিকানা যা দিয়ে অন্য প্রদত্ত ডিভাইসটি আপনার কম্পিউটারে পৌঁছতে পারে, আপনাকে খুঁজে বের করতে হবে যে এটি কোন সাবনেট, এবং আমরা কোন আইপি'র সংস্করণটির কথা বলছি। এছাড়াও, মনে রাখবেন যে ফায়ারওয়াল / রাউটারগুলির দ্বারা করা NAT এর কারণে, কোনও ইন্টারফেসের আইপি ঠিকানাটি একই রকম নাও হতে পারে যেমন কোনও দূরবর্তী হোস্ট আপনার কম্পিউটার থেকে আগত সংযোগটি দেখে।
যখন অভিনব উত্সের রাউটিং বা প্রতি প্রোটোকল / পোর্ট রাউটিং থাকে তখন কোনও প্রদত্ত প্রোটোকলের উপর দিয়ে কোনও দূরবর্তী কম্পিউটারের সাথে কোন ইন্টারফেসের জন্য কথা বলতে ব্যবহৃত হবে তা খুঁজে পাওয়া মুশকিল হতে পারে, তখনও সেই ইন্টারফেসের আইপি ঠিকানা হতে পারে এমন কোনও গ্যারান্টি নেই আপনার কম্পিউটারে একটি নতুন সংযোগ স্থাপন করতে চাইলে প্রত্যন্ত কম্পিউটার দ্বারা সরাসরি ঠিকানাযোগ্য।
আইপিভি ((সম্ভবত আইপিভি for-র জন্যও কাজ করে) এর জন্য একটি কৌশল যা লিনাক্স সহ অনেকগুলি ইউনেসে একটি নির্দিষ্ট হোস্টে পৌঁছানোর জন্য ব্যবহৃত ইন্টারফেসের আইপি অ্যাড্রেস খুঁজে বের করতে একটি ইউডিপি সকেটে কানেক্ট (2) ব্যবহার করে গেসোকনাম ব্যবহার করে ():
উদাহরণস্বরূপ, আমার বাড়ির কম্পিউটারে:
perl -MSocket -le 'socket(S, PF_INET, SOCK_DGRAM, getprotobyname("udp"));
connect(S, sockaddr_in(1, inet_aton("8.8.8.8")));
print inet_ntoa((sockaddr_in(getsockname(S)))[1]);'
ইন্টারফেসের আইপি ঠিকানাটি খুঁজে পেতে ব্যবহার করা হবে যার মাধ্যমে আমি ৮.৮.৮.৮ (গুগলের ডিএনএস সার্ভার) পৌঁছাতে পারি। এটি "192.168.1.123" এর মতো কিছু ফেরত দেবে যা ইন্টারনেটে ডিফল্ট রুটের ইন্টারফেসের ঠিকানা। তবে, গুগল আমার মেশিনের ডিএনএস অনুরোধটি দেখতে পাবে না যেটি সেই আইপি ঠিকানা থেকে এসেছে যা একটি ব্যক্তিগত ঠিকানা, যেমনটি আমার বাড়ির ব্রডব্যান্ড রাউটারের দ্বারা সম্পাদিত NAT রয়েছে।
কোনও ইউডিপি সকেটে সংযুক্ত () কোনও প্যাকেট প্রেরণ করে না (ইউডিপি সংযোগ-কম), তবে রাউটিং টেবিলটি জিজ্ঞাসা করে সকেট প্রস্তুত করে।
ipa=$(ip route get 8.8.8.8| grep src| sed 's/.*src \(.*\)$/\1/g')
ipa=$(hostname -i|cut -f2 -d ' ')
-I
পরিবর্তে ব্যবহার করা -i
আরও ভাল যেমন আপনি লুপব্যাক অ্যাড্রেসগুলি উপেক্ষা করতে চান, তাই চূড়ান্ত আদেশটি হবেipa=$(hostname -I|cut -f1 -d ' ')
grep
পর্যাপ্ত না হয় তবে এটি অন্য কোনও কিছুর কাছে পাইপ করবেন না। শুধু অন্য কিছু (ব্যবহার sed
, awk
ইত্যাদি)।
আমি বোকা হওয়া বলতে চাই না, তবে সত্যিই একটি সঠিক উপায় আছে এবং এটি এটি। আপনি ip route
কেবল উত্স আইপি পেতে আউটপুটটি ছাঁটাই করেন । আপনি কোন আইপি-তে পৌঁছানোর চেষ্টা করছেন তার উপর নির্ভর করে "আমার নিজের আইপি ঠিকানা" (ওপির শব্দ) আলাদা হবে। আপনি যদি সর্বজনীন ইন্টারনেটে পৌঁছানোর বিষয়ে চিন্তা করেন তবে গুগলের 8.8.8.8 ডিএনএস সার্ভারটি ব্যবহার করা বেশ মান standard তাই ...
ip route get 8.8.8.8 | sed -n '/src/{s/.*src *\([^ ]*\).*/\1/p;q}'
ইন্টারনেটে পৌঁছানোর জন্য আমি যে আইপি ব্যবহার করি তা যদি আমি চাই তবে আমি এটি ব্যবহার করি:
pi@et3:~ $ ip route get 8.8.8.8 | sed -n '/src/{s/.*src *\([^ ]*\).*/\1/p;q}'
10.55.0.200
আমি যদি আমার ভিপিএন- তে কিছু পৌঁছানোর জন্য আইপিটি ব্যবহার করি তবে আমি এটি ব্যবহার করি:
pi@et3:~ $ ip route get 172.31.0.100 | sed -n '/src/{s/.*src *\([^ ]*\).*/\1/p;q}'
172.29.0.9
এই পরেরটি সত্যিই কেবল চিত্রিত উদ্দেশ্যে। তবে এটি যে কোনও লিনাক্স সিস্টেমে কাজ করা উচিত। সুতরাং, আপনি এটি প্রদর্শনের জন্য এটি ব্যবহার করতে পারেন, হ্যাঁ, সমস্ত মেশিনের সর্বদা একাধিক আইপি ঠিকানা রয়েছে।
আমি নিজের কাছে পৌঁছানোর জন্য আমি যে আইপিটি ব্যবহার করি তা চাইলে আমি এটি ব্যবহার করব :
pi@et3:~ $ my_ip=$(getent hosts $(cat /etc/hostname) | awk '{print $1; exit}')
pi@et3:~ $ ip route get $my_ip | sed -n '/src/{s/.*src *\([^ ]*\).*/\1/p;q}'
127.0.0.1
sed
আদেশ সম্পর্কে আরওপ্রথমে আমাকে বলতে দাও যে ইউনিক্স সরঞ্জামগুলি বেছে নেওয়ার সময়, আপনি সেই সরঞ্জামগুলি বেছে নেওয়ার চেষ্টা করবেন যার জন্য খুব কম পাইপ প্রয়োজন require সুতরাং, যখন কিছু উত্তর নল হবে ifconfig
থেকে grep
থেকে sed
থেকে head
, যে ধরণের ঘটনা খুব কমই প্রয়োজন। আপনি যখন এটি দেখেন, এটি একটি লাল পতাকা বাড়াতে হবে যা আপনি অল্প অভিজ্ঞতার সাথে পরামর্শ নিয়ে চলেছেন। এটি "সমাধান" ভুল করে না। তবে, এটি সম্ভবত কিছু স্ট্রিমলাইনিং ব্যবহার করতে পারে।
আমি sed
এটি বেছে নিয়েছি কারণ এটি একই কর্মপ্রবাহের চেয়ে বেশি পরিশ্রুত awk
। (আমি নীচে থেকে একটি অদ্ভুত উদাহরণ আছে।) আমি মনে করি না যে অন্য কোনও সরঞ্জাম তবে সেই 2 টি উপযুক্ত হবে।
আসুন পরীক্ষা করে দেখুন কী sed -n '/src/{s/.*src *\([^ ]*\).*/\1/p;q}'
করে:
sed # the sed executable located via $PATH
-n # no output unless explicitly requested
' # begin the command space
/src/ # regex match the string 'src'
{ # begin a block of commands **
s/ # begin a substitution (match)
.*src * # match anything leading up to and including src and any number of spaces
\([^ ]*\) # define a group containing any number of non spaces
.* # match any trailing characters (which will begin with a space because of the previous rule).
/ # begin the substitution replacement
\1 # reference the content in the first defined group
/ # end the substitution
p # print (explicitly, remember) the result
; # designate the end of the command
q # quit
} # end the block of commands
' # end the command space
** all of which will be performed "on match"
- otherwise only the first command to following the match would be performed "on match"
- any other commands would be performed whether there was a match or not
বিঃদ্রঃ:
আমি ব্যবহার করতাম sed -n '/src/{s/.*src *//p;q}'
তবে একটি মন্তব্যকারী নির্দিষ্ট করে দিয়েছিলেন যে কিছু সিস্টেমে src
মাঠের পরে ডেটা পিছনে রয়েছে ।
ip route get 8.8.8.8 | \
awk '{gsub(".*src",""); print $1; exit}'
# or
ip route get 8.8.8.8 | \
awk '{for(i=1; i<NF; i++){if($i=="src"){i++; print $i; exit}}}'
আমার ifconfig
শোগুলি যে tun0
আমার ভিপিএন এবং eth0
আমার লনের জন্য রয়েছে।
pi@et3:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.55.0.200 netmask 255.255.252.0 broadcast 10.55.3.255
inet6 fe80::71e6:5d7c:5b4b:fb25 prefixlen 64 scopeid 0x20<link>
ether b8:27:eb:b2:96:84 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)
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 172.29.0.9 netmask 255.255.255.255 destination 172.29.0.10
inet6 fe80::3a8e:8195:b86c:c68c prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether b8:27:eb:e7:c3:d1 txqueuelen 1000 (Ethernet)
ip route get 8.8.8.8 | sed -n '/src/{s/.*src *//p;q}'
আমাকে দিয়েছে 10.1.2.3 uid 1002
। সুতরাং আমি | awk '{print $1}'
কেবল আইপি ঠিকানা রাখতে সংযোজন করব ।
ফ্রিবিএসডি-তে আপনি ব্যবহার করতে পারেন
dig +short `hostname -f`
এটি অন্যান্য পরিবেশের জন্য কাজ করতে পারে, আপনার সেট আপের উপর নির্ভর করে।
/etc/resolv.conf
কীভাবে নেটওয়ার্ক রাউটার স্থানীয় হোস্ট-নেমগুলি পরিচালনা করে on এটা ব্যবহার করতে সূক্ষ্ম আপনার পরিবেশ যদি আপনি এটি পরীক্ষা করতে এবং এটি কাজ করে। তবে আপনি যদি এটি করেন তবে আপনি একটি "ব্রিটল" সিস্টেম তৈরি করছেন যা এটি ভাগ করে নিলে অন্যকে সমস্যার কারণ হতে পারে। সতর্কতার সাথে ব্যবহার করুন.
ধরে নিচ্ছি যে আপনার বিভিন্ন নামের বিভিন্ন ইন্টারফেস থাকতে পারে তবে আপনি প্রথম নন-লোকালহোস্ট এবং নন-আইপিভি 6 চান, আপনি চেষ্টা করতে পারেন:
ip=`ip addr show |grep "inet " |grep -v 127.0.0. |head -1|cut -d" " -f6|cut -d/ -f1`
আমি এই ওয়ান-লাইনারটি ব্যবহার করি:
IP=$(/sbin/ifconfig | grep -e "inet:" -e "addr:" | grep -v "inet6" | grep -v "127.0.0.1" | head -n 1 | awk '{print $2}' | cut -c6-)
ব্যবহার ifconfig
(ব্যাপকভাবে উপলভ্য), localhost
ঠিকানা গ্রহণ করে না , আপনাকে প্রদত্ত ইন্টারফেস নামের সাথে আবদ্ধ করে না, আইপিভি 6 আমলে নেয় না এবং প্রথম নেটওয়ার্ক ইন্টারফেসের আইপি উপলব্ধ করার চেষ্টা করে।
আপনার বর্তমান 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}'
আমার তারযুক্ত এনআইসিতে রেডিও সার্ভার শুরু করার জন্য আমার একটি উলামের মধ্যে এটি করা দরকার। আমি ব্যবহার করতাম
ip addr | egrep -i "inet.+eth1" | awk -F[\ /] '{print $6}' | tr -d [:space:]
egrep
অবচয় করা হয়। grep -E
পরিবর্তে ব্যবহার করুন।
কিছু কমান্ড সেন্টোস 6 বা 7 এ কাজ করছে, নীচের কমান্ড দুটিতে কাজ করছে,
#!/bin/sh
serverip=`/sbin/ifconfig eth0 | grep "inet" | awk '{print $2}' | awk 'NR==1' | cut -d':' -f2`
echo $serverip
grep | awk | awk
। লাইনটি সংক্ষিপ্ত করা যেতে পারে/sbin/ifconfig eth0 | awk '$1 == "inet" { print substr($2,6); next ; } '
এই স্নিপেট ডিভাইসটির নাম ('এথ0' এর মতো) হার্ড-কোডিং এড়ায় এবং এর ip
পরিবর্তে ব্যবহার করবে ifconfig
:
/sbin/ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'
এটি এর আউটপুটে তালিকাভুক্ত প্রথম সক্রিয় ডিভাইসের আইপি ফিরিয়ে দেবে ip addr
। আপনার মেশিনের উপর নির্ভর করে এটি আইপিভি 4 বা আইপিভি 6 ঠিকানা হতে পারে।
এটিকে ভেরিয়েবলে সঞ্চয় করতে, ব্যবহার করুন:
ip=$(/sbin/ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
বেকার / সেড / গ্রেপ ব্যবহার করে সমস্ত সমাধান আমার পরিস্থিতির জন্য অত্যধিক জটিল এবং কুৎসিত বলে মনে হচ্ছে ... সুতরাং আমি এই সত্যিই সহজ সমাধানটি নিয়ে এসেছি তবে এ সম্পর্কে কিছু ধারণা অনুধাবন করা উচিত, ধারণাটি হ'ল সর্বশেষতম ইন্টারফেসটি হ'ল আপনি one আগ্রহী. যদি আপনি এটির সাথে ঠিক থাকেন তবে এটি বেশ পরিষ্কার:
ifconfig | awk '/net / { x = $2 } END { print x }'
অন্যথায় আপনি if
নির্দিষ্ট উপসর্গ বা আপনার যে মানদণ্ড থাকতে পারে তা পরীক্ষা করার জন্য কিছু নির্বোধ বক্তব্য করতে পারেন।
আপনি যদি বাক্সটির সার্বজনীন আইপি ঠিকানা সন্ধান করছেন , আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:
dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \"
আপনি আইপিভি 4 বা আইপিভি 6 ঠিকানার dig(1)
মতো -4
বা -6
বিশেষত সন্ধানের জন্য বিকল্পগুলি ব্যবহার করতে পারেন ; গুগল TXT
প্রকারের একটি রেকর্ডে একটি উত্তর সরবরাহ করবে, যা উপস্থাপন করার সময় এর চারপাশে উদ্ধৃতি থাকবে dig
; যদি আপনি পরবর্তীকালে ইউটিলিটিগুলির সাথে ভেরিয়েবলটি ব্যবহার করতে চান তবে আপনাকে উদ্ধৃতিগুলি সরানোর জন্য ট্র (1) এরtraceroute
মতো কিছু ব্যবহার করতে হবে ।
অন্যান্য বিকল্পগুলির মধ্যে অন্তর্ভুক্ত রয়েছে whoami.akamai.net
এবং myip.opendns.com
যা উত্তর A
এবং AAAA
রেকর্ড করে ( TXT
গুগলের উপরের উদাহরণের পরিবর্তে ), সুতরাং তাদের উদ্ধৃতি অপসারণের প্রয়োজন নেই:
dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
dig -4 @resolver1.opendns.com -t any myip.opendns.com +short
dig -6 @resolver1.opendns.com -t any myip.opendns.com +short
ভেরিয়েবলগুলি সেট করতে উপরের সমস্ত বিকল্প ব্যবহার করে এমন একটি নমুনা স্ক্রিপ্ট এখানে দেওয়া হয়েছে:
#!/bin/sh
IPANY="$(dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv4="$(dig -4 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv6="$(dig -6 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
AKAMv4="$(dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short)"
CSCOv4="$(dig -4 @resolver1.opendns.com -t a myip.opendns.com +short)"
CSCOv6="$(dig -6 @resolver1.opendns.com -t aaaa myip.opendns.com +short)"
printf '$GOOG:\t%s\t%s\t%s\n' "${IPANY}" "${GOOGv4}" "${GOOGv6}"
printf '$AKAM:\t%s\n$CSCO:\t%s\t%s\n' "${AKAMv4}" "${CSCOv4}" "${CSCOv6}"
আপনি একটি ব্যক্তিগত IP ঠিকানা খুঁজছেন, অথবা বক্স নির্ধারিত সব IP ঠিকানার একটি এমন সেট, আপনি কিছু সমন্বয় ব্যবহার করতে পারে ifconfig
, (বাসদ এবং জিএনইউ / লিনাক্স দিকে) ip addr
(জিএনইউ / লিনাক্স দিকে), hostname
(অপশন -i
এবং -I
উপর জিএনইউ / লিনাক্স) এবং netstat
কী চলছে তা দেখার জন্য।
hostname -I >> file_name
এটি আপনার যা কিছু করতে পারে তা করবে
hostname: invalid option -- 'l'
...