Linux查询与修改IP全攻略:从命令到配置文件实战
九九八十一难用在 Linux 的学习路上再贴切不过。每一道坎都是一只拦路猛虎而“查询和修改 IP”绝对是新手出山遇上的第一只。很多朋友刚开始接触服务器第一件事就是 SSH 连上去结果发现网络不通临时接手一台不知底细的机器又不知道该上哪儿看 IP、改 IP。搞明白了这个后面去配防火墙、搭服务、做集群才算真正能站住脚。这篇文章我把这些年摸爬滚打的“打虎”经验整理了一遍从最简单的查看命令讲起到静态 IP 的配置文件修改再到动态环境下怎么处理多网卡、改完 IP 连不上怎么办一层层拆开揉碎。既有速查命令也有完整的实操记录适合刚接触 Linux 的新手也适合需要远程维护服务器的运维朋友做一份“防翻车手册”。1. 内容整体设计与思路拆解1.1 为什么“查 IP、改 IP”算第一只拦路虎先说个我自己的例子。早些年给某公司一台老旧的服务器换机房上家运维交接的文档上只写了一行“CentOS 6IP 你自己找”。人到现场接上显示器登录进去愣是不知道该敲什么命令。第一次输入ifconfig结果屏幕提示 command not found整个人当场石化。后来才反应过来新装的系统可能连 net-tools 都没装而还停留在“ifconfig 万能”的思维里。这就是第一只猛虎的本质查 IP 的工具不止一个且不同发行版、不同最小化安装方式默认带的命令完全不一样。有人习惯ip addr有人习惯ifconfig还有人用hostname -I。而修改 IP 更是有“命令行临时生效”和“改配置文件永久生效”两条路线。如果不先把这些概念分清楚很容易出现“改了但重启就失效”“这个网卡明明配好了系统却走了另一块网卡”之类的怪问题。从需求场景看主要分三类临时调试一个人帮朋友看机器只需要赶紧知道当前 IP 是多少或者临时换一个网段试试连通性用完就恢复。服务器落地配置给新装好的系统固化一个固定 IP重启、断电都要保持必须把配置写进网络配置文件。容器或虚拟化环境宿主机、虚拟机、容器各有各的网络命名空间ip命令的作用对象和场景很多不是一码事否则你会发现在容器里改了 IP宿主机照样不通。这篇文章会以最常见的物理机或虚拟机场景为主先讲清楚命令行怎么看、怎么临时改再重点拆解不同发行版配置文件里那些容易混淆的字段把网卡命名、DHCP、静态路由这些连带的知识点一并讲透。1.2 方案选型哪条路最适合不同阶段的人查 IP 也好改 IP 也好我都坚持一个原则先会用命令再去碰配置文件。原因是命令行的反馈是实时的新手能看到“我敲了什么、发生了什么”而配置文件一旦写错网卡起不来又没调试思路的话容易慌。如果你还是入门阶段我的建议是把这两条命令练到肌肉记忆查看ip addr或ip a临时修改sudo ip addr add 192.168.1.100/24 dev eth0等你把这些命令玩顺手了再去捋配置文件。因为配置文件这个环节涉及的东西更多——NetworkManager 管不管这个接口、重启网络服务的命令是systemctl restart network还是systemctl restart NetworkManager、Ubuntu 的 netplan 和 CentOS 的 ifcfg 文件写法完全不同。工具选型这块我也顺便说一句网上的教程鱼龙混杂很多人喜欢一上来就贴“万能脚本”但脚本里的网卡名跟你机器上的完全对不上。生产环境最稳妥的方式永远是“先查后改、小步验证”而不是复制粘贴。2. 核心细节解析与实操要点2.1 查 IP 的六种姿势哪些最靠谱先摆结论Linux 下查 IP 最通用的命令是ip addr因为它属于iproute2工具包几乎所有主流发行版都自带。除非是极度精简的容器镜像否则你不会遇到找不到ip命令的情况。ip addr这条命令的输出会列出机器上的所有网络接口包括 lo、eth0、ens33、ens18 等。你会看到类似这样的内容2: eth0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:3a:4b:5c brd ff:ff:ff:ff:ff:ff inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0 valid_lft 86251sec preferred_lft 86251sec重点看inet那一行。192.168.1.100/24就是这台机器的 IPv4 地址/24代表子网掩码是 255.255.255.0。后面跟着dynamic说明这是 DHCP 动态获取的地址如果是static就是静态配置。ifconfig是老牌工具在较老的习惯里大家更熟悉它。但很多最小化安装的系统并没有 net-tools需要自己装sudo apt install net-tools # Debian/Ubuntu sudo yum install net-tools # CentOS/RHEL装上后使用ifconfig也能看到inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255这样的信息。输出稍微直观一点但现代系统里我建议能不用就不用把精力放在ip命令上。还有几个旁路技巧hostname -I这条命令最简洁只列出 IP 地址不带任何其他信息适合写脚本时用。如果你只想看某一个网卡的地址可以拼上设备名ip -4 addr show eth0只看 IPv4不看 IPv6避免输出信息过多扰乱视线。有时候我们还需要确认默认网关ip route输出里default via 192.168.1.1 dev eth0表示默认网关是 192.168.1.1数据包要去外网先交给它。2.2 看清网卡命名规律避免张冠李戴很多人改 IP 失败不是因为命令不会而是网卡名对应错了。早期 Linux 网卡叫 eth0、eth1这好理解。但现代系统上你可能见到ens33VMware 虚拟机常见ens18Proxmox 虚拟化常见enp0s3VirtualBox 常见eno1服务器主板自带网口wlp2s0无线网卡这些名字看起来毫无规律似乎完全靠缘分。其实是有规则的en代表以太网后面的字母和数字表示总线位置、PCI 插槽编号等。这个命名方式叫“可预测网络接口名”目的是让网卡名字在硬件不变的情况下保持稳定避免以前那种“重启一次 eth0 和 eth1 顺序就换”的窘境。实操中我的习惯是动手之前先ip addr看一遍所有接口的 MAC 地址再用ethtool -p eth0如果有让网卡指示灯闪烁来确认物理插槽对应关系。服务器有多块网卡时这一步能帮你省掉大量“改错网卡”的无效劳动。2.3 看清 DHCP 与静态 IP 的本质区别“修改 IP”这个动作背后其实是在“让系统使用一个指定的静态 IP”和“让它继续从路由器自动获取 IP”之间做选择。DHCP 模式下系统启动时向网段内广播请求路由器给你分配一个 IP有租期到期续约。适合笔记本、手机这类需要频繁换网络的设备。静态 IP 模式下配置文件写死一个地址系统启动时直接使用不依赖 DHCP 服务器。适合服务器、打印机、监控设备因为你要把端口映射、访问控制列表建立在固定地址上。改 IP 前先问自己一句这台机器在网络里的身份是“流动人口”还是“常住居民”如果是服务器老老实实配置静态 IP如果是临时测试机DHCP 省心得多。常见误区有人手动把 IP 改成静态却不关掉 DHCP 客户端也不检查 IP 是否和局域网里其他设备冲突。结果就是时通时断查了半天才发现是 IP 地址冲突。我建议在改静态 IP 之前一定先用ping -c 4 目标IP探测这个地址是否已被占用。3. 实操过程与核心环节实现3.1 临时修改 IP命令行三里路快进快出临时改 IP 用的是ip addr命令它的好处是不写入文件重启后配置就会失效适合拿来测试网络连通性。假设现在网卡 eth0 的地址是 192.168.1.100我想把它临时改成 192.168.1.200。第一步添加新地址sudo ip addr add 192.168.1.200/24 dev eth0此时如果你再执行ip addr会看到同一块网卡上出现了两个 IPv4 地址——原来的 192.168.1.100 还在新的 192.168.1.200 也加上了。这是ip addr add的一个特点它可以堆叠地址而不是替换地址。如果你确实想替换要先删旧的再加新的或者直接用ip addr replacesudo ip addr replace 192.168.1.200/24 dev eth0第二步确认路由。如果默认网关还是原来的直接ip route查看即可sudo ip route add default via 192.168.1.1 dev eth0第三步验证连通性ping -c 4 192.168.1.1能通就说明网段内的网关没问题。如果要访问外网还需要确认 DNS 配置。临时改 DNS 可以编辑/etc/resolv.conf我通常只在实际调试时才动它。临时修改的“撤销”也很重要。比如我把 IP 改成 192.168.1.200 后发现冲突了想把地址拿掉sudo ip addr del 192.168.1.200/24 dev eth0这样就删得干干净净不会残留任何配置。3.2 永久修改 IPCentOS/RHEL 系的 ifcfg 文件永久改 IP 意味着要把配置落盘。在 CentOS 7/8/9 这类 RHEL 系发行版上核心配置文件位于/etc/sysconfig/network-scripts/文件名一般是ifcfg-eth0或ifcfg-ens33。先备份原有文件再动手sudo cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.bak然后编辑文件sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0一份典型的静态 IP 配置长这样TYPEEthernet BOOTPROTOstatic NAMEeth0 DEVICEeth0 ONBOOTyes IPADDR192.168.1.200 NETMASK255.255.255.0 GATEWAY192.168.1.1 DNS1223.5.5.5 DNS2114.114.114.114关键字段逐个说BOOTPROTOstatic表示不使用 DHCP。ONBOOTyes系统启动时激活此接口。这个字段最容易被忽略设为no的后果是重启后网卡虽然存在但没有地址。IPADDR/NETMASK/GATEWAY三件套缺一不可。DNS1/DNS2指定域名服务器。有时候配完 IP 能 ping 通网关但解析不了域名就是 DNS 没写。保存退出后重启网络服务让它生效。不同版本命令不同CentOS 7 可以sudo systemctl restart networkCentOS 8/9 默认使用 NetworkManager更推荐这样sudo nmcli connection reload sudo nmcli connection up eth0nmcli是 NetworkManager 的命令行工具功能强大后面我会专门讲它。重启后执行ip addr确认地址已经变成 192.168.1.200。3.3 永久修改 IPUbuntu/Debian 系的 netplan 与 interfaces到了 Ubuntu 这头玩法又不一样了。18.04 及之后的版本默认使用 netplan配置文件位于/etc/netplan/通常是一个.yaml文件例如01-network-manager-all.yaml或00-installer-config.yaml。先看看现有配置cat /etc/netplan/00-installer-config.yaml常见内容如下network: version: 2 ethernets: eth0: dhcp4: true要改成静态 IPnetwork: version: 2 ethernets: eth0: dhcp4: false addresses: - 192.168.1.200/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 223.5.5.5 - 114.114.114.114注意这里地址直接写成了 CIDR 格式192.168.1.200/24路由用routes段表达。改完后应用配置sudo netplan apply应用前建议先检查一下语法sudo netplan trynetplan try会在应用前等待你确认如果应用后网络断开几十秒后会自动回滚。这个机制特别适合远程操作的场景——你改了配置文件万一把自己 SSH 断了系统还能自动恢复到原来的状态。对于更老的 Ubuntu 16.04 或 Debian 系配置文件则是/etc/network/interfaces写法auto eth0 iface eth0 inet static address 192.168.1.200 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 223.5.5.5 114.114.114.114保存后重启网络sudo systemctl restart networking3.4 用 nmcli 一键管理 IP操作系统的“控制面板”如果说 vim 编辑配置文件是手工模式那nmcli就是 Linux 里的图形控制面板。它把查 IP、改 IP、启停网卡全部统一成一套命令写脚本时也特别友好。查当前连接状态nmcli device status输出会列出每个设备的类型、状态和连接名。状态为 connected 的就是正在用的网卡。查看某个连接的详细 IP 信息nmcli connection show eth0改静态 IP 的命令行写法sudo nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.1.200/24 ipv4.gateway 192.168.1.1 ipv4.dns 223.5.5.5,114.114.114.114生效sudo nmcli connection up eth0改回 DHCPsudo nmcli connection modify eth0 ipv4.method auto sudo nmcli connection up eth0有朋友问我既然都能改那到底学vim改配置文件好还是学nmcli好我的看法是生产环境运维两个都要会。因为你不能保证所有机器都装了 NetworkManager更不能保证所有发行版都按同一套配置文件规则来。nmcli帮你了解当前系统这一层的网络状态配置文件则让你理解底层到底发生了什么。两个视角互相印证出问题的概率才小。3.5 多网卡场景下的“默认路由”陷阱机器只有一块网卡时配置简单直接。一旦有了两块以上网卡猛虎就变本加厉了。比如一台服务器有 eth0 和 eth1分别连着内网和公网你给 eth1 配了公网 IP却发现从内网访问另一个网段时数据包走了错误的接口。这就是路由表的问题。ip route一旦显示有多个default via系统会按照路由条目的 metric 值来决定优先走哪条路。我们可以手动调整路由优先级sudo ip route del default via 192.168.1.1 dev eth0 sudo ip route add default via 192.168.2.1 dev eth1 metric 100或直接给单条路由加 metricsudo ip route add default via 192.168.2.1 dev eth1 metric 200metric 值越小优先级越高。要是想让某个网段的流量固定走某个接口可以用策略路由sudo ip rule add from 192.168.1.0/24 lookup 100 sudo ip route add table 100 default via 192.168.1.1 dev eth0这种复杂场景并不常见但一旦遇到很多人会被“明明 IP 是对的就是不通”折磨一整天所以我把这个坑提前摆出来。配置多网卡时每次改完都记得三连查ip addr ip route ping -c 3 网关4. 常见问题与排查技巧实录4.1 改完 IP 后 SSH 直接断开怎么办这个问题太经典了尤其是远程服务器上操作时几乎每个人都经历过。你在本地把 SSH 连到服务器改了 IP 之后回车终端卡住几秒然后就掉了。原因很简单SSH 连接基于原来的 IP 地址你把地址换掉原有连接自然中断。先泼一盆冷水如果配置没写错你只要等几秒用新 IP 重新连就行。真正的坑在于“我以为写错了”或者“我现在连不回去了”。线上抢救的操作顺序非常重要不要慌不要反复重启服务器。如果服务器在你手边直接接显示器和键盘登录。用ip addr看当前网卡地址判断配置是否真的生效了。如果地址没有变化说明配置文件没有正确加载。检查/etc/netplan或ifcfg文件中是否有语法错误。如果地址正确但连不上可能是防火墙把新网段的访问拦了。临时放行sudo firewall-cmd --add-rich-rulerule familyipv4 source address192.168.1.0/24 port port22 protocoltcp accept --permanent sudo firewall-cmd --reload如果你第一次改 IP 是在本机操作那么老老实实用ip addr add先加一个新地址等 SSH 连接稳定了再把旧地址删掉会比“直接替换”稳很多。4.2 改了静态 IP重启后地址不见了这种情况多半是ONBOOTno或 netplan 中接口名与实际不匹配。CentOS 系最常见检查cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep ONBOOT如果是ONBOOTno改成yes后重启网络。Ubuntu netplan 中则是查看cat /etc/netplan/00-installer-config.yaml重点看ethernets下面的名字是否和ip addr显示的一致。有时候系统实际接口叫enp1s0配置文件里却写着eth0那 netplan 找不到设备自然就不会配置。排查这类问题有个通用命令重启网络服务后立刻看系统日志journalctl -u systemd-networkd -n 50或检查 NetworkManager 日志journalctl -u NetworkManager -n 50日志会明确告诉你“设备找不到”“地址配置失败”“DHCP 请求超时”等信息比肉眼猜快得多。4.3 为什么用 ifconfig 查不到 IP但网络是通的这是新手最容易困惑的问题之一。明明能上网ip addr也有 inet 那一行但ifconfig就是什么都看不到或者只看到 lo。原因往往是系统里没有安装 net-toolsifconfig命令本身可能是某个别名或者根本不存在。你敲了ifconfig系统提示 command not found于是你以为“没网卡”其实完全不是那么回事。判断标准很简单用ip addr看不要用ifconfig看。现代 Linux 中ip命令才是正统工具ifconfig只是一个兼容年代的遗留物。如果一定要让ifconfig能用就按前面说的方式安装 net-tools。但我劝你把ip命令用熟因为你在任何一台现代 Linux 上都能依赖它。4.4 常见问题速查表现象可能原因快速排查命令 / 方案ifconfig提示找不到未安装 net-tools安装 net-tools或改用ip addr改完 IP 重启失效ONBOOTno或 netplan 设备名不匹配检查配置文件确认接口名能 ping 通网关不能解析域名DNS 配置缺失或错误检查/etc/resolv.conf或 DNS 字段SSH 远程修改后断开原 IP 已变化用新 IP 重连优先netplan try防回滚网卡出现两个 IP使用ip addr add叠加导致用ip addr del删除多余地址重启后默认路由丢失GATEWAY 没写或 route 配置缺失ip route检查 ifcfg/netplan 的 routes 段内外网无法同时访问多网卡下路由优先级错误调整 metric 或使用策略路由4.5 远程操作的安全改法先加后删、自动回滚远程服务器上改 IP我从不让同事直接编辑配置文件后立刻重启网络。我会让他在本地用后台任务方式重启网络并加一个延时恢复脚本兜底同时保留原 IP 地址作为逃生通道。具体做法是先把新 IP 用ip addr add加到网卡上不要急着删旧 IP。然后保持 SSH 连接用原来的 IP 继续操作。等新 IP 能正常 ping 通、SSH 能登录之后再把旧 IP 删掉。这样即使新配置有问题你还有旧 IP 可以连回去。如果真的想彻底改配置文件Ubuntu 用户一定养成用sudo netplan try的习惯。CentOS 用户则可以用下面的思路写一个延时脚本sudo bash -c systemctl restart network; sleep 60; systemctl status network这个命令会重启网络服务然后挂起 60 秒。如果在 60 秒内发现连接断了你还有机会通过另一条通道把配置回滚。60 秒后如果服务状态正常说明基本稳了。当然这招只适合你有备用登录方式比如带外管理的前提下使用否则真断了就只能傻眼。4.6 从 DHCP 到静态 IP 之间的“隐性坑”很多网上教程只教你怎么写静态配置却不说一件事在同一台机器上从 DHCP 切到静态 IPIP 地址通常应该选择原来 DHCP 分配到的那个地址。因为公司网络里路由器、其他服务器可能已经记住了这个 IP 对应的 MAC 地址你贸然换一个 IP防火墙策略、端口映射、DNS 解析记录可能全部对不上号。正确顺序先看当前 IPip addr。把这个 IP 记下来。配置静态 IP 时尽量沿用原地址除非你确实有明确的地址规划。改完后再用ip addr确认。只有这样网络中的其他设备才不需要跟着改。5. 进阶技巧与个人经验总结5.1 快速判断 Linux 发行版和网络管理方式不同发行版网络配置命令千差万别但万变不离其宗。我总结了一套五步判断法第一步cat /etc/os-release看ID和VERSION_ID确定是 Ubuntu、CentOS、Debian 还是 openSUSE。第二步ps -p 1 -o comm看 init 进程是 systemd 还是其他。现代系统基本都是 systemd。第三步systemctl status NetworkManager看 NetworkManager 是否在运行。如果运行优先使用nmcli配置会写进它自己的连接配置里。第四步ls /etc/netplan/ ls /etc/sysconfig/network-scripts/看这机器走的是 netplan 还是 ifcfg 路线。第五步ip addr ls /sys/class/net/看清楚实际接口名。这套流程走完心里就有谱了。5.2 我的“三板斧”排障顺序遇到 IP 相关的问题我的排障顺序固定为“看地址、看路由、看网关”三步走完再查 DNS基本上能覆盖九成问题。ip addr地址有没有网卡 up 还是 downip route路由表全不全默认路由指向哪里ping 网关二层三层通不通ping 223.5.5.5四层出口通不通nslookup或digDNS 解析正不正常很多朋友一上来就怀疑“系统坏了”“防火墙拦了”其实大部分问题都卡在第一步和第二步。网络是分层的排障也要一层层来。5.3 配置文件里的常见“野路子”写法网上教程看多了你会见到各种神奇的配置文件写法。这里我再强调几个必须避开的坑第一不要在 ifcfg 文件里同时写 DHCP 和静态 IP 的配置字段。有的人既写了BOOTPROTOdhcp又写了IPADDR重启后系统行为完全依赖具体实现出现奇葩问题。第二不要自创网卡配置文件名。系统只会识别ifcfg-接口名这种规范命名。你创建了一个ifcfg-lan1设备名却不叫 lan1那就是白配。第三Ubuntu netplan 文件缩进必须严格。YAML 格式对空格极其敏感写错一个缩进整个配置直接格式错误。sudo netplan generate这个命令可以在 apply 之前帮你检查语法有错它会直接报出来。用netplan try检查效果更佳。第四改 IP 后顺手更新 hostname 映射。如果你的/etc/hosts里还写着旧 IP 和主机名的对应关系改完 IP 后部分服务可能访问不到自己。127.0.1.1 old-hostname这一行如果还是旧 IP某些依赖主机名回环的服务就会出问题。5.4 将 IP 查询与修改能力扩展到容器环境很多人觉得“Linux 网络”这块学完就够了结果一碰 Docker又懵了。容器里的网络命名空间是独立的你在容器里执行ip addr看到的是容器自己的网络栈和宿主机不是一回事。举个例子宿主机 IP 是 192.168.1.100你启动了一个容器默认桥接模式下容器会拿到一个 172.17.0.x 的地址。在容器里改 IP不会影响宿主机。如果你要让容器直接使用宿主机网络需要以--network host模式启动。了解 Linux 基础网络是理解容器网络的前提。我强烈建议新手在玩 Docker 之前先把ip addr、ip route、iptables这些基础网络命令练熟。因为容器网络本质就是 Linux 网络命名空间加 veth 虚拟网卡组合起来的底层全是这一套东西。5.5 我个人踩过的三次“打虎”教训第一次是帮人改一台 Ubuntu 20.04 的静态 IP配置文件写好了用了netplan apply结果 SSH 直接断开。后来发现是routes段的to写成了0.0.0.0/0而 netplan 里标准写法是to: default虽然两者有时都读得懂但规范写法最稳妥。第二次是 CentOS 7 上改了网卡名后ifcfg 文件里的 DEVICE 没同步改结果系统启动时找不到网卡。教训是改网卡名必须同步改 ifcfg 文件的 DEVICE 和 NAME否则自找麻烦。第三次是一个多网卡服务器内网、外网各一块网卡默认路由只有一条另一块网卡虽然配了 IP但流量进得去出不来。后来用ip rule做了策略路由才真正把进出流量理顺。这事的教训是多网卡不是多配几个 IP 那么简单路由表必须跟着设计。6. 写在最后这一难过了后面还有更多妖魔鬼怪查 IP、改 IP 这一关我自己走了不少弯路所以特别想把一条清晰的路径画给后来的人先用ip addr看明白现状再用ip addr add做临时调试最后才动配置文件做永久生效。远程操作时永远给自己留一条后路netplan try或“先加后删”都是保命手段。学 Linux 就像打游戏每一只拦路猛虎其实都是一个固定的公式你见多了、练多了肌肉记忆自然就形成了。IP 查询和修改只是九九八十一难的第一难后面还有防火墙、路由、DNS、SELinux、容器网络这一串等着你。根据我自己带过的新人经验学到这里最有效的自测方式是找一台虚拟机把网卡改成静态 IP重启三次确认地址不变再把系统切成 DHCP 模式重启一次看它能不能自动获取地址。这一来一回做完你在这个知识点上就算真正“过了关”。祝你打虎顺利。