
1. 先把 ifconfig 这份体检报告读明白ifconfig这个命令几乎每一个碰过 Linux 的人都在终端里敲过。它的全称是 interface configuration直译过来就是接口配置。我要做的第一件事不是急着敲命令而是先把这台机器上的网卡信息摊开看清楚——这块网卡有没有被系统认出来、有没有拿到地址、链路是不是通的、收发了多少数据、有没有丢包。这些信息全部藏在ifconfig那一屏不到二十行的输出里。它解决的问题很具体你不需要打开任何图形界面不需要记一堆路径一条命令就能拿到当前网络栈的快照。适合谁看刚接手一台云主机、手边一台装完系统却没网的 Ubuntu 机器、或者排查机器明明开着但连不上这类问题的运维和开发都绕不开它。哪怕你现在已经全面转用ip命令读懂ifconfig的输出依然是一项基础功因为大量老旧文档、脚本、工单备注里写的还是它。我会从输出字段逐行拆解开始再讲新版 Ubuntu 上ifconfig: command not found到底怎么回事、怎么补装、怎么用ip命令顶上最后落到 Ubuntu 上真正能长期生效的网卡配置方式。全程用可复现的命令和参数踩过的坑也一并写在里面。1.1 一条命令背后的三层信息很多人敲ifconfig只看第二行的inet后面那串地址其实一份完整的输出至少包含三层信息分清楚这三层排障效率能翻好几倍。第一层是接口的存在性与状态这块网卡有没有被内核驱动识别成一个网络接口是UP还是DOWN有没有RUNNING。第二层是地址与链路参数IPv4 地址、子网掩码、广播地址、IPv6 地址、MAC 地址、MTU 值。第三层是流量计数RX接收和 TX发送的包数、字节数、错误数、丢弃数。这三层的排查顺序不能乱。先看接口在不在第一层再看地址对不对第二层最后才看计数有没有异常第三层。我见过不少新手卡在第三层盯着errors数字发愁结果一查接口根本没UP方向从一开始就错了。1.2 为什么老手还是习惯先敲 ifconfigip addr信息更全、更现代这个没错。但在快速扫一眼当前网络状况这件事上ifconfig的输出密度和可读性确实讨喜一块网卡的地址、掩码、MAC、MTU、收发统计挤在紧凑的几行里不带颜色、不带多余层级眼睛一扫就完成。再加上一个现实原因大量现成的排障笔记和脚本片段用的都是ifconfig语法。你和同事沟通时对方说把ifconfig -a的结果贴给我你总不能反问一句你指的是ip link show吧。工具会迭代但同一批人共用的语言习惯不会那么快变。提示ifconfig属于 net-tools 套件主版本号停了十几年没动过。能用但不要指望它有新特性关键配置场景下ip和 netplan 才是正路。2. 新版 Ubuntu 敲不出 ifconfig从原因到三种补装思路这是近两年被问得最多的一类问题装完 Ubuntu尤其是 18.04 之后的版本照着老教程敲ifconfig终端直接甩回来一句Command ifconfig not found。第一次遇到的人会怀疑自己是不是把命令拼错了实际上命令没错是系统里压根没装这个程序。2.1 net-tools 为什么被移出默认安装原因不复杂。net-tools 这套工具ifconfig、route、arp、netstat等诞生于 Linux 网络栈还比较简单的年代它和内核的通信方式偏老很多东西靠直接读/proc文件拼出来功能上也逐渐追不上内核的新能力比如多地址、策略路由、网络命名空间。后来 iproute2 这套新工具用 netlink 接口和内核对话能力更全、行为更一致逐渐成为主流。Ubuntu 从 17.10 开始把 net-tools 从默认安装集合里拿掉了。注意措辞——是不再默认安装不是删除了。软件源里还有包装上就能用。所以你的 Ubuntu 里没有ifconfig是正常的出厂状态不是系统坏了。这里有个挺常见的误判有人看到ip addr输出里没有ifconfig那种熟悉的格式就以为系统把网络功能砍了。不是的是工具换了底下那套东西一点没少。2.2 补装 net-tools 的完整步骤如果你确实需要ifconfig——比如要跑一个只认老命令的脚本或者团队排障流程统一用它——直接装回来就行。sudo apt update sudo apt install -y net-tools装完验证一下ifconfig -a能正常刷出接口列表就说明生效了。这里有两个细节值得留意。第一apt update不要省。有些机器上软件索引太久没更新apt install net-tools会报无法定位软件包其实包是有的就是索引过期了。第二公司内网或隔离环境里如果配的是内网镜像源得确认这个源里有 net-tools 包否则更新索引也找不到。注意如果机器完全没网apt install这条路就走不通了。这时候优先用系统已有的ip命令完成排查比费劲去找离线包更划算。2.3 不想装用 ip 命令覆盖 ifconfig 的常用场景装包总归要动系统有些生产机不允许随便加软件。那就用已经装好的ip命令属于 iproute2绝大多数发行版默认都有。两者的对应关系记住一张表就够了。使用目的ifconfig 写法ip 写法查看所有接口ifconfig -aip link show查看地址推荐ifconfigip -br addr show启用某块网卡ifconfig ens33 upip link set ens33 up关闭某块网卡ifconfig ens33 downip link set ens33 down临时加地址ifconfig ens33 192.168.1.50/24ip addr add 192.168.1.50/24 dev ens33删除地址ifconfig ens33 0ip addr del 192.168.1.50/24 dev ens33查看路由表route -nip route show查看邻居表arp -aip neigh showip -br addr里的-br是 brief简洁模式每块网卡一行接口名、状态、地址一次看全我个人日常排障用得最多的就是它。输出大概是这个形式lo UNKNOWN 127.0.0.1/8 ::1/128 ens33 UP 192.168.1.50/24 fe80::20c:29ff:fe12:3456/64 docker0 DOWN 172.17.0.1/16一块网卡一行眼睛从上往下扫三秒钟定位问题接口。3. ifconfig 输出逐行拆解每个字段到底说什么装好之后敲ifconfig -a屏幕上会刷出一堆内容。我们以一块典型的有线网卡为例逐行过一遍。ens33: flags4163UP,BROADCAST,RUNNING,MULTICAST mtu 1500 inet 192.168.1.50 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::20c:29ff:fe12:3456 prefixlen 64 scopeid 0x20link ether 00:0c:29:12:34:56 txqueuelen 1000 (Ethernet) RX packets 158234 bytes 198746321 (189.5 MiB) RX errors 0 dropped 12 overruns 0 frame 0 TX packets 93210 bytes 15872344 (15.1 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 03.1 第一行接口名、状态标记、MTU 和地址ens33是接口名。这个命名的门道不小早期 Linux 用eth0、eth1这种按探测顺序编号的名字多块网卡时顺序可能变化重启一次eth0和eth1调换位置配置就全乱了。后来 systemd 引入了可预测网络接口名称用物理位置来命名稳定性好得多。大致规律是这样的en开头表示以太网ethernetwl开头表示无线wireless后面的o指板载onboards指插槽编号p指 PCI 总线位置x后面跟 MAC 地址。所以eno1就是板载第一块有线网卡ens33是插槽编号 33常见于虚拟机enp3s0是 PCI 位置上的网卡wlp2s0是无线网卡。flags4163UP,BROADCAST,RUNNING,MULTICAST这一串是关键状态逐个看UP接口在管理上处于启用状态。没有它网卡就是关的。BROADCAST支持广播。RUNNING链路已经协商成功物理连接是通的。这一点跟UP是两码事。MULTICAST支持组播。LOOPBACK只有lo才会出现表示这是环回接口。我特意把UP和RUNNING分开讲因为这是排障时最容易混淆的一对。UP表示我打算用了RUNNING表示确实连上了。插着网线但交换机那头没通电UP有、RUNNING没有这是很典型的场景。反过来虚拟环境里 veth 之类的虚拟接口状态标记也常有特殊表现。mtu 1500是最大传输单元单位字节。以太网默认 1500环回接口lo通常是 65536。后面会讲什么时候需要动它。第二行的inet 192.168.1.50 netmask 255.255.255.0 broadcast 192.168.1.255就是 IPv4 地址三件套。掩码写成点分十进制形式255.255.255.0等价于24位。需要注意的是如果这块网卡没有拿到地址这一行会直接消失——不是显示0.0.0.0而是整行不见。很多人找不到第二行就慌了其实接口本身是好的只是没配上地址。3.2 inet6 与 MAC 地址行inet6 fe80::20c:29ff:fe12:3456 prefixlen 64 scopeid 0x20link是 IPv6 地址。fe80::开头的是链路本地地址只要接口启用就会自动生成通常不用管它。scopeid 0x20link表示这个地址只在本地链路范围内有效。ether 00:0c:29:12:34:56是网卡的物理地址也就是 MAC 地址。有几个实际用途虚拟机克隆之后网卡 MAC 相同会导致冲突得改交换机端口绑定经常按 MAC 来配路由器的 DHCP 地址保留也是靠 MAC。txqueuelen 1000是发送队列长度默认值一般不用调。(Ethernet)提示接口类型无线网卡这里会显示别的字样。3.3 RX/TX 计数判断链路质量的实战依据最后四行是收发统计这块信息在排查网卡看着正常但网络时好时坏时特别有价值。字段含义异常时的常见原因RX packets累计接收包数数值不增长说明没有流量进来RX bytes累计接收字节数配合包数估算平均包大小RX errors接收错误总数物理链路质量差、网线或模块问题RX dropped因缓冲区不足被丢弃系统负载高、缓冲区偏小RX overruns因来不及处理而丢弃中断或驱动处理能力不足RX frame帧对齐错误双工不匹配、线缆故障TX errors发送错误总数链路协商异常TX carrier载波丢失次数网线接触不良、对端设备问题collisions冲突计数半双工环境下出现全双工下不该有用法很简单记下当前数值等一会儿再看或者用watch持续观察。watch -n 1 ifconfig ens33每秒刷新一次盯着RX packets和TX packets涨不涨。涨说明有流量不涨而你觉得应该有流量那就是链路或地址配置的问题。errors和dropped这类计数是累计值要看的是增量不是绝对值——一台跑了一个月的机器有几个 dropped 完全正常一分钟涨几百个那就有问题了。4. 参数与常用操作起、停、改、看ifconfig的参数不算多但每个都有明确用途。我把日常真正会用到的几类操作整理出来都是临时的、重启即失效的操作适合应急排障。4.1 启用与停用网卡sudo ifconfig ens33 down sudo ifconfig ens33 up对应的ip写法是ip link set ens33 down和ip link set ens33 up。这就是很多港台技术文档里说的啟用網卡激活网卡——本质就是把接口从DOWN拉到UP。看到UP但缺RUNNING说明物理链路那层还有问题光靠命令拉不起来。注意如果这条连接就是你的登录通道比如 SSH 走的就是这块网卡把它down掉等于自己把自己踢下线。远程操作前一定先确认有没有带外管理或备用通路。4.2 临时配置地址、掩码和 MTUsudo ifconfig ens33 192.168.1.50 netmask 255.255.255.0 up sudo ifconfig ens33 mtu 1400第一条给网卡配上地址并拉起第二条把 MTU 改成 1400。改 MTU 的典型场景是链路中间有封装开销1500 会分片调小之后传输反而更稳。调完可以用ping -M do -s 1472 目标地址验证路径支持的最大值1472 28 字节的 IP/ICMP 头 1500。要加第二个地址用冒号别名sudo ifconfig ens33:1 192.168.1.51 netmask 255.255.255.0 up删掉别名地址sudo ifconfig ens33:1 down这里有个坑值得说老教程里常写ifconfig ens33 0来清空地址这个写法在不同版本上行为不一致有的直接报错。稳妥的做法是记下原来的地址用ip addr del精确删除别用这种归零的野路子。4.3 -a、-s、-v 分别什么时候用-a显示所有接口包括处于DOWN状态的。这个参数几乎是排障必备因为默认的ifconfig会把关掉的接口藏起来你会误以为机器只有一块网卡。ifconfig -a-s输出简表每块网卡的收发统计压成一行趋势观察很方便ifconfig -s输出大概是这样Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg ens33 1500 0 158234 0 12 0 93210 0 0 0 BMRU lo 65536 0 14203 0 0 0 14203 0 0 0 LRUFlg那列是状态标记的缩写BMRU分别对应 BROADCAST、MULTICAST、RUNNING、UP。一眼扫过去就知道哪块网卡在跑、哪块有问题。-v会输出更啰嗦的信息日常用得少一般排查驱动层面的细节才会去翻。5. Ubuntu 上真正长期生效的网卡配置方式前面用ifconfig做的修改重启就没了而且如果系统里有网络管理服务在跑它随时可能把你手改的配置覆盖掉。要让配置稳定生效得走 Ubuntu 自己的那套流程。5.1 netplan17.10 之后的主线方案Ubuntu 从 17.10 开始引入 netplan配置文件放在/etc/netplan/目录下通常是.yaml后缀。它本身不直接管网卡而是把配置翻译给后端NetworkManager 或 systemd-networkd去执行。看一下现有配置ls /etc/netplan/ sudo cat /etc/netplan/*.yamlDHCP 自动获取的写法network: version: 2 renderer: networkd ethernets: ens33: dhcp4: true静态地址的写法network: version: 2 renderer: networkd ethernets: ens33: addresses: - 192.168.1.50/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: [223.5.5.5, 114.114.114.114]YAML 对缩进极其敏感只能用空格不能用 Tab层级差一格意思就变了。改完先试运行sudo netplan try它会应用配置并要求确认超时没确认就自动回滚这个机制对远程改网络的场景非常友好。确认没问题再正式应用sudo netplan apply这里有个版本差异必须提醒早期写法用gateway4: 192.168.1.1配默认网关这个字段目前已经被标记为废弃新版本会打出警告。上面用的routes带to: default是新写法直接照着写可以少踩一次坑。5.2 nmcli桌面版 Ubuntu 更顺手的路子Ubuntu 桌面版默认由 NetworkManager 接管网络命令行工具是nmcli。它的好处是改完立即生效不用再去netplan apply。nmcli device status nmcli connection show第二条会列出所有连接配置的名字比如是Wired connection 1这种中文环境下的固定串。接着改sudo nmcli connection modify Wired connection 1 ipv4.method manual sudo nmcli connection modify Wired connection 1 ipv4.addresses 192.168.1.50/24 sudo nmcli connection modify Wired connection 1 ipv4.gateway 192.168.1.1 sudo nmcli connection modify Wired connection 1 ipv4.dns 223.5.5.5 114.114.114.114 sudo nmcli connection up Wired connection 1改回自动获取sudo nmcli connection modify Wired connection 1 ipv4.method auto sudo nmcli connection up Wired connection 1一个容易忽略的点用nmcli配出来的连接配置存在 NetworkManager 自己的数据库里netplan 文件中看不到。如果机器上同时开了两个渲染后端容易出现我在 netplan 里改了但没生效的情况。先确认当前是哪套在管systemctl is-active NetworkManager systemctl is-active systemd-networkd哪个是 active 的就按哪套来配别两边同时改。5.3 老版本 interfaces 文件了解一下就够再老一点的 Ubuntu16.04 及以前用的是/etc/network/interfaces写法是这样auto ens33 iface ens33 inet static address 192.168.1.50 netmask 255.255.255.0 gateway 192.168.1.1现在遇到这套写法的机会主要是维护老旧系统。如果你在新系统上照着这份配置改了/etc/network/interfaces却不生效别怀疑自己写错了——新系统根本不读这个文件。6. 常见故障排查与速查表这一节是整篇里最实用的部分都是实际被问过、实际修过的问题。6.1 看不到网卡或者只有 lo敲ifconfig -a只出来一个lo说明内核没识别到任何物理网卡。按这个顺序查先是硬件层面看看系统有没有枚举到这个设备lspci | grep -i ethernet ls /sys/class/net dmesg | grep -i ethlspci能看到设备但/sys/class/net里没有对应接口多半是驱动没加载。dmesg里的报错信息通常直接告诉你缺哪个固件或模块。虚拟机的话还得检查虚拟化平台那边网卡是不是配成了未连接状态。再排除一个低级问题有些系统上接口存在但被关了ifconfig -a能看到但状态是DOWN直接sudo ifconfig ens33 up就回来了。这种最简单也最常见。6.2 网卡 UP 了但拿不到地址接口UP、有RUNNING但inet那一行不出现。按顺序排查第一步确认是不是 DHCP 没响应。挂上 dhclient 手动试一次sudo dhclient -v ens33-v会打印详细交互过程发了几次请求、有没有回应一目了然。第二步看网段和网关对不对。同网段内ping一下网关通了说明二层没问题问题在地址分配或上层配置。第三步检查有没有别的服务在抢管这块网卡。前面提到的 netplan、NetworkManager、旧式 ifupdown 三套机制并存时容易互相打架表现就是我明明配了重启后又变回去了。6.3 常见问题速查表现象大概率原因处理方向ifconfig: command not foundnet-tools 未安装sudo apt install -y net-tools只看到 lo网卡未被识别或驱动缺失查lspci、dmesg、虚拟化平台设置有 UP 无 RUNNING物理链路未建立查网线、交换机端口、对端设备有地址但连不上外网网关或 DNS 配置错误ip route show、测试 DNS 解析重启后配置丢失用了临时命令未做持久化改用 netplan 或 nmcli改了 netplan 不生效YAML 缩进错误或改错文件netplan try看报错核对待改接口名RX dropped 持续增长缓冲区不足或负载过高观察增量必要时调整队列参数collisions 非零半双工模式或双工不匹配确认两端双工设置一致MAC 地址与其他机器冲突虚拟机克隆未重置修改虚拟网卡 MAC 或系统侧配置6.4 几个我踩过的坑第一个坑在容器里折腾ifconfig。精简镜像里没有 net-tools你装上了看到的eth0也是容器自己的网络命名空间跟你以为的宿主机网卡完全不是一回事。容器内排查优先用ip宿主机上再看真实网卡。第二个坑ifconfig的临时修改会被 NetworkManager 清掉。我早年在服务器上直接用ifconfig配好地址测试一切正常第二天运维重启一次全没了。从那以后凡是持久化需求一律走 netplan 或 nmcli。第三个坑把netmask写错导致网关不通。以为配了192.168.1.50/24实际掩码写成了255.0.0.0网关192.168.1.1被判成同网段直连结果 ARP 谁都不应网络看着像时通时不通。遇到这种诡异现象第一件事就是核对掩码和路由表。第四个坑SSH 上去改网卡配置改完netplan apply那一瞬间连接断了。netplan try能兜住大部分手滑但更稳的做法是先用tmux或screen挂个会话万一断线还能重连回来继续处理。7. 我实际用下来的一点体会ifconfig到今天工具属性其实分成了两半看这一半依然好用输出紧凑、字段直白ifconfig -a和ifconfig -s是我登上一台陌生机器后最常敲的两条命令改这一半我基本不用了临时改地址、拉接口这些操作ip命令的行为更明确尤其是在多地址和删除地址的场景下不会出现莫名其妙的报错。所以我的习惯是快速摸情况用ifconfig落配置用 netplan 或 nmcli需要精确操作接口时切到ip。三套工具各管一段比强行统一到某一个上面要顺手得多。新版 Ubuntu 上没有ifconfig也别抗拒sudo apt install -y net-tools一条命令的事装完之后那份熟悉的输出回来了读它的能力才是真正省时间的那部分。