首页 > 编程学习 > Linux | 网络服务管理相关不完全总结

Linux | 网络服务管理相关不完全总结

发布时间:2022/11/18 15:30:08

本文总结 linux 系统的网络服务管理相关信息的不完全总结。

Update: 2022 / 11 / 17


Linux | 网络服务管理相关不完全总结

  • 网络接口
    • 名称
    • 查询
      • ifconfig
      • ip
      • /sys/class/net
      • ethtool
        • 有线网络
        • 无线网络
      • /proc/net/dev
      • netstat
      • nmcli
      • iw
    • 启 / 禁用
      • ifconfig
      • ifup / down
      • ip
      • nmcli
      • nmtui
      • rfkill
    • 加 / 卸载
      • 脚本
      • 配置文件 - 驱动黑名单
      • 命令行
  • 参考链接


在我们安装完一个 Linux 系统后最为常见的任务便是网络配置了。当然,你可以在安装系统时进行网络接口的配置。但是,对于某些人来说,他们更偏爱在安装完系统后再进行网络的配置或者更改现存的设置 1

网络接口

众所周知,为了在命令行中进行网络设定的配置,我们首先必须知道系统中有多少个可用的网络接口。本次这个简单的指南将列出所有可能的方式来在 LinuxUnix 操作系统中找到可用的网络接口 1


名称

参考这里 2

  • 之前

eth0 是系统自动选择的网络设备名称,名字来源于以太网 ethernet
无线网卡就是 wlan,来自 Wireless LAN
还有一些常见的名称 lo ( Loopback),tun ( Tunnel ),br ( Bridge ) 等。

  • 改变

此前 Linux 系统的网卡名称都是 eth0wlan0,后来都变了个风格,比如 enp7s0wlp6s0
Fedora 的技术资料中找到,这个和 Systemd 有关,然后又在 freedesktop 官网 Systemd 的手册中找到了详细的说明。现在的命名方案有好长一段,估计要看个半个小时(如果感兴趣可以仔细阅读一下)。

之前的命名方案是系统根据探测到网络驱动的顺序来的,这意味着理论上网络设备接口名称不固定。不只是可能对部分应用产生不利影响,更有甚者,会影响一些网络防火墙的工作。中间有一些改良的努力,试图来改变这个局面,各有局限,Systemd 还是认为当前的方案最佳。

当前方案叫做 biosdevname,看到有资料说可以在 grub 配置中加上 biosdevname=0 禁用这个方案。

  • 现在

enp7s0en 代表 EthernetpXsY 表示 PCI 位置
wlp6s0wl 代表 Wireless LANpXsY 表示 PCI 位置

$ lspci
...
06:00.0 Network controller: Qualcomm Atheros QCA9565 / AR9565 Wireless Network Adapter (rev 01)
07:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL810xE PCI Express Fast Ethernet controller (rev 08)
...

查询

ifconfig

使用 ifconfig 命令来查看网络接口仍然是最常使用的方法。

$ ifconfig -a
enp5s0: flags=4098<BROADCAST,MULTICAST> mtu 1500
    ether 24:b6:fd:37:8b:29 txqueuelen 1000 (Ethernet)
    RX packets 0 bytes 0 (0.0 B)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 0 bytes 0 (0.0 B)
    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 171420 bytes 303980988 (289.8 MiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 171420 bytes 303980988 (289.8 MiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlp9s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
    inet 192.168.225.37 netmask 255.255.255.0 broadcast 192.168.225.255
    inet6 2409:4072:6183:c604:c218:85ff:fe50:474f prefixlen 64 scopeid 0x0<global>
    inet6 fe80::c218:85ff:fe50:474f prefixlen 64 scopeid 0x20<link>
    ether c0:18:85:50:47:4f txqueuelen 1000 (Ethernet)
    RX packets 564574 bytes 628671925 (599.5 MiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 299706 bytes 60535732 (57.7 MiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

如上面的输出所示,当前 Linux 机器上有两个网络接口,它们分别叫做 enp5s0(主板上的有线网卡)和 wlp9s0(无线网卡)。其中的 lo 是环回网卡,被用来访问本地的网络的服务,通常它的 IP 地址为 127.0.0.1

我们也可以在许多 UNIX 变种,例如 FreeBSD 中使用相同的 ifconfig 来列出可用的网卡。


ip

可以使用 ip 命令来罗列出网络接口,正如下面这样:

$  ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp5s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 24:b6:fd:37:8b:29 brd ff:ff:ff:ff:ff:ff
3: wlp9s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
    link/ether c0:18:85:50:47:4f brd ff:ff:ff:ff:ff:ff

也可以使用 ip addr 或者 ip -s link 来查看,

$ ip addr

或者,

ip -s link

这些命令同时还显示出了已经连接的网络接口的状态。假如你仔细查看上面的输出,你将注意到有线网卡并没有跟网络线缆连接(从上面输出中的 DOWN 可以看出)。另外,无线网卡已经连接了(从上面输出中的 UP 可以看出)。
想知晓更多的细节,可以查看我们先前的指南 在 Linux 中查看网络接口的已连接状态。


/sys/class/net

Linux 内核将网络接口的详细信息保存在 /sys/class/net 目录中,你可以通过查看这个目录的内容来检验可用接口的列表是否和前面的结果相符。

查看可用网络接口可通过查看 /sys/class/net 下的设备名称,如下所示:

$ ls /sys/class/net
enp5s0 lo wlp9s0

通过下面的命令可以查看指定网络设备的当前状态,如下所示:

$ cat /sys/class/net/enp5s0/carrier
1

输出结果是 1,它表示有线网络已连接。
如果输出结果是 0,它表示有线网络已断连。

也可以使用下面的命令,

$ cat /sys/class/net/enp5s0/operstate
up

输出结果是 up,它表示有线网络已连接。
如果输出结果是 0,它表示有线网络已断连。


ethtool

ethtool 用来查询和控制网络设备驱动和硬件设置,尤其是有线网络。


有线网络

运行下面的命令来查询有线网络的相关信息,

  • 连接
$ sudo ethtool enp5s0
Settings for enp5s0:
 Supported ports: [ TP MII ]
 Supported link modes: 10baseT/Half 10baseT/Full 
 100baseT/Half 100baseT/Full 
 Supported pause frame use: No
 Supports auto-negotiation: Yes
 Advertised link modes: 10baseT/Half 10baseT/Full 
 100baseT/Half 100baseT/Full 
 Advertised pause frame use: Symmetric Receive-only
 Advertised auto-negotiation: Yes
 Link partner advertised link modes: 10baseT/Half 10baseT/Full 
 100baseT/Half 100baseT/Full 
 Link partner advertised pause frame use: Transmit-only
 Link partner advertised auto-negotiation: Yes
 Speed: 100Mb/s
 Duplex: Full
 Port: MII
 PHYAD: 0
 Transceiver: internal
 Auto-negotiation: on
 Supports Wake-on: pumbg
 Wake-on: g
 Current message level: 0x00000033 (51)
 drv probe ifdown ifup
 Link detected: yes

  • 断连
Settings for enp5s0:
 Supported ports: [ TP MII ]
 Supported link modes: 10baseT/Half 10baseT/Full 
 100baseT/Half 100baseT/Full 
 Supported pause frame use: No
 Supports auto-negotiation: Yes
 Advertised link modes: 10baseT/Half 10baseT/Full 
 100baseT/Half 100baseT/Full 
 Advertised pause frame use: Symmetric Receive-only
 Advertised auto-negotiation: Yes
 Link partner advertised link modes: 10baseT/Half 10baseT/Full 
 100baseT/Half 100baseT/Full 
 Link partner advertised pause frame use: Transmit-only
 Link partner advertised auto-negotiation: Yes
 Speed: 100Mb/s
 Duplex: Full
 Port: MII
 PHYAD: 0
 Transceiver: internal
 Auto-negotiation: on
 Supports Wake-on: pumbg
 Wake-on: g
 Current message level: 0x00000033 (51)
 drv probe ifdown ifup
 Link detected: no

无线网络

运行下面的命令来查询无线网络的相关信息,

$ ethtool wlp9s0
Settings for wlp9s0:
 Link detected: yes

/proc/net/dev

Linux 操作系统中,文件 /proc/net/dev 中包含有关网络接口的信息。

要查看可用的网卡,只需使用下面的命令来查看上面文件的内容:

$ cat /proc/net/dev
Inter-| Receive 											  					 | Transmit
 face |bytes 	packets 	errs 	drop 	fifo 	frame 	compressed 	multicast|bytes 	packets 	errs 	drop 	fifo 	colls 	carrier 	compressed
wlp9s0: 69631 	 566078 	   0 	   0 	   0 		0 			 0 			0 608224 	 300922 		0 		0 		0 		0 		   0 			0
enp5s0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
	lo: 303980 	 171420 	   0  	   0 	   0 		0	 		 0 			0 303980     171422  		0	    0 		0 		0 		   0 			0

netstat

netstat 命令可以列出各种不同的信息,例如网络连接、路由表、接口统计信息、伪装连接和多播成员等。

$ netstat -i
Kernel Interface table
Iface 	MTU 	RX-OK 	RX-ERR 	RX-DRP 	RX-OVR   TX-OK 	TX-ERR 	TX-DRP 	TX-OVR 	 Flg
lo 	  65536    171420 		 0 		 0 		 0    1714 		 0 		 0 		 0 	 LRU
wlp9s0 1500 	56562 		 0 		 0 	     0 	300543 		 0 		 0 		 0 	BMRU

请注意 netstat 被弃用了, netstat -i 的替代命令是 ip -s link。另外需要注意的是这个方法将只列出激活的接口,而不是所有可用的接口。


nmcli

nmcli 是一个用来控制 NetworkManager 和报告网络状态的命令行工具。它可以被用来创建、展示、编辑、删除、激活、停用网络连接和展示网络状态。

假如你的 Linux 系统中安装了 NetworkManager,你便可以使用下面的命令来使用 nmcli 列出可以的网络接口:

nmcli device status

或者,

nmcli connection show

现在你知道了如何在 Linux 中找到可用网络接口的方法,接下来,可以准备在 Linux 中配置 IP 地址吧 1


iw

查看指定网卡的详细信息,

$ iw wlan0 info
Interface wlan0
        ifindex 4
        wdev 0x1
        addr 10:f0:05:2b:23:8e
        ssid SEER-GROUP
        type managed
        wiphy 0
        channel 40 (5200 MHz), width: 40 MHz, center1: 5190 MHz
        txpower 22.00 dBm

启 / 禁用

当你添加一个网卡或者从一个物理网卡创建出一个虚拟网卡的时候,你可能需要使用这些命令将新网卡启用起来。

另外,如果你对网卡做了某些修改或者网卡本身没有启用,那么你也需要使用以下的某个命令将网卡启用起来。

启用、禁用网卡有很多种方法。在这篇文章里,我们会介绍我们使用过的最好的几种种方法 345


ifconfig

在系统启动过程中如果需要启用网卡,调用的命令就是 ifconfig
ifconfig 可以提供很多网卡的信息。不管我们想修改网卡的什么配置,都可以使用该命令。

ifconfig 的常用语法:

$ ifconfig [NIC_NAME] Down/Up

执行以下命令禁用 enp0s3 6 网卡。注意,这里你需要输入你自己的网卡名字。比如,

$ ifconfig enp0s3 down

从以下命令的输出结果可以看到网卡已被禁用了,

$ ip a | grep -A 1 'enp0s3'
2: enp0s3:  mtu 1500 qdisc fq_codel state DOWN group default qlen 1000    
	link/ether 08:00:27:c2:e4:e8 brd ff:ff:ff:ff:ff:ff

执行以下命令来重新启用有线网卡,

$ ifconfig enp0s3 up

从下面输出结果可以看出有线网卡已重新启用,

$ ip a | grep -A 1 'enp0s3' 
2: enp0s3:  mtu 1500 qdisc fq_codel state UP group default qlen 1000    link/ether 08:00:27:c2:e4:e8 brd ff:ff:ff:ff:ff:ff    
inet 192.168.1.4/24 brd 192.168.1.255 scope global dynamic noprefixroute enp0s3       valid_lft 86294sec preferred_lft 86294sec    
inet6 fe80::3899:270f:ae38:b433/64 scope link noprefixroute       valid_lft forever preferred_lft forever

ifup / down

ifdown 命令用于禁用网卡,ifup 命令用于启用网卡。

ifdown / ifup 的常用语法:

$ ifdown [NIC_NAME]# ifup [NIC_NAME]

比如,执行以下命令可以禁用 eth1 网卡,

$ ifdown eth1

需要重新启用时,执行以下命令,

ifup eht1

但是,如果是使用 ifdown wlp3s0 来禁用网卡会报错误。参考 /etc/sysconfig/network-scripts/ifcfg-tp888 路径下各个无线连接的名字,ifcfg-tp888 这个文件是连接网络时自动生成的。文件内容如下所示 7:

HWADDR=00:27:10:4C:7B:64
ESSID=tp888
MODE=Managed
KEY_MGMT=WPA-PSK
SECURITYMODE=open
MAC_ADDRESS_RANDOMIZATION=default
TYPE=Wireless
PROXY_METHOD=none
BROWSER_ONLY=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=tp888
UUID=e9176e47-5a9d-4461-84ee-a2c786abd726
ONBOOT=yes

如果使用 ifdown 来禁用无线连接网络,应该使用如下所示的命令,

ifdown tp888

ip

ip 命令用于管理网卡,用于替代老旧的、不推荐使用的 ifconfig 命令。
它和 ifconfig 命令很相似,但是提供了很多 ifconfig 命令不具有的强大的特性。

ip 的常用语法:

$ ip link set  Down/Up

比如,执行以下命令禁用 enp0s3 网卡,

$ ip link set enp0s3 down

需要重新启用时,执行以下命令,

$ ip link set enp0s3 up

nmcli

nmcli 是一个控制 NetworkManager 并报告网络状态的命令行工具。
nmcli 可以用做 nm-applet 或者其他图形化客户端的替代品。它可以用于展示、创建、修改、删除、启用和停用网络连接。除此之后,它还可以用来管理和展示网络设备状态。

nmcli 命令大部分情况下都是使用 配置名称 工作而不是 设备名称。所以,执行以下命令,获取网卡对应的配置名称。

$ nmcli con show
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  3d5afa0a-419a-3d1a-93e6-889ce9c6a18c  ethernet  enp0s3
Wired connection 2  a22154b7-4cc4-3756-9d8d-da5a4318e146  ethernet  enp0s8

nmcli 的常用语法:

$ nmcli con  Down/Up

比如,
执行以下命令禁用 enp0s3 网卡。在禁用网卡的时候,你需要使用配置名称而不是设备名称。

# nmcli con down 'Wired connection 1'
Connection 'Wired connection 1' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)

从以下输出结果可以看到网卡已经禁用,

$ nmcli dev status
DEVICE  TYPE      STATE         CONNECTION
enp0s8  ethernet  connected     Wired connection 2
enp0s3  ethernet  disconnected  --
lo      loopback  unmanaged     --

执行以下命令启用 enp0s3 网卡,同样地,这里需要使用配置名称而不是设备名称,

$ nmcli con up 'Wired connection 1'
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)

从以下输出结果可以看到网卡已经启用了,

$ nmcli dev status
DEVICE  TYPE      STATE      CONNECTION
enp0s8  ethernet  connected  Wired connection 2
enp0s3  ethernet  connected  Wired connection 1
lo      loopback  unmanaged  --

nmtui

nmtui 是一个与 NetworkManager 交互的、基于 curses 图形库的终端 UI 应用。
在启用 nmtui 的时候,如果第一个参数没有特别指定,它会引导用户选择对应的操作去执行。
执行以下命令打开 mntui 界面。选择 Active a connection 然后点击 OK

$ nmtui

选择你要禁用的网卡,然后点击 Deactivate 按钮,就可以将网卡禁用。
如果要启用网卡,使用上述同样的步骤即可。


rfkill

参考 8,可以先使用以下命令查看当前主机的无线网络设备,

$ rfkill list
0: phy0: Wireless LAN
	Soft blocked: no
	Hard blocked: no
2: hci0: Bluetooth
	Soft blocked: yes
	Hard blocked: no

以上的输出表示 block 0 为无线设备,block 1 为蓝牙设备。

以无线网络设备为例,使用以下命令可以对其禁用,

$ rfkill block 0

使用以下命令则可以重新将其启用,

$ rfkill unblock 0

加 / 卸载

如果不需要使用有线或者无线网络,在 Windows 下可以选择禁用相应网卡设备,需要用的时候再随时启用。但是 Ubuntu 等系统下的 NetworkManager 没有提供这一选项,比如无线网络,去掉 启用无线 之前的勾只能暂时禁用,重启后 Wifi 还是会被自动启用,不胜其烦。大致有以下几种方法可以开机自动禁用无线网络。


脚本

将下面这条禁用无线网络的命令添加到 启动应用程序 中,这样开机时无线网络就会被自动禁用。参考这里 9

这是最灵活也是最行之有效的方法,唯一的不足在于,电脑从待机状态下唤醒时,无线网络还是会被重新启用。


配置文件 - 驱动黑名单

将无线网卡驱动加入黑名单,就可以彻底禁用无线网络 91011

既然是禁用驱动,首先我们得知道无线网卡的驱动名是什么,在终端中输入 lshw 命令可以列出电脑硬件的详细信息,中我们可以获取无线网卡的驱动名。下面是信息片段:

$ lshw
01 *-network 

02      description: Wireless interface 

03      product: PRO/Wireless 3945ABG [Golan] Network Connection 

04      vendor: Intel Corporation 

05      physical id: 0 

06      bus info: pci@0000:03:00.0 

07      logical name: wlan0 

08      version: 02 

09      serial: 

10      width: 32 bits 

11      clock: 33MHz 

12      capabilities: bus_master cap_list ethernet physical wireless 

13      configuration: broadcast=yes driver=iwl3945 latency=0 multicast=

也可以使用 lspci -vvs b3:00.0 命令查找其使用的驱动。

最后一行显示我的无线网卡驱动名称是 iwl3945intel 3945abg 无线网卡),将它加入到黑名单就可以了,具体操作如下:

sudo gedit /etc/modprobe.d/blacklist.conf 

在文本最后加入 blacklist iwl3945, 然后重新启动机器。

如果的确长时间不会用到无线网络,这个方法就比较干净彻底。

如果学习了配置 interfaces 文件,也可以完全抛开 NetworkManager,更加灵活地控制网络设定。现在也渐渐能体会到 Linux 将配置文件全部写成文本文档的优点所在了。


命令行

以有线网卡为例 12,在终端中输入 lspci 命令来查询网卡的相关信息:

$ lspci -nn | grep -e Ethernet
Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101/2/6E PCI Express Fast/Gigabit Ethernet controller (rev 05)

$ lspci -nn -k -d xxxx:

由此可知有线网卡的驱动,比如 r8169
那么,卸载相应驱动可参照下面的命令,

sudo rmmod r8169

如果想要重新加载驱动,

sudo modprobe r8169

参考链接

#todo:
Linux 无线网卡配置


  1. 如何在 Linux 中查看可用的网络接口 ↩︎ ↩︎ ↩︎

  2. 网卡名称的变迁(ethX -> enpXsY) ↩︎

  3. Linux 中如何启用和禁用网卡? ↩︎

  4. Linux 中如何启用和禁用网卡? ↩︎

  5. How To Find The Connected State Of A Network Cable In Linux From Commandline ↩︎

  6. linux命令行关闭wifi,linux下使用无线网卡的命令行方法 ↩︎

  7. 新安装CentOS设置静态IP和禁用启用网卡(wifi) ↩︎

  8. Shell | 实用命令不完全总结 ↩︎

  9. Ubuntu开机自动禁用无线网络 ↩︎ ↩︎

  10. linux通过blacklist来禁用驱动 ↩︎

  11. Ubuntu开机自动禁用无线网络 ↩︎

  12. linux下有线网卡出现ADDRCONF(NETDEV_UP): eth0: link is not ready的解决方法 ↩︎

Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式