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.