W Ubuntu za pomocą polecenia ifconfig -a
uzyskuję wszystkie informacje o moich interfejsach ethernet / wifi.
Ale muszę uzyskać jako wynik tylko adres MAC, taki jak:
ab:cd:ef:12:34:56
57:89:12:34:ac:23
12:34:56:ab:cd:ef
Jak mogę to uzyskać?
command-line
networking
simone_s1994
źródło
źródło
LANG=C ifconfig -a
zamiastifconfig -a
do instalacji w języku innym niż angielski, mogą występować problemy z grep. (tzn. w moim systemieHWaddr
jestdirecciónHW
)ifconfig -a | grep -i hw-*
?-*
ma coś znaczyć?HW
ale stwierdził, że jest poHWaddr
hiszpańsku, jak sądzę / widzę,direcciónHW
więc po prostuHW
można;)grep
„jest wysoce eksperymentalne”. Jeśli chcesz korzystać z podstawowej regex, odpowiednik polecenia jestifconfig -a | grep -o 'HWaddr [[:xdigit:]:]*'
lub, jeśli wolisz,ifconfig -a | grep -o 'HWaddr [a-f0-9:]*'
. Pominąłem końcowe,$
ponieważ wynik zawiera spacje po adresie MAC i prawdopodobnie nie chcesz ich.Możesz uzyskać dostęp do
address
pliku dla każdego urządzenia w/sys
wirtualnym systemie plików. Adres MAC powinien znajdować się w/sys/class/net/<device-name>/address
:Dla wszystkich urządzeń:
źródło
ip
także istnieje od lat.Oto kilka sposobów:
grep
. Są różne wyrażenia regularne, które je wychwycą. Tutaj szukam 5 powtórzeń 2 liter lub cyfr, a następnie dwukropka, a następnie dowolnych dwóch znaków.-i
Sprawia, że wielkość liter nieczuły i-o
markigrep
wydrukować tylko dopasowaną część.-E
włącza rozszerzone wyrażenia regularne. Ten sam regex działa również z PCREs (-P
).sed
.-n
Hamuje normalne wyjście i-r
umożliwia rozszerzonych wyrażeń regularnych. Używając tego samego wyrażenia regularnego jak powyżej, ten skrypt spróbuje zastąpić wszystko w wierszu częścią, która pasuje do wyrażenia regularnego. Jeśli podstawienie zakończyło się powodzeniem, wydrukowany zostanie wynikowy wiersz (z powodup
końca zamiany).awk
. Jeśli linia zaczyna się od znaku słowa ([a-zA-Z0-9_]
) i ma 5 pól, wydrukuj ostatnie.Perl, gdzie, jak zwykle, jest więcej niż jeden sposób, aby to zrobić. Ta jest taka sama logika jak
awk
powyżej.-a
Mówi Perl podzielić każdą linię wejścia do@F
tablicy.Alternatywnie możesz użyć wyrażenia regularnego z poprzednich podejść:
Coreutils.
źródło
Jak niektórzy komentowali,
ifconfig
jest przestarzałe na rzeczip
polecenia. Łącząc różne rozwiązania i komentarze, użyłbym:źródło
ifconfig -a | grep HWaddr | awk '{print $5}'
Jeśli dane wyjściowe systemu nie są w języku angielskim w tym poleceniu, warto uruchomić je w ten sposób.
LANG=C ifconfig -a | grep HWaddr | awk '{print $5}'
Dotyczy to wszystkich rozwiązań.
źródło
grep
osobno, możesz filtrowaćawk
bezpośrednio tak:ifconfig -a | awk '/HWaddr/ { print $5 }'
LANG=C ifconfig -a
zamiastifconfig -a
do instalacji w języku innym niż angielski, mogą występować problemy z grep. (tzn. w moim systemieHWaddr
jestdirecciónHW
)@Helio
na początku komentarza. Jeśli nie, nie otrzymam powiadomienia.