কিভাবে একটি আইফোনফিগ কমান্ড থেকে প্রথম আইপি ঠিকানা ক্যাপচার?


9

ifconfigকমান্ড থেকে আসা প্রথম আইপি ঠিকানাটি কীভাবে ক্যাপচার করবেন ?

ifconfig -a
enw178032: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 100.14.22.12  netmask 255.255.0.0  broadcast 100.14.255.255
        inet6 fe80::250:56ff:fe9c:158a  prefixlen 64  scopeid 0x20<link>
        ether 00:10:56:9c:65:8a  txqueuelen 1000  (Ethernet)
        RX packets 26846250  bytes 12068811576 (11.2 GiB)
        RX errors 0  dropped 58671  overruns 0  frame 0
        TX packets 3368855  bytes 1139160934 (1.0 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

প্রত্যাশিত ফলাফল:

IP=100.14.22.12

3
প্রশ্নের উত্তর দেওয়া হয়েছে, হয় awk বা গ্রেপ / কাট, ইত্যাদি ব্যবহার করে তবে এটি সাধারণভাবে ব্যবহার করা এবং ifconfig থেকে গ্রেপ করা খারাপ ধারণা। আধুনিক লিনাক্স বিল্ডগুলিতে আইপি আরও উপযুক্ত এবং আরও ভাল সমর্থিত।
পেড্রো

1
এটি একটি এক্সওয়াই সমস্যার মতো শোনাচ্ছে। আপনি আসলে কি তথ্য চান? মেশিনের প্রধান নেটওয়ার্ক-মুখী আইপি ঠিকানা? মেশিনের কোনও নেটওয়ার্ক-মুখী আইপি ঠিকানা? প্রথম নেটওয়ার্ক অ্যাডাপ্টারের আইপি ঠিকানা? কোনও আইপি অ্যাড্রেস, এটি কী তা বিবেচ্য নয়? আপনার প্রয়োজনীয় তথ্য পাওয়ার জন্য সম্ভবত আরও সরাসরি, নির্ভুল এবং পোর্টেবল উপায় রয়েছে।
alex.forencich

উত্তর:


20

এটি ব্যবহার এড়ানো ভাল ifconfigকোনও স্ক্রিপ্টায় আইপি ঠিকানা পাওয়ার জন্য এটি কিছু বিতরণে অবমূল্যায়ন করা হয় (উদাঃ CentOS এবং অন্যরা, এটি ডিফল্টরূপে ইনস্টল করবেন না)।

অন্য সিস্টেমে, বিতরণের রিলিজ অনুযায়ী ইফকনফিগের আউটপুট পরিবর্তিত হয় (যেমন আউটপুট / স্পেসিং / ক্ষেত্রগুলির ক্ষেত্র 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 } '

@ রোমানের কাছ থেকে নির্লজ্জভাবে ধারণাটি গ্রহণ করা

$ 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:

-ও, -অনলাইন
একক লাইনে প্রতিটি রেকর্ড আউটপুট, '\' অক্ষর দিয়ে রেখা ফিড প্রতিস্থাপন করে। আপনি ডাব্লুসি (1) দিয়ে রেকর্ড গণনা করতে বা আউটপুট গ্রেপ করতে (1) দেখতে চাইলে এটি সুবিধাজনক।

কেন ifconfigপরামর্শ দেওয়া হচ্ছে না তার একটি উদাহরণ দেখুন : বিবিবি: b বিবিবি-কনফ - চেক` আইপি অ্যাড্রেসগুলি `ইনেট` হিসাবে দেখায় - ifconfig woes

কেন ifconfigবাইরে বেরোচ্ছে তা বোঝার জন্য , 'ifconfig' এবং 'ip' কমান্ডের মধ্যে পার্থক্য দেখুন

ifconfigনেট-টুলস থেকে, যা দীর্ঘদিন ধরে লিনাক্স নেটওয়ার্ক স্ট্যাকের সাথে সম্পূর্ণরূপে রাখতে সক্ষম হয় নি। এটি এখনও নেটওয়ার্ক কনফিগারেশনের জন্য ioctl ব্যবহার করে, যা কার্নেলের সাথে ইন্টারঅ্যাক্ট করার একটি কুশ্রী এবং কম শক্তিশালী উপায়।

2005 সালের দিকে নেটওয়ার্ক স্ট্যাক নিয়ন্ত্রণের জন্য একটি নতুন পদ্ধতি চালু করা হয়েছিল - নেটলিঙ্ক সকেট।

নেটওয়ার্ক ইন্টারফেসটি কনফিগার করতে iproute2সেই পূর্ণ-ডুপ্লেক্স নেটলিঙ্ক সকেট প্রক্রিয়াটি ব্যবহার করে, যখন ifconfigএকটি আইওসিটিএল সিস্টেম কলের উপর নির্ভর করে।


আমি এথ0 কে ডিফল্ট হিসাবে সেট না করা পছন্দ করি কারণ এই নামটি মেশিনে পরিবর্তিত হয়, আমরা কি নমনীয় বাক্য গঠন করতে পারি
yael

@ আইয়েল পরিবর্তন হয়েছে, এথ0 বের করেছেন। তবে রোমান আমার ভিতরে "আইপি =" প্রিন্ট করার চেয়ে ভাল করেছে awk। আমার জন্য অনেক বেশি মস্তিষ্কের শক্তি, এখনও জেগে আছে। এড়িয়ে চলুন ifconfig, এর ভবিষ্যত নেই এবং আইপি ঠিকানার অবস্থান পরিবর্তিত হয়েছে, লিনাক্সের জন্য কমপক্ষে দুটি ভিন্ন সংস্করণ / বাস্তবায়ন (?) রয়েছে যা আমি জানি।
রুই এফ রিবেইরো

শুধু তথ্যের জন্য, আইপ্রেট 2 এর নতুন সংস্করণগুলিতে (যেমন: সেন্টোস 7 বা দেবিয়ান 8 তে নয়) আইপি একটি -briefপ্যারামিটার নিতে পারে এবং এর আউটপুট পার্স করা আরও সহজ হয়ে যায় (2015-08-31: git.kernel.org/pub/scm/network/iproute2 /iproute2.git/commit/… )
এবি

@ এবিও -ও যেমন আমি ব্যবহার করি সাহায্য করার জন্য, ধন্যবাদ, এটি পরীক্ষা করে নেবে
রুই এফ রিবেইরো

1
আহ, আমি -oস্ক্রিপ্টগুলির জন্য কোনটি কার্যকর বলে মনে হচ্ছে তা সম্পর্কে আমি জানতাম না
এবি

6

Awk সমাধান:

ifconfig -a | awk 'NR==2{ sub(/^[^0-9]*/, "", $2); printf "IP=%s\n", $2; exit }'

নমুনা আউটপুট:

IP=10.0.2.15

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.