我知道有ifconfig命令,我們可以列出網絡接口信息。 但我希望得到的信息按以下模式獲取網絡接口信息
Interface_Name IP_Address Net_Mask Status(up/down)
例如
eth0 192.168.1.1 255.255.255.0 down
我試圖ifconfig和grep命令,但不能得到正確的模式。 還有另一個命令或一些技巧來做到這一點?
我知道有ifconfig命令,我們可以列出網絡接口信息。 但我希望得到的信息按以下模式獲取網絡接口信息
Interface_Name IP_Address Net_Mask Status(up/down)
例如
eth0 192.168.1.1 255.255.255.0 down
我試圖ifconfig和grep命令,但不能得到正確的模式。 還有另一個命令或一些技巧來做到這一點?
Python是很好的:d,但在bash讓看到:
Interfaces=`ifconfig -a \
| grep -o -e "[a-z][a-z]*[0-9]*[ ]*Link" \
| perl -pe "s|^([a-z]*[0-9]*)[ ]*Link|\1|"`
for Interface in $Interfaces; do
INET=`ifconfig $Interface | grep -o -e "inet addr:[^ ]*" | grep -o -e "[^:]*$"`
MASK=`ifconfig $Interface | grep -o -e "Mask:[^ ]*" | grep -o -e "[^:]*$"`
STATUS="up"
if [ "$INET" == "" ]; then
INET="-"
MASK="-"
STATUS="down";
fi
printf "%-10s %-15s %-16s %-4s\n" "$Interface" "$INET" "$MASK" "$STATUS"
done
這是很簡單的。
這是在'ifconfig interface
沒有顯示互聯網地址'假設接口關閉的假設下完成的。
我希望這會有所幫助。
ifconfig
有兩種輸出模式 - 默認的輸出模式很多,輸出模式較短的模式爲-s
,輸出模式較少(或者根據需要選擇不同的信息位) 。那麼在默認模式下采用ifconfig,並在腳本中挑選你想要的特定信息(python,perl,ruby,awk,bash + sed + ...,或者漂浮你的船;-)。例如,W/Python的:
import re
import subprocess
ifc = subprocess.Popen('ifconfig', stdout=subprocess.PIPE)
res = []
for x in ifc.stdout:
if not x.strip():
print ' '.join(res)
del res[:]
elif not res:
res.append(re.match(r'\w+', x).group())
else:
mo = re.match(r'\s+inet addr:(\S+).*Mask:(\S+)', x)
if mo:
res.extend(mo.groups())
elif re.match(r'\sUP\s', x):
res.append('up')
elif re.match(r'\sDOWN\s', x):
res.append('down')
if res: print ' '.join(res)
和輸出應該是你的願望它(容易在任何我所提到的其他語言的翻譯,我希望)。
您可能會感興趣ip
命令。以下示例重點介紹全局有效的IPv4地址以CIDR表示法輸出它們。
# list interfaces that are up
ip -family inet -oneline addr show scope global | awk '{ printf "%s %s up\n", $2, $4 }'
# list interfaces that are down
ip -family inet -oneline link show scope global | grep ' DOWN ' | sed 's/\://g' | awk '{ printf "%s none down\n", $2}'
(請注意,所需的網絡掩碼錶示在示例中省略了)
由於ip
是相當強大的,你也許可以找到使用其他參數的更清潔的解決方案。