作为一名专注Linux系统运维与前沿技术的自媒体博主,今天想和大家聊聊一个很多老鸟都在默默坚持的“坏习惯”:还在用那些已经被时代抛弃的Linux经典命令。
2026年的Linux世界早已悄然变天。主流发行版如Ubuntu 24.04+、Debian 12+、RHEL 9/10系列、Fedora、Arch等,早就把net-tools套件边缘化,把iptables推向兼容层,而iproute2家族(ip、ss、nft等)成为标配。很多运维脚本、旧文档、培训教程还在死守十年前的写法,结果在新服务器、最小化容器(distroless、Alpine)、云原生环境里直接报错“command not found”。

今天这篇文章就给大家介绍5个早已过时的Linux命令,不但告诉你“别用了”,更告诉你为什么弃用、替代命令怎么写更高效。读完这篇,你的终端效率和脚本健壮性都能上一个台阶。
1. 告别 arp,全面拥抱 ip neigh(或 ip n)
ARP(Address Resolution Protocol)协议本身没问题,但arp命令属于早已停止维护的net-tools家族。最后一次大版本更新还是2017年左右,2021年后基本只收安全补丁。现代Linux内核和用户空间工具链早就转向iproute2套件(从1999年就开始开发,至今活跃)。
arp命令的问题:
替代:ip neigh show / ip n
ip neigh(neighbor的缩写)是iproute2家族的明星命令,功能完爆arp:
# 查看ARP表(最常用)ip neigh show# 或简写ip n# 按设备过滤ip n show dev eth0# 删除某条记录ip n del 192.168.1.100 dev eth0# 彩色+更人性化输出(现代终端基本都支持)ip -c n show
ip neigh show
ip n
ip -c n show建议大家在自己的机器上敲一遍感受差距。
很多发行版终端默认开启颜色支持,ip n的输出比arp清晰太多:IP、MAC、状态(REACHABLE/STALE/FAILED等)、设备一目了然。
迁移建议:全局搜索脚本里的arp,替换为ip n。几乎是1:1兼容,唯一要注意的是ip n的“nud”状态比arp的Flags更细粒度。
2. 永别 ifconfig,ip addr / ip link才是王道
ifconfig几乎是每个Linux入门者的第一个网络命令。但它早在2000年代末就被宣告“开发停滞”。net-tools最后一次正式发布是2014年左右,此后只打补丁。问题越积越多:
- 不支持现代网络特性(如multiple addresses per interface、VRF、XDP等)
2025-2026年,几乎所有新服务器/容器镜像默认不带ifconfig。
替代:ip a / ip addr show / ip link
最常用的三个变体:
# 查看所有接口状态(最常用,等价于ifconfig -a)ip a# 或完整写法ip addr show# 只看某个接口ip a show eth0# 开启/关闭接口ip link set eth0 upip link set eth0 down# 添加/删除IP(临时)ip addr add 192.168.50.100/24 dev eth0ip addr del 192.168.50.100/24 dev eth0
ip aip命令的输出更现代:支持颜色、显示scope、dynamic地址、IPv6隐私扩展等。脚本友好度也高得多(配合jq可以直接解析)。
想让ip命令输出更像ifconfig的老派风格?可以用ip -4 a只看IPv4,或者写个alias:
3. iptables → nftables
iptables从Linux 2.4时代统治了近20年,但内核早在2014年(3.13)就引入了nftables。2019年Debian 10把nftables设为默认,2022年RHEL 9正式标记iptables为deprecated。到2026年,主流发行版里你敲iptables,其实跑的是iptables-nft兼容层(把旧语法翻译成nft规则),性能有损耗、功能受限。
nftables优势:
- 规则合并更高效(一个表里可以有多个链、集合、map、meter)
- 原生支持sets(IP黑白名单超快)、限速meter、动态超时等
- 直接内核处理,无需iptables→netlink的多次跳转
快速上手nftables对比
旧iptables经典规则:
iptables -A INPUT -p tcp --dport 22 -j ACCEPTiptables -A INPUT -j DROP
nftables等价写法(推荐写成文件 /etc/nftables.conf):
table inet filter { chain input { type filter hook input priority 0; policy drop; # 允许已建立和相关连接 ct state established,related accept # 本地环回 iif lo accept # SSH tcp dport 22 accept # 其他规则... }}
加载:nft -f /etc/nftables.conf
迁移工具:大多数发行版自带 iptables-translate / iptables-restore-translate,能把旧rules.v4直接转成nft语法。
新项目直接用nft。新手可以先用firewalld(后端默认nft),老手直接手写nft规则。iptables-nft只是过渡,未来某天兼容层可能被彻底移除。
4. which 已经落伍,type 和 command -v 才是正解
which不是内置命令,它是一个独立的二进制文件(/usr/bin/which)。每次执行都要fork一个新进程,效率低下。在脚本里尤其浪费,尤其循环调用时。
虽然还没被“正式deprecated”,但POSIX和Bash/Zsh官方强烈推荐用内置命令替代。
两大替代(都是shell builtin,零开销):
# 显示命令类型和路径type python3# 只显示路径(类似which)type -p python3# 显示所有同名命令(alias、函数、builtin、外部)type -a ls
type python3
type -a ls- command -v(最推荐用于脚本,可移植性最好)
# 检查是否存在,返回路径或空if command -v docker >/dev/null; then echo "Docker installed"fi
为什么内置更好?
- 能正确识别shell函数、alias、builtin
脚本里一律用command -v,交互式用type更友好。which可以彻底从你的肌肉记忆里删除。
5. netstat 彻底落幕,ss 是速度与力量的化身
netstat曾经是网络状态的万金油,但它是net-tools家族成员,早就停止功能迭代。最大问题是:每次查询都要遍历/proc/net等文件,连接数多时很慢;不支持Unix socket过滤细粒度;输出难以机器解析。
替代:ss(Socket Statistics)
ss直接从内核的socket接口读取数据,速度比netstat快几倍到几十倍。常用写法几乎兼容:
# 经典netstat -altpn 等价ss -altpn# 只看监听端口ss -ltn# 查看所有TCP连接ss -t state established# 看占用443端口的远程连接ss 'dport = :443'# Unix socketss -lx
ss -altpn
ss -ltn
ss -t state established
ss 'dport = :443'
ss -lx进阶用法
- 看处于SYN-RECV的半连接(防SYN洪水):
ss state syn-recv - 统计ESTABLISHED连接数:
ss -t state established | wc -l

- 按进程过滤:
ss -tulp | grep nginx

ss是iproute2家族的骄傲,几乎所有现代发行版默认安装。
这五个命令(arp、ifconfig、iptables、which、netstat)几乎都指向同一个方向:net-tools已死,iproute2当道。
Linux的魅力就在于它永远在悄然进化,而我们这些用户,也要与时俱进。
你现在还在用哪个“老古董”命令?评论区告诉我,我来帮你找最优雅的替代写法~
