我想显示设备名称和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 :(得分: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