사용 가능한 모든 네트워크 인터페이스의 장치 이름 만 나열


21

Linux 서버에서 사용 가능한 모든 네트워크 장치 이름 목록을 얻고 싶습니다. 나는 그것을 알았다

ifconfig

ifconfig가 꽤 많은 출력을 생성합니다.

eth0      Link encap:Ethernet  Hardware Adresse 08:00:27:fc:5c:98  
          inet Adresse:192.168.2.222  Bcast:192.168.2.255  Maske:255.255.255.0
          inet6-Adresse: fe80::a00:27ff:fefc:5c98/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:329 errors:0 dropped:0 overruns:0 frame:0
          TX packets:177 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000 
          RX bytes:41496 (40.5 KiB)  TX bytes:32503 (31.7 KiB)

eth1      Link encap:Ethernet  Hardware Adresse 08:00:27:e9:35:7d  
          [...]

eth2      Link encap:Ethernet  Hardware Adresse 08:00:27:ff:db:fe  
          [...]

lo        Link encap:Lokale Schleife  
          [...]

내가 달성하고자하는 것은

eth0
eth1
eth2
lo

또는 더 나은

eth0
eth1
eth2

"cat", "sed"및 "grep"의 조합으로이 작업을 수행 할 수 있다고 가정하지만 불필요한 정보를 제거하는 방법에 대한 단서는 없습니다.

답변:


17

이것을 시도하십시오 :

ifconfig -a | sed 's/[ \t].*//;/^$/d'

이것은 생략됩니다 lo:

ifconfig -a | sed 's/[ \t].*//;/^\(lo\|\)$/d'

고마워 dennis, 이것은 매력처럼 작동했습니다 ^^. 완벽한. 정규 표현식은 실제로 살펴 봐야합니다 ^^
ftiaronsem

Linux와 BSD에는 종종 다른 *nix유틸리티가 포함되어 있지만 불행히도이 솔루션은 Mac에서는 작동하지 않습니다. (
blong

ifconfigdeprected, 사용하는 것입니다 ip대신
pstanton은

이것은 OS X에서 작동하는 것 같습니다 :ifconfig -a | sed -E 's/[[:space:]:].*//;/^$/d'
추후 공지가있을 때까지 일시 중지되었습니다.

22

다른 대안은 다음과 같습니다.

ip -o link show | awk -F': ' '{print $2}'

아니면 :

ls /sys/class/net

사용 ls /sys/class/net하는 것이 /etc/local.d스크립트에서 더 나은 솔루션입니다. 위 openrcsed솔루션 :은 실행될 때 각 인터페이스의 끝에 추가 로 끝납니다 /etc/init.d/local(그러나 스크립트가 직접 실행될 때는 아닙니다).
Stuart Cardall

+ -o
1-

16

/ sys / class / net을 사용하고 경로를 제거하십시오.

$ basename -a /sys/class/net/*
eth0
eth1
lo
ppp0
tun0

6

이 시도:

ifconfig | cut -c 1-8 | sort | uniq -u
  • cut -c 1-8 각 줄의 처음 8자를 추출합니다.
  • sort 줄을 정렬
  • uniq -u 고유 한 줄만 인쇄하여 처음 8 자에 공백 만있는 설명 줄의 빈 줄을 제거합니다.

이것은 내가 시도한 두 개의 Linux 컴퓨터에서 작동하지만 MacBookPro (OS X 10.6.4) ifconfig에서는 공백 대신 탭을 사용하므로 조금 더 복잡합니다.

ifconfig | expand | cut -c1-8 | sort | uniq -u | awk -F: '{print $1;}'
  • expand 탭을 공백으로 변환
  • awk -F: '{print $1;}' 콜론 앞의 첫 번째 필드를 인쇄합니다.

사용 된 매개 변수를 설명하는 매우 자세한 답변을 보내 주셔서 감사합니다. 앞으로 비슷한 문제가 발생하면 어떤 게시물을 볼지 알고 있습니다 ;-). 불행히도 그것은 "lo"를 자르지 않았으므로 받아 들여진 대답은 dennis로 간다. 그러나 이것은 정말 유용한 답변입니다. 감사합니다 :-)
ftiaronsem

add | grep -v lo:-)
Doug Harris

4
ls /sys/class/net/
eth0  eth1  eth2  lo

또는 윤리가 필요한 경우 *

ls /sys/class/net/eth*
eth0
eth1
eth2

3

/sys파일 시스템 사용하기 :

basename -a $(ls /sys/devices/**/net/* -d)

ip와 Perl 사용하기 :

ip -o l|perl -lane'$F[1]=~s/://g;print $F[1]'

1

ifconfig출력 에서 인터페이스 이름을 추출하는 한 가지 방법이 있습니다 .

ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p'

특정 이름을 제외하려면 한 가지 방법으로 다음을 사용하여 필터링하십시오 grep.

ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p' | grep -Fvx -e lo

더 많은 이름을 제외 -e foo하려면 grep명령 에 더 많은 이름을 추가하십시오 .


귀하의 솔루션은 dennis와 동일하게 작동합니다. 불행히도 나는 두 개의 게시물을 수락 할 수 없으므로 dennis는 더 빠릅니다. 그럼에도 불구하고 특히 grep 설명에 감사드립니다.
ftiaronsem

1

첫 번째 열을 인쇄하려면

netstat -a | awk '{print $1}'

필요에 따라 항목을 추가하거나 제거하기 위해 다른 규칙을 awk에 통합 할 수 있습니다.

편집 : ifconfig와 동일합니다 (Doug가 지적한 것처럼).

ifconfig | awk '{print $1}'

'lo'인터페이스를 제외한 예입니다

ifconfig | awk '{if ($1 != lo) print $1}'

작동하지 않습니다. awk선행 공백을 무시하고 각 줄에 첫 번째 단어를 인쇄합니다.
Doug Harris

불행히도 Doug가 지적한 정확한 문제를 겪으면서 실제로 작동하지 않습니다. 하지만 도와 주셔서 감사합니다. 그럼에도 불구하고 저와 같은 새로운 사람을 도와 주셔서 정말 감사합니다.
ftiaronsem

1
/usr/sbin/ip addr show | awk '/^[1-9]/ {print $2}'

제공

lo:
eth0:
eth1:
eth2:

출력으로


1

받아 들여진 해결책이 존재하지만 이것에 나의 해결책을 제시하고 싶습니다.

나는 많은 가상 인터페이스를 가지고 있으며 다양한 bash 스크립트에서 사용할 수있는 목록을 얻고 싶습니다.

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.137  netmask 255.255.255.192  broadcast 11.22.33.191
        inet6 fe80::a00:27ff:fe8c:6bd3  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)
        RX packets 2969136  bytes 2394432908 (2.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1378821  bytes 358960701 (342.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.189  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

eth0:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.190  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

eth0:3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.22.33.180  netmask 255.255.255.192  broadcast 11.22.33.191
        ether 08:00:27:8c:6b:d3  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 673768  bytes 277972236 (265.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 673768  bytes 277972236 (265.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

루프백에 관심이 없습니다.

이 원 라이너는 작업을 수행합니다.

ifconfig | egrep '^eth' | cut -f 1-2 -d ':' | cut -f 1 -d ' '| pcregrep -o1 "(((eth\d)(:\d))|(eth\d))"

다음과 같은 출력을 생성합니다.

eth0
eth0:1
eth0:2
eth0:3

즐겨.


1

위의 모든 솔루션이 정상적으로 작동합니다. 아직도 당신은 이것을 시도 할 수 있습니다

ifconfig | grep HW | cut -c 1-6

, 이후 lo루프백하는 HW 주소를 할당되지 않은, 그것은 표시되지 않습니다.

출력-

root @ glum : / home / amit # ifconfig | grep HW | 컷 -c 1-6
enp7s0
vmnet1
vmnet8
wlp6s0

1

가장 쉬운 해결책은 man ifconfig (8)

man ifconfig (8) 추출 http://www.manpagez.com/man/8/ifconfig/ :

-l 플래그는 다른 추가 정보없이 시스템에서 사용 가능한 모든 인터페이스를 나열하는 데 사용될 수 있습니다. 이 플래그의 사용은 -d (작동 중지 된 목록 인터페이스 만) 및 -u (작동 된 목록 인터페이스 만)를 제외하고 다른 모든 플래그 및 명령과 상호 배타적입니다.

따라서 목록을 얻으려면 다음을 사용하십시오.

ifconfig -l

이름은 공백으로 구분되므로 sed를 사용하여 공백을 \ n으로 바꿔야합니다.

ifconfig -l | sed 's/ / /g'


1

향상:

netstat -i | grep '^[a-z]' | awk '{print $1}' | grep -v 'lo'

1
아마 그렇게해야합니다 grep -v '^lo$'. 현재 명령은 (가설적인 예) logicalridiculous인터페이스를 제외합니다 .
스콧

0

위의 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. 내 솔루션은 다음과 같습니다.

ifconfig -a  | egrep "^[a-z]+" | sed "s/: .*//" | grep -v "lo"
  1. 사용 가능한 모든 인터페이스 나열
  2. 장치 이름이 포함 된 줄만 추출하십시오 (처음에는 공백 없음)
  3. 첫 번째 공간 이후의 관련없는 후미 부분을 제거하십시오.
  4. lo인터페이스 제외

출력 :

eth0
eth0:1
wlan0

0

"ifcongif -l"이 작업을 수행해야합니다. 출력은 "lo0 gif0 stf0 en0 ..."과 같으며 줄 바꿈이 없습니다.

일부 웹 사이트에서 찾았지만 더 이상 찾을 수 없습니다. 그리고 나는 여전히 "-l"Flag의 의미를 찾고 있습니다.


0

때때로 nettools는 기본적으로 설치되지 않습니다. 따라서 설치 후 패키지에 대해 걱정할 필요없이 / bin, / usr / bin 및 / usr / sbin에서 더 많은 보증을 제공하는 기본 제공 명령을 사용하는 것이 좋습니다.

IP 주소 : 쇼 /, 장치, 정책 라우팅 및 터널 (주소) 라우팅 조작
그렙를 : 찾을 공백을 다음 아무것도 unitl 후 :
컷 : 사용 (:) 구분 기호로 및 필드 2 얻을
TR을 : 삭제 공백

$ IP 주소 | grep -E ': \ s. * ?:'| cut -d ":"-f 2 | tr -d ""

0

macOS에서 테스트 한 결과는 다음과 같습니다. UP 인 모든 인터페이스를 찾아야했습니다. 위의 Dennis Williamson의 답변을 기반으로합니다.

ifconfig -a | grep UP | sed 's/:.*//;/^$/d'


-1

ifconfig | grep flags | awk -F: '{print $1;}'


1
이것이 무엇을 하는지를 설명해 주시겠습니까? 한 줄 답변은 일반적으로 수퍼 유저에게는 적합하지 않습니다.
Doktoro Reichard가
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.