先直接给出命令:
ip -6 addr show eth0 | grep -v deprecated | grep 'inet6 [^f:]' | awk -F' ' '{print $2}' | awk -F'/' '{print $1}' | tail -1
根据经验观察,使用ip -6 addr show ifce获取到的ipv6地址,排在最后面的那个就是最新的那个,也就是valid_lft最长的那一个。
所以这个命令的原理就是:用ip -6 addr获取ipv6地址,然后选择排在最后面那一个。
然后是步骤拆解:
ip -6 addr show eth0,显示网卡(eth0)的全部ipv6地址
grep -v deprecated,去除已经失效(deprecated)的地址
grep 'inet6 [^f:]',显示有ipv6地址的那一行(不包含f开头的内网ipv6地址)
awk -F' ' '{print $2}',根据空格符号分列,打印第二列
awk -F'/' '{print $1}',根据斜杠符号/分列,打印第一列
tail -1,显示最后一行