Ubuntu’da sadece MAC adresi


36

Ubuntu'da komut ile ifconfig -aethernet / wifi arayüzlerimle ilgili tüm bilgileri edindim.

Ancak , yalnızca MAC adresi olarak çıktı almam gerekiyor , şöyle ki:

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

Bunu nasıl elde edebilirim?

Yanıtlar:


39

En kolay yol grepPCRE ile kullanmak olacaktır :

$ ifconfig -a | grep -Po 'HWaddr \K.*$'
74:d4:35:84:34:13  
  • grep -Pperluyumlu Regex kullanmamızı sağlayacak

  • grep -o sadece çizginin eşleşen kısmını alacaktır

  • Biz eşleştirdiniz HWaddrbizim arzu maç (MAC adresleri) önce ve sonra atmak HWaddrtarafından \Ksadece MAC adreslerini yazdırmak için.

@Helio önemli bir noktadan bahsetti, bu sizin dilinize, yani localeayarlarınıza oldukça bağlı . CYerel ayarları (ASCII karakter kümesini kullanır) yalnızca bu komut için kullanabileceğinizi aşmak için:

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

2
Sen kullanabilir LANG=C ifconfig -ayerine ifconfig -agrep ile ilgili sorunlar olabilir, olmayan ingilizce yüklemeler için. (yani benim sistemde, HWaddrolduğu direcciónHW)
— Helio

Ne @Helio yazarsanız: ifconfig -a | grep -i hw-*?
— JoKeR

1
@JoKeR sadece meraklı - bunun bir -*şey ifade etmesi mi gerekiyor?
— muru

@muru gerçekten ben bulabildiği Coudn't düşünce kendimi karıştı değil HWama o belirtilen HWaddrve G / tahmin gördüğünüz gibi ispanyolca direcciónHWbasitçe sadece oluyor böylece HW); olabilir
— JoKeR

Perl regex grep"son derece deneysel" dir. Temel regex kullanmak istiyorsanız, eşdeğer komut ifconfig -a | grep -o 'HWaddr [[:xdigit:]:]*'veya eğer isterseniz ifconfig -a | grep -o 'HWaddr [a-f0-9:]*',. İzi ihmal ettim $çünkü çıktı MAC adresinden sonra boşluklar içeriyor ve muhtemelen bunları istemiyorsunuz.
— Paddy Landau

67

Sanal dosya sistemindeki addressher cihaz için dosyaya erişebilirsiniz /sys. MAC adresi şöyle olmalıdır /sys/class/net/<device-name>/address:

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

Tüm cihazlar için:

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

6
On yıl :) için kaldırılmış bir aracı kullanarak değil 1
— hobbs

@ hobbs Bekle, bu hangi araç?
— 15'te

@detly ifconfig
— hobbs

1
@hobbs Woah. Farkında değildim. Makinemdeki kullanımdan kaldırma uyarısını yazdırmıyor.
— 15'te

1
@detly ifconfig için kullanımdan kaldırılmış yıllarda artık ve ipayrıca yıllardır civarında olmuştur.
— muru

11

İşte birkaç yol:

  1. grep. Bunları alacak olan düzenli ifadeler var. Burada, iki harf veya ardından iki noktadan sonra 2 harf veya sayıdan oluşan 5 tekrar arıyorum. -iMaç vaka duyarsız hale getirir ve -omarkaları grepsadece eşleşti bölümünü yazdırmak. -Egenişletilmiş düzenli ifadeler sağlar. Aynı regex PCRE'ler ( -P) ile de çalışır .

    ifconfig -a | grep -ioE '([a-z0-9]{2}:){5}..'
    
  2. sed. -nNormal çıkış bastırır ve -rgenişletilmiş düzenli ifadeler sağlar. Yukarıdakiyle aynı regex kullanarak, bu komut satırı ile ilgili her şeyi regex ile eşleşen kısmıyla değiştirmeye çalışır. Eğer oyuncu değişikliği başarılı olduysa, sonuçtaki satır ( poyuncu değişikliği sonunda) yazdırılır .

    ifconfig -a | sed -rn 's/.*(([a-z0-9]{2}:){5}..).*/\1/p'
    
  3. awk. Satır bir kelime karakteriyle ( [a-zA-Z0-9_]) başlıyorsa ve 5 alan varsa, sonuncuyu yazdırın.

    ifconfig -a | awk '/^\w/&&NF==5{print $NF}'
    
  4. Perl, her zamanki gibi, yapmanın birden fazla yolu var. Bu, awkyukarıdakiyle aynı mantıktır . -aHer bir giriş hattını ayırmak için Perl anlatır @Fdizisi.

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

    Alternatif olarak, regex'i önceki yaklaşımlardan kullanabilirsiniz:

    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

Bazılarının da söylediği gibi, komutun ifconfiglehine itiraz edildi ip. Bu yüzden çeşitli çözümleri ve yorumları birleştirerek kullanırdım:

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

4

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

Sistem çıktınız bu komutta İngilizce değilse, bu şekilde çalıştırmanız mantıklı olacaktır.

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

Bu, tüm çözümler için geçerlidir.


5
grepAyrı ayrı kullanmak yerine awkdoğrudan şöyle filtreleyebilirsiniz :ifconfig -a | awk '/HWaddr/ { print $5 }'
— krt

Evet, bunu yapmanın bir çok yolu var.
— Pilot6

2
Sen kullanabilir LANG=C ifconfig -ayerine ifconfig -agrep ile ilgili sorunlar olabilir, olmayan ingilizce yüklemeler için. (yani benim sistemde, HWaddrolduğu direcciónHW)
— Helio

İyi haber. Ama benim Rus kurulumumda hala HWaddr.
— Pilot6

Rus kurulumunuz olabilir, ancak İspanyol kurulumum değil. ;-) Büyük bir sorun olabilir. Lütfen @Helioyorumun başına geçin. Olmazsa, haberdar edilmeyeceğim.
— Helio
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.