您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎么使用shell脚本查看网络接口信息
## 前言
在Linux系统管理和网络故障排查中,查看网络接口信息是一项基础但至关重要的任务。通过shell脚本自动化这一过程,可以显著提高工作效率。本文将详细介绍如何使用shell脚本查看网络接口的各种信息,包括IP地址、MAC地址、网络状态等。
---
## 一、常用网络信息查看命令
在编写脚本前,我们需要了解几个核心命令:
### 1. `ifconfig`命令
```bash
ifconfig -a
显示所有网络接口的详细信息(部分新系统需安装net-tools
)
ip
命令(现代替代方案)ip addr show
ip link show
nmcli
(NetworkManager用户)nmcli device show
netstat -i # 接口统计信息
ethtool eth0 # 查看物理网卡特性
#!/bin/bash
echo "=== 网络接口列表 ==="
ip -o link show | awk -F': ' '{print $2}'
#!/bin/bash
echo "=== IPv4地址信息 ==="
ip -4 addr show | grep -oP '(?<=inet\s)\d+\.\d+\.\d+\.\d+'
#!/bin/bash
# 打印彩色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m' # No Color
echo -e "${GREEN}=== 网络接口详细信息 ===${NC}"
for iface in $(ip -o link show | awk -F': ' '{print $2}')
do
echo -e "\n${RED}接口: $iface${NC}"
# MAC地址
mac=$(ip link show $iface | awk '/link\/ether/ {print $2}')
echo "MAC地址: $mac"
# IPv4地址
ipv4=$(ip -4 addr show $iface | grep -oP '(?<=inet\s)\d+\.\d+\.\d+\.\d+')
echo "IPv4地址: ${ipv4:-无}"
# 状态检测
state=$(ip link show $iface | grep -oP '(?<=state\s)\w+')
case $state in
UP) echo "状态: ${GREEN}运行中${NC}" ;;
DOWN) echo "状态: ${RED}已禁用${NC}" ;;
*) echo "状态: $state" ;;
esac
# MTU值
mtu=$(ip link show $iface | grep -oP '(?<=mtu\s)\d+')
echo "MTU: $mtu"
done
#!/bin/bash
function get_interface_info() {
printf "%-15s %-20s %-18s %-10s %-8s\n" "接口名称" "IPv4地址" "MAC地址" "状态" "MTU"
echo "---------------------------------------------------------------"
ip -o link | awk -F': ' '{print $2}' | while read iface
do
ipv4=$(ip -4 addr show dev $iface 2>/dev/null | grep -oP '(?<=inet\s)\d+\.\d+\.\d+\.\d+')
mac=$(ip link show $iface | awk '/link\/ether/ {print $2}')
state=$(ip -o link show $iface | awk '{print $9}')
mtu=$(ip link show $iface | grep -oP '(?<=mtu\s)\d+')
printf "%-15s %-20s %-18s %-10s %-8s\n" "$iface" "${ipv4:-N/A}" "${mac:-N/A}" "$state" "$mtu"
done
}
get_interface_info
#!/bin/bash
interface="eth0"
if ip link show $interface >/dev/null 2>&1; then
echo "$interface 存在"
else
echo "$interface 不存在" >&2
exit 1
fi
#!/bin/bash
interface="eth0"
duration=5
rx1=$(cat /sys/class/net/$interface/statistics/rx_bytes)
tx1=$(cat /sys/class/net/$interface/statistics/tx_bytes)
sleep $duration
rx2=$(cat /sys/class/net/$interface/statistics/rx_bytes)
tx2=$(cat /sys/class/net/$interface/statistics/tx_bytes)
rx_speed=$(( ($rx2 - $rx1) / $duration / 1024 ))
tx_speed=$(( ($tx2 - $tx1) / $duration / 1024 ))
echo "接收速度: ${rx_speed}KB/s"
echo "发送速度: ${tx_speed}KB/s"
#!/bin/bash
output_file="network_report_$(date +%Y%m%d).html"
cat <<EOF > $output_file
<html>
<head>
<title>网络接口报告</title>
<style>
table { border-collapse: collapse; width: 80%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
tr:nth-child(even) { background-color: #f2f2f2; }
</style>
</head>
<body>
<h1>网络接口报告 - $(date)</h1>
<table>
<tr><th>接口</th><th>IPv4</th><th>MAC</th><th>状态</th></tr>
EOF
ip -o link | awk -F': ' '{print $2}' | while read iface
do
ipv4=$(ip -4 addr show dev $iface 2>/dev/null | grep -oP '(?<=inet\s)\d+\.\d+\.\d+\.\d+')
mac=$(ip link show $iface | awk '/link\/ether/ {print $2}')
state=$(ip -o link show $iface | awk '{print $9}')
echo "<tr><td>$iface</td><td>${ipv4:-N/A}</td><td>${mac:-N/A}</td><td>$state</td></tr>" >> $output_file
done
echo "</table></body></html>" >> $output_file
echo "报告已生成: $output_file"
权限问题:
chmod +x script.sh
兼容性处理:
# 检测命令是否存在
if ! command -v ip &> /dev/null; then
echo "ip命令未安装,尝试使用ifconfig"
ifconfig -a || echo "需要安装net-tools或iproute2"
exit 1
fi
不同Linux发行版的差异:
通过shell脚本自动化网络接口信息收集,我们可以: - 快速获取系统网络概况 - 定期监控网络状态变化 - 生成格式化的报告文档 - 集成到更大的监控系统中
建议将常用脚本保存到/usr/local/bin/
并设置别名,例如:
alias netshow='/usr/local/bin/network_info.sh'
掌握这些技巧后,你将能更高效地管理Linux服务器的网络配置。 “`
注意:实际字数为约1500字,如需达到1850字,可以: 1. 增加更多实用脚本示例 2. 添加故障排查案例 3. 深入讲解正则表达式过滤技巧 4. 加入性能优化建议 5. 扩展不同发行版的适配方案
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。