우분투에서 MAC 주소 만 출력


36

Ubuntu에서는 command ifconfig -a를 사용하여 이더넷 / wifi 인터페이스에 대한 모든 정보를 얻습니다.

그러나 다음과 같이 MAC 주소 출력으로 얻어야합니다 .

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

이것을 어떻게 얻을 수 있습니까?

답변:


39

가장 쉬운 방법은 grepPCRE와 함께 사용하는 것입니다 .

$ ifconfig -a | grep -Po 'HWaddr \K.*$'
74:d4:35:84:34:13  
  • grep -Pperl호환되는 Regex 를 사용할 수있게 해줄 것입니다

  • grep -o 일치하는 부분 만 취합니다

  • 우리는 일치 한 HWaddr우리의 원하는 경기 (MAC 주소) 전에 다음 폐기 HWaddr에 의해 \K에만 MAC 주소를 인쇄 할 수 있습니다.

@Helio는 중요한 요점을 언급했습니다. 이는 언어, 즉 locale설정 에 따라 크게 다릅니다 . 이를 극복 C하기 위해이 명령에만 로케일 (ASCII 문자 세트 사용)을 사용할 수 있습니다 .

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

2
영어 이외의 설치 LANG=C ifconfig -a대신에 사용할 ifconfig -a수 있으며 grep에 문제가있을 수 있습니다. (예 : 내 시스템에서 HWaddr입니다 direcciónHW)
힐리오

@Helio 입력하면 어떻게 ifconfig -a | grep -i hw-*되나요?
JoKeR

1
@JoKeR 그냥 궁금-그게 -*뭔가를 의미 하는가?
muru

@muru 정말 혼란스러워하지 않습니다. 나는 그가 찾을 수 없다고 생각 HW했지만 그가 말하고 HWaddr스페인어로 말했듯 direcciónHW이 그것은 단순히 HW가능합니다.)
JoKeR

grep" 정말 실험적인" 펄 정규식 . 기본 정규식을 사용하려는 경우 해당하는 명령은 ifconfig -a | grep -o 'HWaddr [[:xdigit:]:]*'또는 원하는 경우 ifconfig -a | grep -o 'HWaddr [a-f0-9:]*'입니다. $출력에 MAC 주소 뒤에 공백이 포함되어 있기 때문에 후행을 생략했으며 아마도 원하지 않을 것입니다.
Paddy Landau 2016 년

67

가상 파일 시스템의 address각 장치에 대한 파일에 액세스 할 수 있습니다 /sys. MAC 주소는 다음과 같아야합니다 /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
10 년 동안 폐기 된 툴을 사용하지 않은 경우 +1 :)
21:06에

@hobbs 잠깐만 요, 어떤 도구입니까?
detly

@detly ifconfig를하는 것은
홉스

1
@hobbs 우와. 나는 그것을 몰랐다. 내 컴퓨터에는 지원 중단 경고가 표시되지 않습니다.
detly

1
@detly ifconfig를가에 더 이상 사용되지 않는 현재, 그리고 ip또한 년 동안 주변되었습니다.
muru

11

몇 가지 방법이 있습니다.

  1. grep. 이것을 선택할 다양한 정규 표현식이 있습니다. 여기서는 2 문자 또는 숫자의 5 반복과 콜론, 두 문자를 차례로 찾고 있습니다. 는 -i경기 케이스를 구분하게하고 -o차종은 grep단지 일치하는 부분을 인쇄 할 수 있습니다. -E확장 정규 표현식을 사용합니다. 동일한 정규식도 PCRE ( -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. Perl, 평소와 같이 여러 가지 방법이 있습니다. 이것은 awk위와 같은 논리 입니다. 이 명령 -a은 perl에게 각 입력 행을 @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

예,이 작업을 수행하는 방법은 정말 많습니다.
Pilot6

2
영어 이외의 설치 LANG=C ifconfig -a대신에 사용할 ifconfig -a수 있으며 grep에 문제가있을 수 있습니다. (예 : 내 시스템에서 HWaddr입니다 direcciónHW)
힐리오

좋은 소식입니다. 그러나 내 러시아어 설치에서는 여전히 HWaddr입니다.
Pilot6

귀하의 러시아어 설치는 가능하지만 스페인 설치는 그렇지 않습니다. ;-) 큰 문제가 될 수 있습니다. @Helio의견의 시작 부분에 넣으십시오 . 그렇지 않은 경우 알림을받지 않습니다.
Helio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.