amp*_*ent 47 shell networking ip
有没有一种简单的方法来以编程方式提取 IP 地址,而无需繁琐的解析ifconfig?我不介意使用简单的命令输出处理sed来执行它,但不介意从/etc某个地方处理多行文件。我想要做的是修改 my.bashrc以在问候消息中显示主机的 IP 地址。我正在使用Ubuntu 12.04但决定在这里而不是 Ubuntu 论坛发帖,因为我认为这不是特定于发行版的。
slm*_*slm 53
NIC 设备句柄
下面的示例假设网络接口是一个名为 的无线网卡wlan0。在示例中针对您的特定情况调整此位。例如,如果它是有线 NIC 卡,则很可能是eth0.
IPv4 -(互联网协议版本 4)
这些示例还返回 IPv4 地址。大多数人识别为他们的“IP 地址”的“虚线四边形”。
例如:
inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0
Run Code Online (Sandbox Code Playgroud)IPv6 -(互联网协议版本 6)
如果您的系统配置为支持 IPv6,您将在ifconfig输出中看到“虚线四边形”和 IPv6 IP 地址。
例如:
inet6 addr: fe80::226:c7ff:fe85:a720/64 Scope:Link
Run Code Online (Sandbox Code Playgroud)
下面的命令明确忽略这一点,但可以很容易地进行调整以获取此信息。
ifconfig)有很多方法可以做到这一点。例如,您可以使用此awk脚本来解析无线 LAN NIC (wlan0) 的 IP 地址:
$ ifconfig wlan0 | grep "inet " | awk -F'[: ]+' '{ print $4 }'
192.168.1.20
Run Code Online (Sandbox Code Playgroud)
您可以这样做并使其更紧凑:
$ ifconfig wlan0 | awk '/t addr:/{gsub(/.*:/,"",$2);print$2}'
192.168.1.20
Run Code Online (Sandbox Code Playgroud)
你也可以使用perl:
$ ifconfig wlan0 | perl -nle'/t addr:(\S+)/&&print$1'
192.168.1.20
Run Code Online (Sandbox Code Playgroud)
Perl 示例非常紧凑。
有无数其他方法可以做到这一点,这些只是帮助您入门的几个示例。
一些额外的注释和评论。@StephaneChazelas 证明有一个更紧凑的版本使用grep:
$ ifconfig wlan0|grep -Po 't addr:\K[\d.]+'
192.168.1.20
Run Code Online (Sandbox Code Playgroud)
该解决方案利用grep's 在较新版本中使用 PCRE(Perl 正则表达式)的能力,以及它的-oswitch 以返回与正则表达式匹配的内容。
ip)正如评论中还提到的,在将ifconfig多个 IP 地址分配给网络设备的系统上使用可能会很麻烦,因为它只返回第一个。所以ip在这些情况下最好使用该命令。
例如:
$ ip addr show wlan0 | grep -Po 'inet \K[\d.]+'
192.168.1.20
Run Code Online (Sandbox Code Playgroud)
您还可以告诉ip您只显示给定网络接口的 IPv4 信息。在这种情况下,我们只查看名为 的接口wlan0:
$ ip -f inet addr show wlan0 | grep -Po 'inet \K[\d.]+'
192.168.1.20
Run Code Online (Sandbox Code Playgroud)
小智 29
$ hostname -I
例如:
$ hostname -I
192.168.1.18
Run Code Online (Sandbox Code Playgroud)
信息。从联机帮助页:
http://manpages.ubuntu.com/manpages/raring/en/man1/hostname.1.html
http://unixhelp.ed.ac.uk/CGI/man-cgi?hostname
Zan*_*ynx 10
这是另一个使用“ip”的方法,但当您的设备可能连接到不同的接口时效果更好,例如有时是有线以太网,有时是 WiFi。我还使用了“sed”而不是“grep”或“perl”,以实现多样性。
这将找到任何源 IP 具有到 Internet 的路由。或者无论如何都可以访问 Google 的 DNS。
ip -o route get 8.8.8.8 | sed -e 's/^.* src \([^ ]*\) .*$/\1/'
Run Code Online (Sandbox Code Playgroud)