如何从bash获取网络掩码?

mic*_*con 9 linux ip text-processing

我想在 Linux 上获取我的网络掩码。它输出为ifconfig但我想提取字符串。

ata*_*ata 9

我应该澄清一下,这里的代码适用于 Linux,(注意关于其他 Unices 的评论和帖子)。OP 要求提供 Linux 解决方案,但最好将问题更改为“如何获取网络掩码”,并让答案结合更多 Unix 风格的最佳方式。

#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'
Run Code Online (Sandbox Code Playgroud)

./脚本 eth0

关于 Linux 中的 ifconfig

与 netstat、arp、rarp 和 route 等其他传统网络命令一起,ifconfig 是net-tools包的一部分。Net-tools 已经很长时间没有被积极开发了,并且有人努力弃用它以支持更新的iproute2包。为简洁起见,如果您想了解有关此基本过渡的更多详细信息,请访问以下相关链接:

案例示例:Debian Linux

案例示例:Arch Linux

net-tools ifconfig 的手册页(参见 BUGS 部分)

从用户角度分析和比较框架


sym*_*ean 7

/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '
Run Code Online (Sandbox Code Playgroud)

?

  • 指定 awk 字段分隔符也可用于删除 "Mask:": `/sbin/ifconfig eth0 | awk -F: '/Mask:/{print $4}'` (3认同)

miv*_*ivk 7

我想知道你是否真的只想要面具。也许你真的想要带掩码的网络(或 IP),在配置文件中使用nmap,或者其他任何东西。

在这种情况下,在 Linux 上,您还可以解析ip ...命令的输出。

要以 CIDR 表示法列出所有接口及其地址和掩码:

ip -o -f inet addr show | awk '/scope global/ {print $2, $4}'
Run Code Online (Sandbox Code Playgroud)

或者将其限制为默认界面:

default_if=$(ip route list | awk '/^default/ {print $5}')
ip -o -f inet addr show $default_if | awk '{print $4}'
Run Code Online (Sandbox Code Playgroud)

这在我的机器上给了我“192.168.1.61/24”。

  • ...实际上没有必要匹配“全局范围”或“默认”,因为您可以执行“ip -o -f inet addr show scope global”和“ip route list default”。 (2认同)