Introduction
網路上有許多教學告訴你如何透過ifconfig去取得ip address,而本篇教學主要分享我認為比較通用且簡單的做法。
Get the interface list and check the cable status
取得interface list方法很多種,除了可以透過ifconfig、ip等command外,先前我們是透過cat /proc/net/dev的方式。但我認為透過list /sys/class/net的方法比較簡單且通用:
net_base=/sys/class/net/ for dev in ${net_base}*; do dev_name=${dev##*/} is_carrier=`cat ${dev}/carrier` echo ${dev_name} echo ${is_carrier} done
有幾個部分需要注意的,以eth0為例:
- dev變數為/sys/class/net/eth0的完整路徑,因此透過${dev##*/}的方式刪除以/前最長的部分,即/sys/class/net/。
- /sys/class/net/eth0/carrier如果在interface down的情況下,會出現如下圖錯誤;因此請先up後再做判斷。
許多教學都是透過ifconfig去達成,由於我們script需要能夠執行於Ubuntu Server的安裝環境下(無法用cut與awk),因此我使用ip command。
# 可在Ubuntu Server 14.04安裝環境下使用 ip addr show | grep -o 'inet [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+' | grep -o [0-9].*
如果要指定interface eth0:
ip addr show eth0
ipv6比較難寫,我改使用以下方法,將不需要的部分去頭去尾:
ip=`ip addr show eth0 | grep -o 'inet6 .*'` ip=${ip%%/*} ip=${ip#inet6 }
留言
張貼留言