显示界面+ ip列表很好的方式

时间:2017-03-14 00:23:17

标签: bash

我必须显示网络接口和附加的IP。

我想出了这段代码:

if [ -f intf ]; then
  rm -I intf
fi &&
if [ -f ipl ]; then
  rm -I ipl
fi &&
ip ntable | grep dev | sort | uniq | sed -e 's/^.*dev //;/^lo/d' >> intf &&
ip a | grep -oP "inet\s+\K[\w./]+" | grep -v 127 >> ipl &&
paste <(cat intf) <(cat ipl)

它完成了工作,但我相信它很难看:),创建文件,恕我直言:) 任何人都可以提出一个很好的方法来获得完全相同的结果但是短而有效的方式?

如果有几个接口,现在我正在考虑循环,但这会使这个代码更大,可能更丑:)你会建议什么?

2 个答案:

答案 0 :(得分:0)

首先,您可以消除对具有进程替换的临时文件的需求:

paste <(ip ntable | grep dev | sort -u | sed -e 's/^.*dev //;/^lo/d') <(ip a | grep -oP "inet\s+\K[\w./]+" | grep -v 127)
  • sort -usort | uniq
  • 做同样的事情

答案 1 :(得分:0)

此oneliner输出接口名称及其IP地址:

ifconfig |\
grep -e 'Link' -A 1 |\
paste -d" " - - - |\
grep ' addr' |\
sed -e 's/  */ /g' -e 's/Link.*addr://' |\
cut -d" " -f1,2

这里是命令的解释:

  1. 显示网络配置
  2. 过滤包含 Link 及其下一行的行。
  3. 加入三行
  4. 过滤具有指定地址的行
  5. 修剪空格并删除不相关的信息
  6. 拆分剩余数据并仅保留接口名称和IP地址。
  7. 示例输出:

    br-2065e5d2fc59 172.18.0.1
    docker0 172.17.0.1
    lo 127.0.0.1
    wlp3s0