如何在 Linux 上使用 ip 命令

您可以使用 Linux ip
命令即时配置 IP 地址、网络接口和路由规则。我们将向您展示如何使用现代替代经典(现已弃用)ifconfig
。
ip 命令的工作原理
使用 ip
命令,您可以调整 Linux 计算机处理 IP 地址、网络接口控制器 (NIC) 和路由规则的方式。这些更改也会立即生效——您不必重新启动。 ip
命令的功能远不止于此,但我们将在本文中重点介绍最常见的用途。
ip
命令有很多子命令,每个子命令都作用于一种对象,例如 IP 地址和路由。反过来,这些对象中的每一个都有许多选项。正是这种丰富的功能为 ip
命令提供了执行精细任务所需的粒度。这不是斧头工作——它需要一组手术刀。
我们将查看以下对象:
- 地址:IP地址和范围。
- 链接:网络接口,例如有线连接和 Wi-Fi 适配器。
- 路由:管理通过接口(
链接
)发送到地址
的流量路由的规则。
将 ip 与地址一起使用
显然,您首先必须知道您正在处理的设置。要发现您的计算机有哪些 IP 地址,您可以使用带有对象 address
的 ip
命令。默认操作是 show
,它列出了 IP 地址。您也可以省略 show
并将 address
缩写为“addr”甚至“a”。
以下命令都是等效的:
ip address show
ip addr show
ip addr
ip a

我们看到两个 IP 地址,以及许多其他信息。 IP 地址与网络接口控制器 (NIC) 相关联。 ip
命令试图提供一些帮助,它也提供了一些关于接口的信息。
第一个 IP 地址是用于在计算机内通信的(内部)环回地址。第二个是计算机在局域网 (LAN) 上的实际(外部)IP 地址。
让我们分解一下我们收到的所有信息:
- lo:字符串形式的网络接口名称。
: 这是一个环回接口。它是UP
,表示它可以运行。物理网络层(第一层)也启动了。- mtu 65536:最大传输单元。这是此接口可以传输的最大数据块的大小。
- qdisc noqueue:
qdisc
是一种排队机制。它安排数据包的传输。有不同的排队技术称为学科。noqueue
规则意味着“立即发送,不排队”。这是虚拟设备的默认qdisc
规程,例如环回地址。 - state UNKNOWN:这可以是
DOWN
(网络接口不可操作),UNKNOWN
(网络接口可操作但什么都没有已连接)或UP
(网络正常运行并且有连接)。 - group default:接口可以按逻辑分组。默认是将它们全部放在一个名为“默认”的组中。
- qlen 1000:传输队列的最大长度。
- link/loopback:接口的媒体访问控制 (MAC) 地址。
- inet 127.0.0.1/8: IP 版本 4 地址。正斜杠 (
/
) 之后的地址部分是表示子网掩码的无类域间路由表示法 (CIDR)。它指示子网掩码中有多少前导连续位被设置为 1。八的值表示八位。 8位设为1表示二进制为255,所以子网掩码为255.0.0.0。 - scope host: IP 地址范围。此 IP 地址仅在计算机(“主机”)内部有效。
- lo:与此 IP 地址关联的接口。
- valid_lft:有效生命周期。对于由动态主机配置协议 (DHCP) 分配的 IP 版本 4 IP 地址,这是 IP 地址被视为有效且能够发出和接受连接请求的时间长度。
- preferred_lft: 首选生命周期。对于由 DHCP 分配的 IP 版本 4 IP 地址,这是 IP 地址可以不受限制地使用的时间量。这绝不能大于
valid_lft
值。 - inet6:IP 版本 6 地址、
scope
、valid_lft
和preferred_lft
。
物理接口更有趣,如下所示:
- enp0s3: 字符串形式的网络接口名称。 “en”代表以太网,“p0”是以太网卡的总线号,“s3”是插槽号。
: 此接口支持广播和多播,接口为UP
(可操作且已连接)。网络的硬件层(第一层)也是UP
。- mtu 1500:该接口支持的最大传输单元。
- qdisc fq_codel:调度器使用一种叫做“公平排队,受控延迟”的规则。它旨在为使用该队列的所有流量提供公平的带宽份额。
- 状态 UP:接口可操作且已连接。
- 默认组:此接口在“默认”接口组中。
- qlen 1000:传输队列的最大长度。
- link/ether:接口的MAC地址。
- inet 192.168.4.26/24: IP 版本 4 地址。 “/24”告诉我们子网掩码中有 24 个连续的前导位设置为 1。这是三组八位。八位二进制数等于 255;因此,子网掩码是 255.255.255.0。
- brd 192.168.4.255:此子网的广播地址。
- 全球范围:IP 地址在该网络的任何地方都有效。
- 动态:当接口关闭时IP地址丢失。
- noprefixroute: 添加此 IP 地址时,不要在路由表中创建路由。如果有人想使用这个 IP 地址,就必须手动添加路由。同样,如果此 IP 地址被删除,则不要查找要删除的路由。
- enp0s3: 与此 IP 地址关联的接口。
- valid_lft:有效生命周期。 IP地址将被视为有效的时间; 86,240 秒是 23 小时 57 分钟。
- preferred_lft: 首选生命周期。 IP 地址的运行时间不受任何限制。
- inet6: IP 版本 6 地址、
scope
、valid_lft
和preferred_lft
。
仅显示 IPv4 或 IPv6 地址
如果要将输出限制为 IP 版本 4 地址,可以使用 -4
选项,如下所示:
ip -4 addr

如果要将输出限制为 IP 版本 6 地址,可以使用 -6
选项,如下所示:
ip -6 addr

显示单个界面的信息
如果要查看单个接口的 IP 地址信息,可以使用 show
和 dev
选项,并为接口命名,如下所示:
ip addr show dev lo
ip addr show dev enp0s3

您还可以使用 -4
或 -6
标志进一步优化输出,以便您只看到您感兴趣的内容。
如果要查看与接口 enp0s3
上的地址相关的 IP 版本 4 信息,请键入以下命令:
ip -4 addr show dev enp0s3

添加 IP 地址
您可以使用 add
和 dev
选项将 IP 地址添加到接口。您只需告诉 ip
命令要添加哪个 IP 地址,以及要添加到哪个接口。
我们要将 IP 地址 192.168.4.44 添加到 enp0s3
接口。我们还必须为子网掩码提供 CIDR 表示法。
我们键入以下内容:
sudo ip addr add 192.168.4.44/24 dev enp0s3

我们键入以下内容以再次查看此接口上的 IP 版本 4 IP 地址:
ip -4 addr show dev enp0s3

新 IP 地址出现在该网络接口上。我们跳转到另一台计算机并使用以下命令查看我们是否可以 ping
新 IP 地址:
ping 192.168.4.44

IP 地址响应并发回对 ping 的确认。我们的新 IP 地址在一个简单的 ip
命令后启动并运行。
删除 IP 地址
删除 IP 地址的命令与添加 IP 地址的命令几乎相同,只是将 add
替换为 del
,如下所示:
sudo ip addr del 192.168.4.44/24 dev enp0s3

如果我们键入以下内容进行检查,我们会看到新的 IP 地址已被删除:
ip -4 addr show dev enp0s3

将 ip 与网络接口一起使用
您使用 link
对象来检查和使用网络接口。键入以下命令以查看计算机上安装的接口:
ip link show

要查看单个网络接口,只需将其名称添加到命令中,如下所示:
ip link show enp0s3

启动和停止链接
您可以使用带有 up
或 down
的 set
选项来停止或启动网络接口选项。您还必须使用 sudo
,如下所示:
sudo ip link set enp0s3 down

我们键入以下内容来查看网络接口:
ip link show enp0s3

网络接口的状态为 DOWN
。我们可以使用 up
选项重新启动网络接口,如下所示:
sudo ip link set enp0s3 up

我们键入以下内容以对网络接口的状态进行另一次快速检查:
ip link show enp0s3

网络接口重新启动,状态显示为 UP
。
将 ip 与路由一起使用
使用 route
对象,您可以检查和操作路由。路由定义到不同 IP 地址的网络流量转发到哪里,以及通过哪个网络接口。
如果目标计算机或设备与发送计算机共享网络,则发送计算机可以将数据包直接转发给它。
但是,如果目标设备未直接连接,则发送计算机会将数据包转发到默认路由器。然后路由器决定将数据包发送到哪里。
要查看计算机上定义的路由,请键入以下命令:
ip route

让我们看一下我们收到的信息:
- 默认:默认规则。如果其他规则都不匹配发送的内容,则使用此路由。
- 通过 192.168.4.1:通过 192.168.4.1 的设备路由数据包。这是此网络上默认路由器的 IP 地址。
- dev enp0s3:使用此网络接口将数据包发送到路由器。
- proto dhcp: 路由协议标识符。 DHCP 表示路由将动态确定。
- metric 100:与其他路线相比,路线偏好的指示。具有较低度量的路由优先于具有较高度量的路由。您可以使用它来优先使用有线网络接口而不是 Wi-Fi 接口。
第二条路由管理 IP 范围 169.254.0.0/16 的流量。这是一个零配置网络,这意味着它会尝试为 Intranet 通信进行自我配置。但是,您不能使用它在直接网络之外发送数据包。
零配置网络背后的原则是它们不依赖于 DHCP 和其他存在和活动的服务。他们只需要查看 TCP/IP 即可对网络上的每个其他设备进行自我识别。
让我们来看看:
- 169.254.0.0/16:此路由规则管辖的 IP 地址范围。如果计算机在此 IP 范围内进行通信,则此规则会切入。
- dev enp0s3:此路由管理的流量将使用的网络接口。
- scope link:范围为
link
,表示范围仅限于本机直接连接的网络。 - metric 1000:这是一个高指标,不是首选路线。
第三条路由管理到 IP 地址范围 192.168.4.0/24 的流量。这是此计算机所连接的本地网络的 IP 地址范围。它用于跨该网络但在该网络内的通信。
让我们分解一下:
- 192.168.4.1/24:此路由规则管辖的 IP 地址范围。如果计算机在此 IP 范围内通信,此规则将触发并控制数据包路由。
- dev enp0s3:此路由将通过其发送数据包的接口。
- proto kernel:内核在自动配置过程中创建的路由。
- 范围链接:范围是
链接
,这意味着范围仅限于此计算机连接到的直接网络。 - src 192.168.4.26:此路由发送的数据包源自的 IP 地址。
- metric 100:这个低 metric 表示首选路线。
显示单个路线的信息
如果想关注某条路由的详细信息,可以在命令中添加list
选项和路由的IP地址范围,如下:
ip route list 192.168.4.0/24

添加路线
我们刚刚为这台计算机添加了一个新的网络接口卡。我们键入以下内容并看到它显示为 enp0s8
:
ip link show

我们将向计算机添加一条新路由以使用此新界面。首先,我们键入以下内容以将 IP 地址与接口相关联:
sudo ip addr add 192.168.121.1/24 dev enp0s8

使用现有 IP 地址的默认路由将添加到新接口。我们使用 delete
选项来删除路由并提供其详细信息,如下所示:
sudo ip route delete default via 192.168.4.1 dev enp0s8

我们现在将使用 add
选项来添加我们的新路由。新接口将处理 192.168.121.0/24 IP 地址范围内的网络流量。我们将给它一个指标 100;因为它将是处理此流量的唯一路线,所以该指标非常学术。
我们键入以下内容:
sudo ip route add 192.168.121.0/24 dev enp0s8 metric 100

现在,我们输入以下内容以查看它为我们提供了什么:
ip route

我们的新路线现已到位。但是,我们仍然有指向接口 enp0s8
的 192.168.4.0/24 路由——我们键入以下内容将其删除:
sudo ip route delete 192.168.4.0/24 dev enp0s8

我们现在应该有一个新路由,通过接口 enp0s8
指向 IP 范围 192.168.121.0/24 的所有流量。它也应该是唯一使用我们新界面的路由。
我们输入以下内容进行确认:
ip route

已走路线,未扎根
这些命令的好处在于它们不是永久性的。如果你想清除它们,只需重新启动你的系统。这意味着您可以对它们进行试验,直到它们按照您想要的方式工作。如果您将系统搞得一团糟,这是一件非常好的事情——只需重新启动即可恢复秩序。
另一方面,如果您希望更改是永久性的,则必须做更多的工作。具体取决于发行版系列,但它们都涉及更改配置文件。
但是,通过这种方式,您可以在永久化之前测试驱动命令。
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts