仅在linux中打印IP和设备名称

时间:2014-05-10 08:16:45

标签: linux sed

我想显示设备名称和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)

4 个答案:

答案 0 :(得分: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),但对于大多数情况,这应该没问题。

如果您只是查找ifconfig而您正在使用eth0等,则使用eth1将会失败。 如果多个接口具有IP并且已连接,则可能会失败,但只有一个接口用于上网。

答案 1 :(得分: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地址的接口时编辑,以下评论。)

答案 2 :(得分:0)

你的命令对我来说根本不起作用。

仅仅因为IP地址与设备名称不在同一行 - 这并不容易。您需要组合一些额外的命令,或者可以编写一个小脚本。

只能看到你可以使用的IP地址:

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

检查你的linux机器上是否安装了“nm-tool”,并弄清楚如何使用此命令以及其他sed和awk工具来找出你需要的东西。

答案 3 :(得分:0)

请试试这个: 请将其保存为somefile.py并通过python 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