শুধুমাত্র সক্রিয় ইন্টারফেস দেখানোর জন্য কীভাবে আইফোনফিগ ব্যবহার করবেন


22

ডিফল্টরূপে ifconfigআমাকে সমস্ত উপলভ্য ইন্টারফেস দেখাবে, তবে আমি যদি কেবল এটি প্রদর্শন করতে চাই তবে কী হবে active? পছন্দ করুন, en0কেবল নীচে।

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 14:10:9f:e0:eb:c9 
    inet6 fe80::1610:9fff:fee0:ebc9%en0 prefixlen 64 scopeid 0x4 
    inet X.X.X.X netmask 0xffffff00 broadcast 101.6.69.255
    nd6 options=1<PERFORMNUD>
    media: autoselect
    **status: active**
en3: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=60<TSO4,TSO6>
    ether 32:00:14:e7:4f:80 
    media: autoselect <full-duplex>
    **status: inactive**

বিজ্ঞপ্তি ifconfig en0সন্তুষ্ট হবে না, en0সর্বদা সক্রিয় নয়;)

আমি ম্যাক ওএস এক্স চালাচ্ছি।


2
ifconfigবাস্তবায়নগুলি পরিবর্তিত হওয়ায় আপনার ওএস উল্লেখ করা গুরুত্বপূর্ণ । এছাড়াও, ব্যবহারের ifconfigপ্রয়োজনীয়তা কেন ? আপনার শেষ লক্ষ্য কি?
জর্ডানম

হাই @ জর্দান, আমার লক্ষ্য হ'ল সক্রিয় ইন্টারফেসের আইপি ঠিকানা পাওয়া, প্রায়শই একটি ওয়্যারলেস বা তারযুক্ত ইথারনেট ইন্টারফেস।
কিওয়ারুইপ

আপনি সক্রিয় ইন্টারফেসটি কীভাবে সংজ্ঞায়িত করবেন?
বেনামে

উত্তর:


24

সমস্ত সক্রিয় পরিষেবাদির একটি সম্পূর্ণ বিবরণ পেতে, চেষ্টা করুন:

ifconfig | pcregrep -M -o '^[^\t:]+:([^\n]|\n\t)*status: active'

এই সাধারণ রেজেক্সটি কেবল সক্রিয় ইন্টারফেস এবং তাদের সমস্ত তথ্য ফিল্টার করতে পারে। আমি আপনাকে আপনার ~ /। প্রোফাইলে বা ~ / .bash_profile ফাইলে (সম্ভবত ifactive?) ফাইলের জন্য একটি উপাধি রেখেছি

কেবল ইন্টারফেসের নাম পেতে (স্ক্রিপ্টগুলির জন্য দরকারী), ব্যবহার করুন:

ifconfig | pcregrep -M -o '^[^\t:]+:([^\n]|\n\t)*status: active' | egrep -o -m 1 '^[^\t:]+'

এটি কাজ করার জন্য আপনাকে প্যাকগ্রিপ ইনস্টল করতে হবে । এটি চালু macports pcre প্যাকেজের মধ্যে। বিকল্পভাবে, এটি GNU গ্রেপের সাথে ব্যবহারের পরিবর্তে ব্যবহার করা উচিত তবে বাকীগুলির সাথে একই, তবে আমি এটি পরীক্ষা করিনি। grep -Pzopcregrep -M -o


2

আপনি যদি কেবলমাত্র "এন্ট্রি" এটিতে প্রিন্ট করতে চান status: activeতবে আপনি যদি এই অ্যাঙ্ক প্রোগ্রামটির মতো কিছু ব্যবহার করতে পারেন তবে ফিল্টার হিসাবে ifconfig আউটপুট:

#!/usr/bin/awk -f
BEGIN            { print_it = 0 }
/status: active/ { print_it = 1 }
/^($|[^\t])/     { if(print_it) print buffer; buffer = $0; print_it = 0 }
/^\t/            { buffer = buffer "\n" $0 }
END              { if(print_it) print buffer }

যখন প্রতিটি "এন্ট্রি" শুরু হয় (একটি লাইন খালি থাকে বা কোনও ট্যাব দিয়ে শুরু হয় না), বাফারে প্রবেশটি সংরক্ষণ শুরু করুন। কোনও ট্যাব দিয়ে শুরু হওয়া পরবর্তী কোনও লাইন এই বাফারে যুক্ত করুন। যাদু স্ট্রিং জন্য দেখুন status: active; যদি এর মতো একটি লাইন দেখা যায় তবে নতুন "এন্ট্রি" শুরু হলে (বা ইনপুট শেষ হবে) বাফারটি প্রিন্ট করুন (পূর্ববর্তী "এন্ট্রি")।

উপরের প্রোগ্রামের পাঠ্যটি একটি ফাইলে সংরক্ষণ করুন এবং এটি ব্যবহার করুন:

ifconfig -a | awk -f /path/to/file

অথবা, আপনি যদি chmod +xফাইল করেন তবে আপনি এটি কিছুটা সহজ করতে পারেন:

ifconfig -a | /path/to/file

2

আপনি কিছু বাশ স্ক্রিপ্টিংয়ের বিরুদ্ধে না থাকলে আপনি এটি করতে পারেন:

for i in $(ifconfig -lu); do if ifconfig $i | grep -q "status: active" ; then echo $i; fi; done

এটি সক্রিয় নেটওয়ার্ক ইন্টারফেসগুলি তালিকাভুক্ত করবে। ম্যাক ওএস এক্স 10.13 এ পরীক্ষিত।

সুন্দর জিনিস হ'ল আপনার কোনও কিছু ইনস্টল করার দরকার নেই। কেবলমাত্র টার্মিনালে উপরেরটি চালান।


এটি সেরা উত্তর হওয়া উচিত, তবে ifconfig -luডিবিয়ান নিয়ে কাজ করবে না। তবে ওপি ম্যাকওএসকে যেভাবেই ব্যবহার করছে তাই এই সমাধানটি বিএসডি'র সিস্টেমে কাজ করবে ifconfig। আমি নীচে আরেকটি উত্তর পোস্ট করেছি যা ব্যবহার না করে একই রকম হয়ifconfig -lu
রকিব ​​ফিহা

1

আপনার মন্তব্য এবং প্রশ্ন পড়া, দেখে মনে হচ্ছে আপনি আসলে কেবল ইন্টারফেসগুলি পেতে চান যেগুলিকে একটি আইপি ঠিকানা বরাদ্দ করা হয়েছে।

আপনি ifconfigএবং এর সাথে এটি দ্রুত করতে পারেন grep

কমান্ড চলমান:

ifconfig | grep 'Link\|inet'

অনুরূপ কিছু উত্পাদন করা উচিত:

এথ0 লিঙ্ক এনক্যাপ: ইথারনেট এইচডাব্ল্ডার 00: 11: 22: 33: 44: 55
এথ 1 লিঙ্ক এনক্যাপ: ইথারনেট এইচডাব্ল্ডার 00: 11: 22: 33: 44: 66  
          ইনেট অ্যাডার: 192.168.0.8 বিকাশ: 192.168.0.255 মাস্ক: 255.255.255.0
লিংক এনক্যাপ: স্থানীয় লুপব্যাক  
          ইনেট অ্যাডার: 127.0.0.1 মাস্ক: 255.0.0.0

এটি ইন্টারফেসের নাম এবং আইপি সহ প্রতিটি লাইন দেখায় যদি তাদের একটি থাকে।

আরও কিছু নির্দিষ্ট রেগেক্স ম্যাজিক আপনাকে যা প্রয়োজন ঠিক তা পেতে পারে।


2
ধন্যবাদ তবে activeবিবেচনা কোথায় ?
কিউয়ারুইপ

যদি ইন্টারফেসের পরে কোনও লাইন থাকে, তবে এটির জন্য একটি আইপি ঠিকানা বরাদ্দ করা হয়েছে, এবং আমি আপনাকে যা সংগ্রহ করি তার অর্থ এটি 'সক্রিয়' হিসাবে চিহ্নিত হবে।
নাথান ম্যাককয়

1

আমি আশা করি প্রশ্নটি কিছুটা পরিষ্কার হয়ে গেল। ধরে নিচ্ছি যে Active interface only, আপনি বোঝাতে চেয়েছেন কেবলমাত্র সক্রিয় ইন্টারফেসের নাম (আমার ক্ষেত্রে UPএবং RUNNINGস্থিতিতে active) অন্য কোনও বিবরণ ছাড়াই। তারপরে এটি চেষ্টা করুন:

ifconfig | \
  grep "UP\|RUNNIG" \
  | awk '{print $1}' \
  | grep ':' \
  | tr -d ':' \
  | grep -v lo

আউটপুট দেখতে হবে:

en0
en1
en2
bridge0
p2p0
awdl0
llw0
utun0
utun1
utun2
utun3
en6

grep -vক্ষেত্রটি সামঞ্জস্য করুন এবং প্রয়োজনে আরও অযাচিত ইন্টারফেস loopback-> loইত্যাদি যুক্ত করুন।

এখন, আপনি যদি চান এবং আপনার খুঁজে পাওয়া ইন্টারফেসগুলি বর্তমানে সক্রিয় রয়েছে কিনা তা খতিয়ে দেখা উচিত। তারপরে আমরা কেবল তাদের ifconfig <interface>নীচে দেখানো মত মতামত হিসাবে কেবল পাস করতে পারি :

[[ $(ifconfig en0 | grep -w active) ]] && echo "en0 is active"

এটি আরও সরলকরণ এবং একটি ফাংশন এ প্রয়োগ:

checkActiveInterfaces()
{
  local intARR=( $(ifconfig | \
      grep "UP\|RUNNIG" \
      | awk '{print $1}' \
      | grep ':' \
      | tr -d ':' \
      | grep -v lo) );
    intARR=( $(printf "%s\n" "${intARR[@]}" | sort -u) );
    for i in "${intARR[@]}"; do
      [[ $(ifconfig $i | grep -w active) ]] && {
       echo "$i"
    }
    done
}

এই ফাংশনটি সম্পাদন করলে কেবল সক্রিয় ইন্টারফেসগুলিই ফিরে আসবে। আমার ক্ষেত্রে:

awdl0
en0
llw0

0

নিম্নলিখিতটি কেবলমাত্র সেই ইন্টারফেসগুলি মুদ্রণ করবে যা আইপি রাখার জন্য কনফিগার করা হয়েছে

ifconfig | grep "inet.*broadcast"

0

শুধুমাত্র অ্যাক্টিভ ইন্টারফেস ম্যাক পান:

cat /sys/class/net/$(ip addr | awk '/state UP/ {print $2}' | sed 's/.$//')/address

নোট করুন যে ম্যাকওএসের ipডিফল্টরূপে নেই; তার জন্য আপনার হোমব্রু দরকার, তারপরে brew install iproute2macএকবার চালান । এর উত্স কোডটি github.com/brona/iproute2mac
জেরোয়েন ওয়েয়ার্ট প্লুইমার্স

-1
$ ifconfig | grep "inet addr:" | grep -v 127.0.0.1 | sed -e 's/Bcast//' | cut -d: -f2

কিভাবে এটা কাজ করে:

  • ifconfig
  • "ইনেট অ্যাডার" যুক্ত লাইনের জন্য গ্রেপ
    • এই লাইনে আইপি রয়েছে।
  • "127.0.0.1" না থাকা লাইনের জন্য গ্রেপ
    • আমরা সাধারণত লোকালহোস্টের বিষয়ে চিন্তা করি না।
    • -v হ'ল বিপরীতমুখী p
  • অবশিষ্ট রেখাগুলি থেকে, "বিস্কুট" সরান
  • সীমানা হিসাবে ":" ব্যবহার করে ক্ষেত্র 2 কেটে দিন
    • উত্তর মুদ্রণ।

-1
ifconfig en0 | grep status

এটি ইথারনেট সংযোগ en0 এর স্থিতি প্রদর্শন করবে

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