在Ubuntu 16.04中,我根据一定的参数制作了一个脚本,用于configuration有线以太网接口的IP地址。 现在的问题是,在我的脚本中,我假设名称是eth0,但这并不总是如此。假设我只有一个有线networking接口(不需要插入),但我也可以有一个无线接口,我怎么能检索它的名字(只是有线的)?
与ifcommand我得到:
enp7s0 Link encap:Ethernet HWaddr fc:3f:db:a2:6d:46 inet addr:192.168.0.101 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::149f:3103:af2f:1ec5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6784 errors:0 dropped:0 overruns:0 frame:0 TX packets:7493 errors:1 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4565079 (4.5 MB) TX bytes:827825 (827.8 KB) 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:65536 Metric:1 RX packets:8037 errors:0 dropped:0 overruns:0 frame:0 TX packets:8037 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:2261250 (2.2 MB) TX bytes:2261250 (2.2 MB) wlp19s0 Link encap:Ethernet HWaddr c8:ff:28:93:26:32 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:180463 errors:0 dropped:0 overruns:0 frame:0 TX packets:121275 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:229823414 (229.8 MB) TX bytes:15675806 (15.6 MB)
我想要的是:
enp7s0
如果你想排除如vir , loopback和wl (无线)接口,那么下面的应该做的伎俩。
ip link | awk -F: '$0 !~ "lo|vir|wl|^[^0-9]"{print $2;getline}'
这里我们使用冒号作为分隔符-F:然后检查$0行是否与使用正则expression式的特定string不匹配。
我会使用ifconfig (旧的和过时的)工具或ip命令。 使用ip route你有一个可用的路由列表。 然后只用grep获取包含default的行,并使用sed从string中删除不需要的字符
完整的命令如下所示:
ip route | grep default | sed -e "s/^.*dev.//" -e "s/.proto.*//"
假设你只有一个物理接口,而不是一些WLAN接口等。技巧是获得接口。 哪些在/ sys / class / net中,然后看看他们去哪里。
find /sys/class/net ! -type d | xargs --max-args=1 realpath | awk -F\/ '/pci/{print $NF}'
如果你有更多的接口,你将不得不先grep lspci:
lspci | awk '/Ethernet/{print $1}'
整个事情会变成:
pci=`lspci | awk '/Ethernet/{print $1}'`; find /sys/class/net ! -type d | xargs --max-args=1 realpath | awk -v pciid=$pci -F\/ '{if($0 ~ pciid){print $NF}}'