ifconfig 命令 #
ifconfig
命令(interface configuration)用于配置、管理和查询网络接口。它可以显示网络接口的状态、配置 IP 地址、子网掩码、MAC 地址等。在现代 Linux 系统中,ifconfig
命令已经被ip
命令所取代,但由于其简单性和历史原因,仍然被广泛使用。
语法 #
ifconfig [接口] [参数]
常用选项和参数 #
选项/参数 | 描述 |
---|---|
无参数 | 显示所有活动接口的信息 |
接口 |
指定要操作的网络接口(如 eth0, wlan0) |
up |
激活指定的网络接口 |
down |
停用指定的网络接口 |
address/netmask |
设置 IP 地址和子网掩码 |
broadcast |
设置广播地址 |
[-]promisc |
启用或禁用混杂模式 |
[-]allmulti |
启用或禁用所有多播模式 |
mtu N |
设置最大传输单元(MTU) |
netmask 掩码 |
设置子网掩码 |
add 地址/前缀长度 |
添加 IPv6 地址 |
del 地址/前缀长度 |
删除 IPv6 地址 |
-a |
显示所有接口的信息,包括非活动接口 |
-s |
显示简短信息 |
-v |
显示详细信息 |
安装 #
在某些现代 Linux 发行版中,ifconfig
命令可能不是默认安装的。可以使用以下命令安装:
# Debian/Ubuntu
sudo apt install net-tools
# CentOS/RHEL
sudo yum install net-tools
# Fedora
sudo dnf install net-tools
# Arch Linux
sudo pacman -S net-tools
常见用法 #
1. 显示所有活动网络接口的信息 #
ifconfig
输出示例:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::215:5dff:fe01:7c0d prefixlen 64 scopeid 0x20<link>
ether 00:15:5d:01:7c:0d txqueuelen 1000 (Ethernet)
RX packets 8859 bytes 1508527 (1.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4523 bytes 4116345 (4.1 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 1234 bytes 123456 (123.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1234 bytes 123456 (123.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2. 显示特定网络接口的信息 #
ifconfig eth0
3. 显示所有网络接口的信息(包括非活动接口) #
ifconfig -a
4. 激活网络接口 #
sudo ifconfig eth0 up
5. 停用网络接口 #
sudo ifconfig eth0 down
6. 设置 IP 地址 #
sudo ifconfig eth0 192.168.1.100
7. 设置 IP 地址和子网掩码 #
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0
8. 设置 IP 地址、子网掩码和广播地址 #
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
9. 更改 MAC 地址 #
sudo ifconfig eth0 hw ether 00:11:22:33:44:55
10. 启用混杂模式 #
sudo ifconfig eth0 promisc
11. 禁用混杂模式 #
sudo ifconfig eth0 -promisc
12. 设置 MTU 值 #
sudo ifconfig eth0 mtu 9000
13. 添加 IPv6 地址 #
sudo ifconfig eth0 add 2001:db8::1/64
14. 删除 IPv6 地址 #
sudo ifconfig eth0 del 2001:db8::1/64
输出解释 #
ifconfig
命令的输出包含以下主要信息:
- 接口名称:如 eth0, wlan0, lo 等
- flags:接口的状态标志
- UP:接口已激活
- BROADCAST:接口支持广播
- RUNNING:接口已就绪
- MULTICAST:接口支持多播
- LOOPBACK:环回接口
- mtu:最大传输单元,以字节为单位
- inet:IPv4 地址
- netmask:子网掩码
- broadcast:广播地址
- inet6:IPv6 地址
- prefixlen:IPv6 前缀长度
- scopeid:IPv6 作用域 ID
- ether:MAC 地址
- txqueuelen:传输队列长度
- RX packets/bytes:接收的数据包数量和字节数
- TX packets/bytes:发送的数据包数量和字节数
- errors/dropped/overruns/frame:各种错误统计
与 ip 命令的对比 #
ifconfig
命令已经被ip
命令所取代。以下是一些常见操作的对比:
操作 | ifconfig 命令 | ip 命令 |
---|---|---|
显示所有接口 | ifconfig |
ip addr show |
显示特定接口 | ifconfig eth0 |
ip addr show dev eth0 |
激活接口 | ifconfig eth0 up |
ip link set eth0 up |
停用接口 | ifconfig eth0 down |
ip link set eth0 down |
设置 IP 地址 | ifconfig eth0 192.168.1.100 |
ip addr add 192.168.1.100/24 dev eth0 |
删除 IP 地址 | 不直接支持 | ip addr del 192.168.1.100/24 dev eth0 |
设置 MTU | ifconfig eth0 mtu 9000 |
ip link set eth0 mtu 9000 |
实用示例 #
1. 检查网络接口状态 #
ifconfig | grep -A 1 "eth"
2. 临时更改 IP 地址 #
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0
3. 检查网络接口的 MAC 地址 #
ifconfig eth0 | grep ether
4. 检查网络接口的数据传输统计 #
ifconfig eth0 | grep "RX\|TX"
5. 重启网络接口 #
sudo ifconfig eth0 down && sudo ifconfig eth0 up
6. 检查是否有接口处于混杂模式 #
ifconfig | grep PROMISC
7. 设置临时的别名接口(虚拟接口) #
sudo ifconfig eth0:0 192.168.2.100 netmask 255.255.255.0
注意事项 #
-
使用
ifconfig
命令进行的配置在系统重启后不会保留。要永久更改网络配置,应该修改网络配置文件。 -
在现代 Linux 发行版中,推荐使用
ip
命令代替ifconfig
命令,因为ip
命令提供了更多功能和更一致的语法。 -
在某些系统上,
ifconfig
命令可能需要 root 权限才能执行,特别是进行配置更改时。 -
不同的 Linux 发行版可能有不同的网络配置文件和工具,如:
- Debian/Ubuntu:
/etc/network/interfaces
- CentOS/RHEL:
/etc/sysconfig/network-scripts/ifcfg-*
- 使用 NetworkManager 的系统:
nmcli
或nmtui
工具
- Debian/Ubuntu:
提示 #
- 使用
ifconfig
命令可以快速查看网络接口的状态和配置 - 对于临时网络配置更改,
ifconfig
命令很方便 - 在脚本中,可以使用
ifconfig
命令提取网络信息 - 使用
ifconfig -a
可以查看所有网络接口,包括未激活的接口 - 在现代系统中,建议学习和使用
ip
命令,因为它是ifconfig
的替代品 - 使用
ifconfig
命令更改网络配置通常需要 root 权限 - 在容器或虚拟环境中,可能需要特殊权限才能使用
ifconfig
命令