macos - macOS 解析ifconfig以只使用Bash获取我的IP地址

  显示原文与译文双语对照的内容

我想编辑文件,以运行一个名为"myip"的简单函数。 你可能猜到,函数myip只打印我的机器的内部IP地址。

在我工作的时候,这就是剧本:


ifconfig en1 | awk '{ print $2}' | sort



得到了我的输出:


10.0.0.12


options=1<PERFORMNUD>


flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST>


fe80::daa2:5eff:fe96:ba2f%en1


d8:a2:5e:96:ba:2f


autoselect


active



我正在处理 Mac OS X 。

我怎么才能做到这一点?

时间: 原作者:

下面的工作都是( CentOS 5 ) 。


ip addr show eth0 | awk '$1 =="inet" {gsub(//.*$/,"", $2); print $2}'



ifconfig eth0 | awk '/inet addr/{gsub("addr:","", $2); print $2}'



对于 OS X ( v10.11 ( El Capitan ) ) 至少):


ifconfig en0 | awk '$1 =="inet" {print $2}'



原作者:

对于 eth0,以下工作适用于我。 试着用同样的逻辑来调整它。


ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}' 



原作者:

无论你的系统( Mac操作系统,Linux ),接口名称,甚至你的地区配置,这是获得IP地址的更多的方法:


ifconfig | grep -E"([0-9]{1,3}.){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d:



如果有多个活动 IP,将在单独的行中列出每一个。 如果只需要第一个 IP,请将 | head -n1 添加到表达式中:


ifconfig | grep -E"([0-9]{1,3}.){3}[0-9]{1,3}" 


 | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: | head -n1



如果需要特定接口的IP地址,请将第一个表达式 ifconfig 替换为 ifconfig INTERFACENAME,例如 ifconfig eth0 | grep -E.. .

以下是在某些情况下失败的示例,原因如下:

  • ip route.. .: OSX机器上没有安装 ip 命令。
  • hostname -I: -I 中的选项无效。
  • ifconfig en0.. .: 接口名( eth0en0 ) 在Linux和cer中不同,在Linux中,名称也取决于接口类型( 用于以太网连接的ethX,用于无线,等等的wlanX ) 。
  • python -c 'import socket; print(socket.gethostbyname(socket.gethostname()))' :这让我在 Ubuntu Linux 14.04中得到了 127.0.1.1 ( 一个内置的环回IP地址。),所以不工作。
  • ifconfig | grep 'inet addr:' | grep -v 127.0.0.1 | head -n1 | cut -f2 -d: | cut -f1 -d ' ' :地理空间更接近,但不在没有 LANG=en 配置的Linux发行版中工作,因为 grep 中的文本 inet addr: 不同。
...