網上很多用法都試過,不行的。
有的用ifconfig,但是有的Linux系統默認是不安裝ifconfig的,但是ip a是有的。下面我們用ip a來獲取服務器ip地址
- 命令
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp9s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether d4:3d:7e:75:99:1c brd ff:ff:ff:ff:ff:ff
inet 100.200.30.81/27 brd 100.200.30.81 scope global noprefixroute enp9s0f0
valid_lft forever preferred_lft forever
inet6 fe80::48ea:700d:7747:1faa/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: enp9s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether d4:3d:7e:75:99:1d brd ff:ff:ff:ff:ff:ff
- 網口各不相同,不能過濾網口,ip所在行有共同字段 inet,通過inet獲取各行
ip a | grep 'inet'
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
inet 100.200.30.81/27 brd 100.200.30.81 scope global noprefixroute enp9s0f0
inet6 fe80::48ea:700d:7747:1faa/64 scope link noprefixroute
inet6 fe80::afea:d3ad:ee20:3b82/64 scope link noprefixroute
- 上面發現了多行,實際上我們只需要 100.200.30.81,過濾inet6
ip a | grep 'inet' | grep -v inet6
inet 127.0.0.1/8 scope host lo
inet 100.200.30.81/27 brd 100.200.30.81 scope global noprefixroute enp9s0f0
- 127.0.0.1很明顯不是我們想要的,過濾掉
ip a | grep 'inet' | grep -v inet6 | grep -v 127*
inet 100.200.30.81/27 brd 100.200.30.81 scope global noprefixroute enp9s0f0
- 我們只需要ip,不需要其他多餘字符,ip在字段中有兩個地方展示:
inet 100.200.30.81/27 表示ipv4地址
brd 100.200.30.81 表示廣播地址
這裏我們要的是ipv4地址
ip a | grep 'inet' | grep -v inet6 | grep -v 127* | awk '{print $2}'
100.200.30.81/27
- 只想要 ip
ip a | grep 'inet' | grep -v inet6 | grep -v 127* | awk '{print $2}'|awk -F '/' '{print $1}'
100.200.30.81
最終獲取ip通用命令:
ip a | grep 'inet' | grep -v inet6 | grep -v 127* | awk '{print $2}'|awk -F '/' '{print $1}'
php 調用shell執行,獲取ip地址返回:
$serverIP = exec("ip a | grep 'inet' | grep -v inet6 | grep -v 127* | awk '{print $2}'|awk -F '/' '{print $1}'");
封裝方法:
function getServerIp(){
return exec("ip a | grep 'inet' | grep -v inet6 | grep -v 127* | awk '{print $2}'|awk -F '/' '{print $1}'");
}