আমি আমার নেটমাস্কটি লিনাক্সে পেতে চাই। এটি দিয়ে আউটপুট করা হয়েছে ifconfig
তবে আমি স্ট্রিংটি বের করতে চাই।
আমি আমার নেটমাস্কটি লিনাক্সে পেতে চাই। এটি দিয়ে আউটপুট করা হয়েছে ifconfig
তবে আমি স্ট্রিংটি বের করতে চাই।
উত্তর:
আমার স্পষ্ট করে দেওয়া উচিত যে এখানে কোড লিনাক্সের জন্য কাজ করে, (মন্তব্যগুলি নোট করুন এবং অন্যান্য ইউনিসে পোস্ট করুন)। ওপি একটি লিনাক্স সমাধান চেয়েছিল, তবে সাধারণভাবে "নেটমাস্ক কীভাবে পাবেন" এ প্রশ্নটি পরিবর্তন করা ভাল, এবং উত্তরটি আরও ইউনিক্স স্বাদের জন্য সর্বোত্তম উপায়ের সাথে একত্রিত করা ভাল।
#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'
./script eth0
নেটস্ট্যাট, আরপ, আরপ এবং রুটের মতো অন্যান্য traditionalতিহ্যবাহী নেটওয়ার্কিং কমান্ডের পাশাপাশি, ifconfig নেট-সরঞ্জাম প্যাকেজের অংশ। নেট-সরঞ্জামগুলি সত্যই দীর্ঘকাল থেকে সক্রিয়ভাবে বিকাশিত হয়নি এবং এটি আরও নতুন আইপ্রেট 2 প্যাকেজের পক্ষে অবমূল্যায়নের প্রচেষ্টা রয়েছে । বংশবৃদ্ধির স্বার্থে, আপনি যদি এই মৌলিক উত্তরণ সম্পর্কে আরও বিশদ চান, তবে এখানে কিছু প্রাসঙ্গিক লিঙ্ক রয়েছে:
নেট-সরঞ্জামগুলি ifconfig জন্য ম্যান পৃষ্ঠা (BUGS বিভাগ দেখুন)
ব্যবহারকারীদের দৃষ্টিকোণ থেকে ফ্রেমওয়ার্কগুলির বিশ্লেষণ এবং তুলনা
/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '
?
/sbin/ifconfig eth0 | awk -F: '/Mask:/{print $4}'
/sbin/ifconfig eth0 | awk '/netmask/{print $4}'
আমি ভাবছি যদি আপনি সত্যই কেবল মুখোশ চান want হতে পারে আপনি প্রকৃতপক্ষে মাস্ক সহ নেটওয়ার্ক (বা আইপি), কনফিগার ফাইলগুলিতে nmap
, বা যা কিছু ব্যবহার করতে চান।
সেক্ষেত্রে লিনাক্স-এ আপনি ip ...
কমান্ডের আউটপুটও পার্স করতে পারেন ।
সমস্ত ঠিকানা ইন্টারফেসের ঠিকানা এবং তাদের মুখোশ দিয়ে সিআইডিআর স্বরলিপি:
ip -o -f inet addr show | awk '/scope global/ {print $2, $4}'
বা এটি ডিফল্ট ইন্টারফেসে সীমাবদ্ধ করতে:
default_if=$(ip route list | awk '/^default/ {print $5}')
ip -o -f inet addr show $default_if | awk '{print $4}'
যা আমার মেশিনে আমাকে "192.168.1.61/24" দেয়।
ip -o -f inet addr show scope global
এবং ip route list default
।
আপনি যদি এমন কোনও ওএস ব্যবহার করেন যা মুখোশটিকে হেক্সে ফেলে দেয় তবে আপনি এর মতো কিছু করতে পারেন:
#!/usr/bin/bash
# read the mask, and strip leading 0x if it's there
hexmask=$( echo $1 | sed -e 's/^0x//' )
# loop through $hexmask in pairs
#
for (( i=0; i<${#hexmask}; i+=2 )); do
if (( $i > 1 )); then
# use a . to separate octets
# but don't print a leading .
printf "%s" "."
fi
printf "%d" "0x${1:$i:2}"
done
printf "\n"
/sbin/ifconfig eth0 | grep Mask | cut -d":" -f4
awk
যা বাস্তবে সত্য নয় ifconfig
। আমি যদিও কয়েকটি মাত্র পরিবর্তন সুপারিশ করবে: ifconfig eth0 | grep -o 'Mask:[^\s]*' | cut -d':' -f2
। -o
যাতে কেবল grep
পুরো লট (আরও দক্ষ) এর চেয়ে কেবল লাইনের কিছু অংশ ফিরে আসে। [^\s]*
নেটমাস্ক টোকেনের শেষ সন্ধান করতে অ-হোয়াইটস্পেস অক্ষরগুলি ( ) মেলান । সুরক্ষার জন্য মাঠের ডিলিমিটারের চারপাশে একক উদ্ধৃতি।
/sbin/ifconfig | grep ask | sed -e 's/.*netmask //g' | sed -e 's/ .*//g'
মাস্ক আউটপুট পেতে পারি ।
আপনি যদি ডিফল্ট নেটওয়ার্ক ডিভাইসের জন্য নেটমাস্কের সন্ধান করছেন, এই কমান্ডটি ডিফল্ট ডিভাইসটি ফেরত দেয় যেহেতু ডিফল্ট ডিভাইসটি ইথ0 নাও হতে পারে
netdevice=$(ip r | grep default | awk '/default/ {print $5}')
এবং এই কমান্ডটি মাস্কটি পুনরুদ্ধার করে:
netmask=$(ifconfig "$netdevice" | awk '/netmask/{ print $4;}')
এলিয়াহ কাগান এবং পাওলো টোমকে ধন্যবাদ যে আমাকে উত্তর সহজীকরণ এবং পরিষ্কার করতে উভয়কেই সহায়তা করেছে। আমার ব্যক্তিগত মেশিনে, ডিফল্ট ইথারনেট ডিভাইসটি "wlx504654c1a91" ছিল যা সঠিকভাবে মনে রাখতে এবং টাইপ করতে খুব জটিল ছিল, সুতরাং দুটি পদক্ষেপ প্রক্রিয়া।
grep 'pattern' | awk '{ action }'
সাধারণত হ্রাস করা যেতে পারেawk '/pattern/ { action }'
ifconfig
র নেটমাস্ক লাইনটি:inet 192.168.144.120 netmask 0xffffff00 broadcast 192.168.144.255
সুতরাং উত্তরগুলি সহজেই সামঞ্জস্য করা যায়, সম্ভবত কোনও এক-আকারের-ফিট নেই (কেবল বাশ / আইফোনফিগ ব্যবহার করে) ।