根据这个答案和整个网络上的许多其他教程,ifconfig
将列出许多有趣且有用的信息。而且,这似乎是找出像我的网络掩码这样的东西的标准方法。
但是,对于脚本,我只需要网络掩码本身eth0
;并且man ifconfig
对这个问题没有帮助。
我使用的是 VPS,所以我无法控制我的网络掩码;我需要找出它的设置。
(注意:虽然我需要eth0
,但有些机器可能有另一个,比如eth1
or ens3
,这也很有用。)
- 我不需要网络掩码所在的整行:
inet 111.222.333.444 netmask 255.255.255.0 broadcast 111.222.555.666
- 我想避免使用“hackdoor”方法,比如
netmask 255.255.255.0
开始运行sed "s/netmask //"
,因为事情可能会发生变化——除非专家这么说
可能这就是您需要的(注意这在 Ubuntu 16.04 上不起作用):
在第一行中,网络接口的名称被分配为变量的值
$IFACE
——这对脚本很有用,否则你可以使用grep -A 7 'eth0'
.在第二行,命令的输出
ifconfig
将通过管道传输到grep
命令,该选项-A 7
将在匹配字符串/正则表达式的行之后输出以下 7 行。该命令的输出将通过管道传输到sed
.在
sed
命令内:正则表达式
^.*netmask\s(.*)\s\sbroadcast.*$
将匹配从头到尾的整行,^
其中$
包含一些字符.*
和“关键字”netmask\space
,[0-9\.]+
并且\s\sbroadcast
按照确切的顺序;该行将
s/old/new/
用第一个捕获组 [(.*)
->\1
] 的内容替换 (),其中正则表达式[0-9\.]+
将匹配由数字结束点组成的字符串;选项
-r
(or-E
) 将启用扩展的正则表达式,在这种情况下,这将允许我们自由使用圆括号;-n
将标志与输出相结合的选项p
仅输出匹配的行,并将保留sed
.这是一个扩展示例,它将解析所有网络接口的名称,并将对每个接口执行与上述命令类似的操作:
在 Ubuntu 18.04 的虚拟机上执行的上述命令的示例输出: