IPS=`ip addr | grep 'inet[^6]' | awk '{print $2}' | cut -d/ -f1 | grep -v "127.0.0.1"`
这段代码是一个在Linux系统中使用的shell命令,用于获取系统中所有非环回地址(即非127.0.0.1)的IPv4地址。下面是对这段代码的详细解释:
1. `ip addr`:这是一个查看网络接口信息的命令,它会列出系统中所有网络接口的详细信息。
2. `grep 'inet[^6]'`:这个命令用于过滤`ip addr`的输出,只保留包含`inet`(代表IPv4地址)且不包含`6`(代表IPv6地址)的行。`[^6]`是一个正则表达式,表示匹配除了`6`以外的任何字符。
3. `awk '{print $2}'`:这个命令使用`awk`工具来处理`grep`的输出,只打印每行的第二个字段(`$2`),这个字段通常是网络接口的IP地址。
4. `cut -d/ -f1`:这个命令使用`cut`工具来进一步处理`awk`的输出,它以`/`为分隔符,只保留第一个字段(`-f1`),也就是IP地址本身,去掉后面的子网掩码部分。
5. `grep -v "127.0.0.1"`:这个命令再次使用`grep`,这次是为了排除环回地址`127.0.0.1`,`-v`参数表示反向选择,即排除匹配到的行。
将这些命令组合在一起,整个命令的作用是:列出系统中所有IPv4地址,排除掉环回地址。
**举例说明**:
假设你的Linux系统有以下网络接口信息:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 86396sec preferred_lft 86396sec
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 10.0.0.100/24 brd 10.0.0.255 scope global dynamic eth1
valid_lft 86396sec preferred_lft 86396sec
执行上述命令后,输出结果会是:
192.168.1.100
10.0.0.100
这个结果表示你的系统中有两个IPv4地址,分别是`192.168.1.100`和`10.0.0.100`,这两个地址分别对应`eth0`和`eth1`网络接口。环回地址`127.0.0.1`被排除在外。