Ниже приведен мой вывод ifconfig.
eth0 Link encap:Ethernet
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)
Interrupt:28 Base address:0x2000
eth1 Link encap:Ethernet
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:36497 errors:0 dropped:0 overruns:0 frame:14515
TX packets:44884 errors:1352 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20781745 (20.7 MB) TX bytes:17776225 (17.7 MB)
Interrupt:17 Base address:0xc000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:720 (720.0 B) TX bytes:720 (720.0 B)
virbr0 Link encap:Ethernet
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:4416 (4.4 KB)
vmnet1 Link encap:Ethernet
inet addr:192.168.185.1 Bcast:192.168.185.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
vmnet8 Link encap:Ethernet
inet addr:192.168.207.1 Bcast:192.168.207.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Как использовать grep для извлечения IP-адреса, соответствующего каждой сетевой карте?
Это возможно? Как этого добиться?
$ ip -o addr show | awk '/inet/ {print $2, $3, $4}'
lo inet 127.0.0.1/8
lo inet6 ::1/128
eth0 inet 192.168.0.1/24
eth0 inet6 fe80::2a0:feed:dead:beef/64
Ой, чувак, я не могу сопротивляться попыткам улучшить мою способность писать сценарии Perl oneliner когда я вижу такой пост. Вот первая попытка взлома:
$ /sbin/ifconfig | \
perl -ane "(\$n)=(/^(\S+)/) and print \"\$n: \"; print (/addr:(\S+)/) and print \"\n\" if /inet/"
eth0: 192.168.0.11
lo: 127.0.0.1
Это может быть сильно затянуто, и у него много проблем, например, он не обрабатывает адреса ipv6 и т. Д.
Вот как я это делаю:
ETHERADD=$(/sbin/ifconfig |grep -e ^[a-z] |grep -v lo | awk '{ printf $1 FS}')
for i in $ETHERADD
do
IP=$(/sbin/ifconfig $i | grep -o '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*' | head -1)
printf "%-16s%-42s*\n" "IP $i:" "$IP"
done
ip addr show | grep inet | awk -F " " '{print $NF"|"$2}'
Это то, что я использую
#!/bin/bash
interfaces=$(/sbin/ifconfig |grep -e ^[a-z] | awk '{ printf $1 " "}')
for i in $interfaces
do
addr=$(/sbin/ifconfig $i | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
addr6=$(/sbin/ifconfig $i | grep 'inet6 addr:' |sed 's/ *//g'| cut -d' ' -f3 | cut -d'/' -f1)
echo "$i inet4 $addr inet6 $addr6"
done
Как насчет
ifconfig -a|awk '{print $1 " " $2}'|egrep -w 'Link|inet'|sed 's/ Link//'|sed 's/inet addr://'
На вашем выходе это возвращает
eth0
eth1
192.168.1.2
lo
127.0.0.1
virbr0
192.168.122.1
vmnet1
192.168.185.1
vmnet8
192.168.207.1
для меня.
Ужасно некрасиво и подходит только для IPv4:
ifconfig | egrep "^[a-z]|inet " | sed -e "s/ [ ]*Link.*/@/" -e "s/.*inet addr://" -e "s/ .*/#/" | tr -d '\012' | tr '@' ' ' | tr '#' '\012'
ifconfig | grep addr> myipaddr.txt
Не уверен, насколько это переносимо, но вы можете избежать всего sed / grep / awk / perl и т. Д. С помощью hostname
команда и либо -i
или -I
(Я рекомендую hostname -I
):
-i, --ip-address
Display the network address(es) of the host name. Note that this works only if the host name can be resolved. Avoid using this option; use hostname
--all-ip-addresses instead.
-I, --all-ip-addresses
Display all network addresses of the host. This option enumerates all configured addresses on all network interfaces. The loopback interface and IPv6
link-local addresses are omitted. Contrary to option -i, this option does not depend on name resolution. Do not make any assumptions about the order
of the output.
Например:
[kbrandt@alpine: ~/] hostname -I
192.168.1.100 10.1.0.42