2014-05-10 3 views
-1

장치 이름과 ip를 보여주고 싶었습니다. 내가 이것을 어떻게 추출 할 수 있는지 아는 사람이있을 수 있습니까?리눅스에서만 IP와 장치 이름 인쇄하기

ifconfig -a 

eth0  Link encap:Ethernet HWaddr 10:60:4b:db:60:86 
      UP BROADCAST MULTICAST MTU:1500 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

lo  Link encap:Local Loopback 
      inet addr: 1.0.0.1 Mask:255.0.0.0 
      inet6 addr: ::1/128 Scope:Host 
      UP LOOPBACK RUNNING MTU:65536 Metric:1 
      RX packets:1366 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:1366 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:245049 (245.0 KB) TX bytes:245049 (245.0 KB) 
+0

관련 항목 : http://superuser.com/questions/203272/list-only-the-device-names-of-all-available-network-interfaces – ChristopheD

+0

[Bash 스크립트 문제] (http : /swackoverflow.com/questions/3294909/bash-script-issue) – BMW

+0

답변의 결과물이 원했던 것으로 추측됩니다. 나는 다른 답변에 대한 응답을 토대로 그 점을 알아 냈습니다. 어떻게 단순화 하시겠습니까? –

답변

2

내가 제안 할 수있다 :

ifconfig -a | tr '\n' '~' | sed 's/~~/\n/g' | \ 
sed 's/^\([^ ]*\) .*inet addr:\([0-9.]*\) .*$\|^\([^ ]*\) .*$/\3\1 \2/g' 

출력 :

eth0 10.0.41.21 
eth1 
lo 127.0.0.1 

또는 IP 주소가없는 인터페이스를 생략하려면

ifconfig -a | tr '\n' '~' | sed 's/~~/\n/g' | grep 'inet addr:' | \ 
sed 's/^\([^ ]*\) .*inet addr:\([0-9.]*\) .*$/\1 \2/g' 

출력 : 각 인터페이스는 한 줄에 있도록

이 모든 라인이 물결표 바꿈 변환하여 작동
eth0 10.0.41.21 
lo 127.0.0.1 

가, 다음, 다시 하나의 줄 바꿈으로 인터페이스 사이의 이중 줄 바꿈 변환 . 그런 다음 모든 행에 대해 원하는 정보 (인터페이스 이름 및 IP 주소)를 추출하고 전체 행을 그 행으로 대체합니다.

(IP 주소가없는 인터페이스를 수용하기 때문에 편집 됨, 아래의 설명을 참조하십시오.))

+0

죄송합니다, 저를 위해 작동하지 않습니다. –

+0

@AvinashRaj 특별히 무엇이 보이나요? 데비안 7.3에서 잘 작동합니다. (BSD 나 OS X에서는 ifconfig가 인터페이스들 사이에서 \ n \ n을 생성하지 않기 때문에 작동하지 않을 것입니다.) –

+0

우분투의 인터페이스들 사이에 두 줄의 새로운 라인이 생깁니다. 14.04 –

2

이것은 IP를 얻는 데있어 가장 좋은 방법입니다.

IP=$(ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $NF}') 
echo "$IP" 
192.168.1.102 

인터페이스 잘 작동이에 대한

IF=$(ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $5}') 
echo "$IF" 
eth0 

이유를 얻으려면, 그것은 당신에게 IP 및 인터페이스를 제공한다는 것입니다.
VPS 서버 인터페이스의 이름은 veth0 일 수 있습니다.
이 솔루션은 공용 IP에 대한 경로를 찾는 위치를 묻는 방법으로 올바른 인터페이스를 얻습니다.
8.8.8.8 (googles dns) 이외의 다른 주소를 사용할 수도 있지만 대부분 괜찮습니다.

그냥 eth0 찾는 경우 실패합니다 ifconfig를 사용하고 여러 인터페이스 IP를 가지고 연결되어있는 경우 실패 할 수 있지만, 하나는 인터넷에 가져 오는 데 사용됩니다 eth1
을 사용하고 있습니다.

0

귀하의 명령이 전혀 작동하지 않았습니다.

IP 주소가 장치 이름과 같은 줄에 있지 않기 때문에 쉽지 않을 것입니다. 몇 가지 추가 명령을 결합해야하거나 약간의 스크립트를 작성할 수 있습니다.

당신은 이것을 사용할 수 있습니다 :

ifconfig -a | grep "inet add"| awk -F ":"{ 'print $ 2'} | awk { 'print $ 1'}

리눅스 머신에 "nm-tool"이 설치되어 있는지 확인하고 추가 sed 및 awk 도구와 함께이 명령을 사용하여 필요한 것을 알아내는 방법을 찾아보십시오.

+0

안녕하세요, 하나의 인터페이스 만 사용하는 경우 ip – user3622845

+0

장치 이름을 인쇄하고 싶습니다. ifconfig | grep eth0 | awk { 'print $ 1'}; ifconfig | awk "NR == 2"| awk -F ":"{ 'print $ 2'} | awk { 'print $ 1'} – Max

+0

희망이 있으시면 – Max

0

이 시도하십시오 이 somefile.py로 보관하고, 파이썬 somefile.py에 의해 실행

import commands 

output=commands.getoutput('ifconfig') 
count=0 
for line in output.split("\n"): 
     count+=1 
     if str("eth") in line: 
       devicename = line.split()[0] 
       lineipadd = output.split("\n")[count] 
       ipaddress = lineipadd.split(":")[2].split()[0] 
       print devicename , ipaddress