উবুন্টুতে কেবল ম্যাকের আউটপুট


36

উবুন্টুতে, কমান্ড সহ ifconfig -a, আমি আমার ইথারনেট / ওয়াইফাই ইন্টারফেস সম্পর্কে সমস্ত তথ্য পাই।

তবে আমাকে কেবল ম্যাক ঠিকানা হিসাবে আউটপুট হিসাবে গ্রহণ করতে হবে , যেমন:

ab:cd:ef:12:34:56
57:89:12:34:ac:23
12:34:56:ab:cd:ef

আমি কীভাবে এটি পেতে পারি?

উত্তর:


40

সবচেয়ে সহজ উপায় grepহ'ল পিসিআরই ব্যবহার করা:

$ ifconfig -a | grep -Po 'HWaddr \K.*$'
74:d4:35:84:34:13  
  • grep -Pআমাদের perlসামঞ্জস্যপূর্ণ রেজেক্স ব্যবহার করতে সক্ষম করবে

  • grep -o কেবলমাত্র লাইনের মিলে যাওয়া অংশটি গ্রহণ করবে

  • আমরা মিল খেতে HWaddrআমাদের কাঙ্ক্ষিত ম্যাচ (যেমন MAC ঠিকানা) আগে ও পরে বাতিল HWaddrদ্বারা \Kশুধুমাত্র MAC অ্যাড্রেস প্রিন্ট করতে।

@ হেলিও একটি গুরুত্বপূর্ণ বিষয় উল্লেখ করেছেন, এটি আপনার ভাষার উপর নির্ভর করে অর্থাৎ localeসেটিংস। এটি অতিক্রম করতে আপনি Cকেবল এই আদেশের জন্য লোকেল (ASCII অক্ষর সেট ব্যবহার করেন ) ব্যবহার করতে পারেন :

$ LANG=C ifconfig -a | grep -Po 'HWaddr \K.*$'
74:d4:35:84:34:13  

2
আপনি ইংরাজীবিহীন ইনস্টলেশনগুলির LANG=C ifconfig -aপরিবর্তে ব্যবহার করতে পারেন ifconfig -a, গ্রেপের সমস্যা হতে পারে। (অর্থাত্ আমার সিস্টেমে HWaddrহ'ল direcciónHW)
হেলিও 26'15

কি @Helio আপনি টাইপ যদি: ifconfig -a | grep -i hw-*?
জোকের ২

1
@JoKeR শুধু জানতে আগ্রহী - যে হয় -*গড় কিছু অনুমিত?
মুরু

@ মুরু আসলেই আমি নিজেকে বিভ্রান্ত করি না ভেবেছিলাম সে খুঁজে পাবে না HW তবে HWaddrস্প্যানিশ ও স্প্যানিশ বলেছিল যে আমার অনুমান অনুসারে / দেখুন direcciónHWযাতে এটি কেবল সহজ HWহতে পারে;)
জো কের ২

grep"অত্যন্ত পরীক্ষামূলক" -এ পার্ল রেজেক্স । আপনি মৌলিক Regex ব্যবহার করতে চান তাহলে, সমতুল্য কমান্ড ifconfig -a | grep -o 'HWaddr [[:xdigit:]:]*', আপনি যদি চান বা, ifconfig -a | grep -o 'HWaddr [a-f0-9:]*'। আমি পেছনটি বাদ দিয়েছি $কারণ ম্যাক ঠিকানার পরে আউটপুটটিতে স্পেস রয়েছে এবং সম্ভবত আপনি সেগুলি চান না।
ধানের ল্যান্ডাউ

67

আপনি ভার্চুয়াল ফাইল সিস্টেমে addressপ্রতিটি ডিভাইসের জন্য ফাইল অ্যাক্সেস করতে পারেন /sys। ম্যাকের ঠিকানাটি এতে থাকা উচিত /sys/class/net/<device-name>/address:

$ cat /sys/class/net/enp1s0/address
34:17:eb:5d:88:7c

সমস্ত ডিভাইসের জন্য:

$ cat /sys/class/net/*/address
34:17:eb:5d:88:7c
00:00:00:00:00:00
64:5a:04:69:50:45

6
এক দশক ধরে
অবহেলিত

@ হোবস অপেক্ষা করুন, এটি কোন সরঞ্জাম?
অবধি

@ বিশদভাবে ifconfig
শখ

1
নিবন্ধন করুন আমি সেটা সম্পর্কে সচেতন ছিলাম না। এটি আমার মেশিনে অবমূল্যায়ন সতর্কতা মুদ্রণ করে না।
অবধি

1
@ বিশদভাবে ইফকনফিগকে এখন বছরের পর বছর ধরে অবহেলা করা হয়েছে , এবং ipপ্রায় কয়েক বছর ধরে রয়েছে।
মুড়ু

11

এখানে কয়েকটি উপায় রয়েছে:

  1. grep। বিভিন্ন নিয়মিত প্রকাশ রয়েছে যা এগুলি গ্রহণ করবে। এখানে আমি 2 টি অক্ষর বা সংখ্যার 5 টি পুনরাবৃত্তি খুঁজছি যার পরে কোনও কোলন রয়েছে, তারপরে কোনও দুটি অক্ষর। -iম্যাচ ক্ষেত্রে অবশ করে তোলে এবং -oতোলে grepশুধুমাত্র মেলা অংশ প্রিন্ট করা হবে। -Eবর্ধিত নিয়মিত অভিব্যক্তি সক্ষম করে। একই রেজেক্স পিসিআরই ( -P) এর সাথেও কাজ করে ।

    ifconfig -a | grep -ioE '([a-z0-9]{2}:){5}..'
    
  2. sed-nস্বাভাবিক আউটপুট শুষে এবং -rবর্ধিত রেগুলার এক্সপ্রেশনের দেয়। উপরের মতো একই রেজেক্স ব্যবহার করে, এই স্ক্রিপ্টটি রেজেক্সের সাথে মেলে এমন অংশের সাথে লাইনের সমস্ত কিছু প্রতিস্থাপন করার চেষ্টা করবে। প্রতিস্থাপনটি সফল হলে, ফলাফল লাইনটি মুদ্রিত হয় ( pবিকল্পের শেষে রয়েছে কারণ )।

    ifconfig -a | sed -rn 's/.*(([a-z0-9]{2}:){5}..).*/\1/p'
    
  3. awk। যদি লাইনটি কোনও শব্দের অক্ষর ( [a-zA-Z0-9_]) দিয়ে শুরু হয় এবং এর 5 টি ক্ষেত্র থাকে তবে শেষটি মুদ্রণ করুন।

    ifconfig -a | awk '/^\w/&&NF==5{print $NF}'
    
  4. পার্ল, যেখানে যথারীতি এটি করার একাধিক উপায় রয়েছে। এটি একটি awkউপরের মত একই যুক্তিযুক্ত । -aPerl বলে প্রতিটি ইনপুট লাইন বিভক্ত করতে @Fঅ্যারে।

    ifconfig -a | perl -lane 'if(/^\w/&&$#F==4){print $F[$#F]}'
    

    বিকল্পভাবে, আপনি পূর্ববর্তী পদ্ধতিগুলি থেকে রেজেক্স ব্যবহার করতে পারেন:

    ifconfig -a | perl -lne '/(([a-z0-9]{2}:){5}..)/ && print $1'
    
  5. Coreutils।

    LANG_ALL=C ifconfig -a | grep 'HWadd' | tr -s ' ' '\t' | cut -f 5
    

5

কিছু মন্তব্য করেছেন হিসাবে, কমান্ডের ifconfigপক্ষে হ্রাস করা হয় ip। তাই বিভিন্ন সমাধান এবং মন্তব্যের সমন্বয় করে আমি ব্যবহার করব:

$ LANG=C ip link show | awk '/link\/ether/ {print $2}'
FF:FF:FF:FF:FF:FF

4

ifconfig -a | grep HWaddr | awk '{print $5}'

যদি এই কমান্ডটিতে আপনার সিস্টেমের আউটপুট অ-ইংরেজী হয়, তবে এটি এইভাবে চালানো বোধগম্য।

LANG=C ifconfig -a | grep HWaddr | awk '{print $5}'

এটি সমস্ত সমাধানের জন্য প্রযোজ্য।


5
grepপৃথক পৃথকভাবে ব্যবহার না করে আপনি awkসরাসরি এর মাধ্যমে ফিল্টার করতে পারেন : ifconfig -a | awk '/HWaddr/ { print $5 }'
krt

হ্যাঁ, এটি করার অনেকগুলি উপায় রয়েছে।
পাইলট 6

2
আপনি ইংরাজীবিহীন ইনস্টলেশনগুলির LANG=C ifconfig -aপরিবর্তে ব্যবহার করতে পারেন ifconfig -a, গ্রেপের সমস্যা হতে পারে। (অর্থাত্ আমার সিস্টেমে, HWaddrহ'ল direcciónHW)
হেলিও

ভাল নোটিশ। তবে আমার রাশিয়ান ইনস্টলেশনতে এটি এখনও এইচডাব্লার।
পাইলট 6

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