马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
nmcli修改毗连名
- nmcli connection modify 原名 con-name 新名
复制代码- nmcli connection modify UUID con-name 新名
复制代码 通过网络名或uuid删除毗连
- nmcli connection delete 连接名或uuid
复制代码 通过装备名删除毗连
- nmcli device disconnect 设备连接
复制代码 用 nmcli device connect 设备名
创建的毗连名和装备名一样,大概和原先的名称一样, 没法设置
用nmcli connection add con-name 连接名 type 802-3-ethernet ifname 设备名
创建的毗连可以指定毗连名,
- nmcli connection add con-name 连接名 type 802-3-ethernet ifname 设备名
复制代码 type 802-3-ethernet 可简写为 type ethernet
- nmcli connection add con-name 连接名 type ethernet ifname 设备名
复制代码 先删除,再创建, 这种方式连同 /etc/NetworkManager/system-connections 对应的配置文件一并删除再创建, 配置文件名也变为新名
- nmcli connection delete 原连接名
- nmcli connection add con-name 新连接名 type 802-3-ethernet ifname 设备名
复制代码 Linux 设置更改网卡名称
用 ip link set 只能临时修改装备名
- sudo ip link set dev eth0 name newname
- ### dev可以省略
- sudo ip link set eth0 name newname
复制代码 修改或创建 /etc/udev/rules.d/70-persistent-net.rules 来永久修改装备名
- vi /etc/udev/rules.d/70-persistent-net.rules
复制代码 也可取名 xx.rules, 如80.rules , 80会覆盖70
- vi /etc/udev/rules.d/80.rules
复制代码 模板
- SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="修改这里的mac", ATTR{type}=="1", NAME="eth0"
复制代码 nmcli 修改毗连名
- nmcli connection modify 原名 con-name 新名
复制代码- nmcli connection modify UUID con-name 新名
复制代码 列出全部毗连名称, 除了lo , 的多种写法
- nmcli connection | awk 'NR>1 && !/lo/ {print$1}'
复制代码- nmcli connection | awk 'NR>1 {if($1!="lo"){print$1}}'
复制代码- nmcli connection | awk 'NR>1 {if($1 !~ /lo/){print$1}}'
复制代码- nmcli connection | grep -v 'lo' | awk 'NR>1 {print $1}'
复制代码 删除全部毗连 多种写法
- nmcli connection delete $( nmcli connection | awk 'NR>1 && !/lo/ {print$1}'
- )
复制代码- nmcli connection | grep -v 'lo' | awk 'NR>1 {print $1}'
- | xargs nmcli connection delete
复制代码- nmcli connection | grep -v 'lo' | awk 'NR>1 {print $1}'
- | xargs -I {} nmcli connection delete {}
复制代码 激活全部毗连
- nmcli device status
- | awk 'NR >1 && !/lo/ {print$1}' | xargs -I {} nmcli device connect {}
复制代码- nmcli device status
- | awk 'NR >1 && !/lo/ {print$1}' | xargs -I xxx nmcli device connect xxx
复制代码- nmcli device status
- | awk 'NR>1{if($1 != "lo")print$1}' | xargs -I {} nmcli device connect {}
复制代码 添加毗连
- nmcli connection add con-name ens224 type 802-3-ethernet ifname ens224
复制代码 Linux 设置更改网卡名称
在Linux中,更改网卡名称(通常指的是网络接口名称,比如从eth0更改为ens33)可以通过多种方法实现,但主要依赖于你利用的发行版及其网络管理工具。从较旧的ifrename工具到现代的基于udev或systemd-networkd的规则配置,方法多种多样。不外,自体系d(systemd)成为很多Linux发行版的初始化体系和体系管理器以来,大多数现代Linux体系推荐利用systemd-networkd或基于udev的规则来管理网络接口名称。
以下是一些常用的方法来更改Linux体系中的网卡名称:
1. 利用udev规则(推荐方法)
udev是Linux内核的一部门,用于管理装备节点的创建和删除。你可以通过编写udev规则来永久更改网络接口的名称。
- 确定你的网卡硬件信息:
利用ip link或lspci | grep -i ethernet(对于以太网)查看网卡信息。然后,利用ethtool -i [interface]来获取更多关于接口的具体信息,比如bus-info。
- 编写udev规则:
在/etc/udev/rules.d/目录下创建一个新的udev规则文件,比如70-persistent-net.rules(注意:文件名和编号大概因体系而异,但确保你的规则文件在别的网络相关的udev规则之后被处置惩罚)。
编写规则以匹配你的网卡信息,并设置新的接口名称。比方:
- SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="你的网卡MAC地址", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="new_interface_name"
复制代码 注意更换你的网卡MAC地点和new_interface_name为实际的MAC地点和你想设置的接口名称。
- 重启udev服务或重启体系:
- sudo udevadm control --reload-rules
- sudo udevadm trigger
复制代码 大概简朴地重启你的体系。
2. 利用nmcli(NetworkManager的命令行界面)
如果你的体系利用NetworkManager,你可以利用nmcli来重定名网络接口。但是,请注意,这种方法大概不是永久性的,由于NetworkManager大概会在下一次启动时重新应用其配置。
- 列出全部网络接口:
- 重定名网络接口:
- nmcli con mod [connection-name] connection.interface-name [new-name]
复制代码 注意更换[connection-name]为当前的毗连名称(不是装备名称),[new-name]为你想要设置的新名称。
- 重新加载NetworkManager配置:
- sudo systemctl restart NetworkManager
复制代码 /etc/udev/rules.d/
/etc/udev/rules.d/ 目录在 Linux 体系中用于存放自定义的 udev 规则文件。udev 是一个装备管理器,它根据存储在 /etc/udev/rules.d/ 目录下的规则文件来管理 /dev 目录下的装备文件。这些规则文件决定了当内核检测到新装备时,如作甚该装备创建或修改装备文件。
对于网络接口(网卡)的名称管理,虽然现代 Linux 体系通常利用 systemd-networkd 或 NetworkManager 来处置惩罚网络接口的配置,但 udev 规则仍旧可以用来设置或更改网络接口的名称。然而,这种方法通常用于在体系启动时或装备首次被识别时确定接口名称,而不是在运行时更改它们。
要在 /etc/udev/rules.d/ 目录下创建用于更改网络接口名称的 udev 规则,你需要:
- 确定网卡的硬件标识符:利用 lspci、lsusb(对于 USB 网卡)或 ip link 命令查看体系上的网络接口和装备信息。你大概需要查找 MAC 地点、装备型号或总线信息来唯一标识你的网卡。
- 编写 udev 规则:在 /etc/udev/rules.d/ 目录下创建一个新的规则文件(确保文件名以 .rules 末端,并且文件名在数字上大于 70,以确保它在默认规则之后被处置惩罚)。在该文件中,编写一个规则来匹配你的网卡,并设置一个新的接口名称。比方:
- # 假设网卡的 MAC 地址是 00:1A:2B:3C:4D:5E
- SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:1a:2b:3c:4d:5e", NAME="eth_custom"
复制代码 注意:在实际利用中,MAC 地点应该完全匹配(包罗大小写),但通常小写字母更为常见。此外,某些体系大概不答应将接口名称更改为以 eth 开头的名称,除非你的体系明确支持这一点(比方,通过预测性接口定名方案之外的配置)。
- 重新加载 udev 规则:创建或修改规则文件后,你需要重新加载 udev 规则以使更改生效。这可以通过运行 udevadm control --reload-rules 命令来完成,然后你大概需要触发 udev 事件来应用新规则,这可以通过 udevadm trigger 命令来完成,大概简朴地重启体系。
然而,请注意,对于大多数现代 Linux 发行版来说,网络接口的名称通常是由 systemd-networkd 或 NetworkManager 根据预测性接口定名方案(如基于位置的定名 enpXsYfZ、基于 MAC 地点的定名 enx... 等)主动设置的。如果你想要更改这些名称,你大概需要调解 systemd-networkd 或 NetworkManager 的配置,而不是编写 udev 规则。
此外,如果你的体系利用 NetworkManager,并且你想要更改网络接口的名称,你可以考虑利用 NetworkManager 的命令行工具 nmcli 来实现这一点,但这通常涉及更改毗连配置而不是网络接口本身的名称。对于永久更改,你大概需要编辑 NetworkManager 的配置文件(如 /etc/NetworkManager/system-connections/ 目录下的文件)。
Linux的udev
Linux中的udev(Userspace Device Enumeration)是一个装备管理器,它答应用户空间程序根据存储在/etc/udev/rules.d/目录下的规则文件来管理/dev目录下的装备文件。udev通过监听内核发出的装备添加或删除事件来动态地管理装备节点,这使得Linux体系能够更机动、更高效地处置惩罚硬件装备。
udev的主要功能和特点包罗:
- 动态装备管理:udev能够动态地创建和删除/dev目录下的装备文件,而无需重启体系。当内核检测到新装备时,udev会读取相应的规则文件,并根据规则来创建或修改装备文件。
- 机动的定名规则:udev答应用户通过编写规则文件来自定义装备文件的定名规则。这些规则可以基于装备的各种属性,如供应商ID、产物ID、序列号、总线类型等。
- 权限和全部权管理:udev规则还可以指定装备文件的权限和全部权,从而确保只有符合的用户或组能够访问这些装备。
- 环境变量和属性导出:udev可以将装备的属性导出为环境变量,供用户空间程序利用。这使得用户空间程序能够更轻易地获取装备的具体信息。
udev的工作流程大致如下:
- 内核检测到新装备:当内核检测到新装备时,它会发送一个装备添加事件到udev保卫历程。
- udev保卫历程吸收事件:udev保卫历程吸收到装备添加事件后,会读取/etc/udev/rules.d/目录下的规则文件,并尝试匹配该装备的属性。
- 规则匹配:udev会按照规则文件的次序逐一匹配装备的属性。如果找到匹配的规则,udev会根据规则中的指令来创建或修改装备文件。
- 创建或修改装备文件:如果规则指定了创建装备文件,udev会在/dev目录下创建相应的装备文件,并根据规则设置其权限、全部权等属性。
- 发送事件:udev还会发送一个装备准备就绪的事件到用户空间,通知其他程序该装备已经可用。
udev规则文件的编写:
udev规则文件通常包罗一系列的行,每行都是一个规则。规则由多个键值对组成,它们之间用逗号分隔。规则文件的根本语法如下:
- KEY="value", KEY="value", ... RUN+="program"
复制代码 其中,KEY="value"部门用于匹配装备的属性,而RUN+="program"部门则指定了当规则匹配时要执行的程序或脚本。
- SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:cf:4b:cd", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
复制代码 这行udev规则是用来在Linux体系中主动配置网络装备接口的。让我们一步步剖析这个规则的含义:
- SUBSYSTEM=="net": 这个条件指定了规则实用于哪个子体系。在这个例子中,它指定了规则仅实用于网络(net)子体系。这意呀着,当udev检测到与网络相关的装备事件时,这个规则才会被考虑。
- ACTION=="add": 这个条件指定了规则应该在什么动作下触发。add表示当装备被添加到体系中时(比方,当网络接口卡(NIC)被物理插入或体系启动时识别到网络接口),这个规则会被执行。
- DRIVERS=="?*": 这个条件用于匹配装备的驱动程序。?*是一个通配符,表示这个规则不特定于某个驱动程序,而是实用于全部驱动程序。然而,在实际应用中,如果大概的话,指定具体的驱动程序会更正确。
- ATTR{address}=="00:0c:29:cf:4b:cd": 这个条件指定了装备的MAC地点。只有当装备的MAC地点与00:0c:29:cf:4b:cd完全匹配时,这个规则才会被应用。MAC地点是网络接口卡的唯一标识符。
- ATTR{type}=="1": 这个条件指定了网络接口的类型。1通常表示以太网接口(Ethernet)。这有助于确保规则仅应用于以太网装备。
- KERNEL=="eth*": 这个条件指定了内核装备名称的模式。eth*表示任何以eth开头的装备名称,这是传统上用于以太网接口的定名方式。然而,现代Linux体系大概利用enp、ens等定名方案,具体取决于体系的配置。
- NAME="eth0": 这个动作指定了当规则匹配时,应该给装备分配的名称。在这个例子中,无论装备的原始名称是什么,只要它满足上述全部条件,它都将被重定名为eth0。这对于保持网络接口名称的一致性非常有用,尤其是在需要明确知道网络接口名称的脚本或配置文件中。
- ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device", RESULT=="?*", NAME="$result"
复制代码 这段udev规则是用来在体系检测到新的网络装备(如网卡)被添加时,执行一个特定的脚原来重定名这个装备。下面是对这段规则的具体表明:
- ACTION=="add": 这表示当udev吸收到一个装备添加(add)的事件时,这条规则才会被应用。
- SUBSYSTEM=="net": 这指定了规则实用的子体系是“net”,即网络装备。
- DRIVERS=="?*": 这里利用了通配符?*,意味着这条规则会匹配任何驱动程序的装备。但实际上,对于网络装备来说,这个条件大概并不是特别有用,由于网络装备的识别通常不依赖于驱动程序名称的正确匹配。不外,这里大概是为了保持规则的通用性或兼容性。
- ATTR{type}=="1": 这指定了装备属性type必须等于1。在网络装备的上下文中,type属性大概指的是装备类型或某种特定的属性,但具体含义取决于装备及其驱动程序。不外,对于大多数现代Linux体系来说,这个条件大概不是必须的,由于udev已经能够很好地根据其他属性来识别网络装备。
- PROGRAM="/lib/udev/rename_device": 这指定了当规则匹配时,udev应该执行的程序。在这个例子中,它指向了一个名为rename_device的脚本,该脚本位于/lib/udev/目录下。这个脚本的具体作用是重定名装备,但请注意,这个脚本是假造的,实际的Linux发行版中大概并不包罗这样的脚本。你需要本身编写这个脚本,大概指向一个已经存在的、能够执行重定名操作的脚本。
- RESULT=="?*": 这个条件是用来捕获PROGRAM指定的脚本执行后的输出结果的。?*是一个通配符,意味着它会匹配脚本输出的任何内容。然而,这里有一个题目:udev的RESULT变量实际上并不直接支持从PROGRAM中捕获输出。通常,你会在脚本中直接设置装备名称,而不是通过RESULT变量。因此,这个条件大概是不正确的,大概是在某种特定上下文(如某个特定版本的udev或某个自定义的udev扩展)中利用的。
- NAME="$result": 这指定了如果前面的条件都满足,那么装备的名称应该被设置为$result变量的值。但是,由于RESULT变量在尺度的udev中并不消于捕获PROGRAM的输出,因此这里大概是一个错误或误解。在实际应用中,你大概需要在脚本中直接调用udevadm test或udevadm info等工具来设置装备名称,大概通过修改/etc/udev/rules.d/中的规则文件来直接指定新的装备名称。
综上所述,这段udev规则试图在添加新网络装备时执行一个脚原来重定名该装备,但其中存在一些不正确或需要修改的地方。特别是RESULT=="?*"和NAME="$result"部门,它们大概需要根据实际情况进行调解。
综上所述,这个udev规则的目的是在Linux体系中主动将具有特定MAC地点(00:0c:29:cf:4b:cd)和类型(以太网)的网络接口重定名为eth0。这对于确保网络接口名称的一致性非常有用,尤其是在需要明确知道网络接口名称的主动化脚本或配置文件中。
注意事项:
- 编写udev规则时,需要确保规则文件的语法正确,并且规则之间的次序符合你的需求。
- 规则文件中的属性名称和值需要与实际装备的属性相匹配,否则规则将无法正确匹配装备。
- 在修改udev规则后,通常需要重新加载udev规则或重启udev保卫历程来使更改生效。这可以通过运行udevadm control --reload-rules和udevadm trigger命令来完成。
udev是Linux体系中非常重要的一部门,它使得装备管理变得更加机动和高效。通过编写udev规则文件,用户可以自定义装备文件的定名规则、权限和全部权等属性,从而满足差别的利用需求。
是否全部Linux都利用udev
并非全部Linux都利用udev,但udev已成为很多现代Linux发行版的默认装备管理工具。udev是Linux 2.6内核引入的一个功能,它替代了早期的devfs,成为管理/dev目录下装备文件的主要方式。
udev的普及水平
- 现代Linux发行版:大多数现代的Linux发行版,如Fedora、Ubuntu、Debian等,都默认利用udev作为装备管理器。
- 旧版Linux:在一些较旧的Linux版本或特定的发行版中,大概仍旧利用devfs或其他装备管理工具。然而,随着Linux内核的发展,这些旧工具已经被逐渐淘汰。
udev的上风
- 动态管理:udev能够动态地创建和删除装备文件,而无需重启体系。这使得Linux体系能够更机动地处置惩罚硬件装备的变化。
- 机动的定名规则:用户可以通过编写udev规则文件来自定义装备文件的定名规则,这些规则可以基于装备的各种属性,如供应商ID、产物ID、序列号等。
- 权限和全部权管理:udev规则还可以指定装备文件的权限和全部权,从而确保只有符合的用户或组能够访问这些装备。
特别情况
- 嵌入式体系:在一些资源受限的嵌入式体系中,大概会利用更轻量级的装备管理工具来替代udev。
- 特别需求:某些特定的应用场景或需求大概要求利用特定的装备管理工具,而不是udev。
结论
虽然udev已成为很多现代Linux发行版的默认装备管理工具,但并不是全部Linux都利用udev。在选择装备管理工具时,Linux发行版会根据其目标用户群、体系资源、功能需求等因素进行综合考虑。然而,随着Linux内核和发行版的发展,udev的普及水平有望继续进步。
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device", RESULT=="?*", NAME="$result"
的说明
- ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{type}=="1", PROGRAM="/lib/udev/rename_device", RESULT=="?*", NAME="$result"
复制代码 这段udev规则是用来在体系检测到新的网络装备(如网卡)被添加时,执行一个特定的脚原来重定名这个装备。下面是对这段规则的具体表明:
- ACTION=="add": 这表示当udev吸收到一个装备添加(add)的事件时,这条规则才会被应用。
- SUBSYSTEM=="net": 这指定了规则实用的子体系是“net”,即网络装备。
- DRIVERS=="?*": 这里利用了通配符?*,意味着这条规则会匹配任何驱动程序的装备。但实际上,对于网络装备来说,这个条件大概并不是特别有用,由于网络装备的识别通常不依赖于驱动程序名称的正确匹配。不外,这里大概是为了保持规则的通用性或兼容性。
- ATTR{type}=="1": 这指定了装备属性type必须等于1。在网络装备的上下文中,type属性大概指的是装备类型或某种特定的属性,但具体含义取决于装备及其驱动程序。不外,对于大多数现代Linux体系来说,这个条件大概不是必须的,由于udev已经能够很好地根据其他属性来识别网络装备。
- PROGRAM="/lib/udev/rename_device": 这指定了当规则匹配时,udev应该执行的程序。在这个例子中,它指向了一个名为rename_device的脚本,该脚本位于/lib/udev/目录下。这个脚本的具体作用是重定名装备,但请注意,这个脚本是假造的,实际的Linux发行版中大概并不包罗这样的脚本。你需要本身编写这个脚本,大概指向一个已经存在的、能够执行重定名操作的脚本。
- RESULT=="?*": 这个条件是用来捕获PROGRAM指定的脚本执行后的输出结果的。?*是一个通配符,意味着它会匹配脚本输出的任何内容。然而,这里有一个题目:udev的RESULT变量实际上并不直接支持从PROGRAM中捕获输出。通常,你会在脚本中直接设置装备名称,而不是通过RESULT变量。因此,这个条件大概是不正确的,大概是在某种特定上下文(如某个特定版本的udev或某个自定义的udev扩展)中利用的。
- NAME="$result": 这指定了如果前面的条件都满足,那么装备的名称应该被设置为$result变量的值。但是,由于RESULT变量在尺度的udev中并不消于捕获PROGRAM的输出,因此这里大概是一个错误或误解。在实际应用中,你大概需要在脚本中直接调用udevadm test或udevadm info等工具来设置装备名称,大概通过修改/etc/udev/rules.d/中的规则文件来直接指定新的装备名称。
综上所述,这段udev规则试图在添加新网络装备时执行一个脚原来重定名该装备,但其中存在一些不正确或需要修改的地方。特别是RESULT=="?*"和NAME="$result"部门,它们大概需要根据实际情况进行调解。
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:cf:4b:cd", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
说明
- SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:cf:4b:cd", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
复制代码 这行udev规则是用来在Linux体系中主动配置网络装备接口的。让我们一步步剖析这个规则的含义:
- SUBSYSTEM=="net": 这个条件指定了规则实用于哪个子体系。在这个例子中,它指定了规则仅实用于网络(net)子体系。这意呀着,当udev检测到与网络相关的装备事件时,这个规则才会被考虑。
- ACTION=="add": 这个条件指定了规则应该在什么动作下触发。add表示当装备被添加到体系中时(比方,当网络接口卡(NIC)被物理插入或体系启动时识别到网络接口),这个规则会被执行。
- DRIVERS=="?*": 这个条件用于匹配装备的驱动程序。?*是一个通配符,表示这个规则不特定于某个驱动程序,而是实用于全部驱动程序。然而,在实际应用中,如果大概的话,指定具体的驱动程序会更正确。
- ATTR{address}=="00:0c:29:cf:4b:cd": 这个条件指定了装备的MAC地点。只有当装备的MAC地点与00:0c:29:cf:4b:cd完全匹配时,这个规则才会被应用。MAC地点是网络接口卡的唯一标识符。
- ATTR{type}=="1": 这个条件指定了网络接口的类型。1通常表示以太网接口(Ethernet)。这有助于确保规则仅应用于以太网装备。
- KERNEL=="eth*": 这个条件指定了内核装备名称的模式。eth*表示任何以eth开头的装备名称,这是传统上用于以太网接口的定名方式。然而,现代Linux体系大概利用enp、ens等定名方案,具体取决于体系的配置。
- NAME="eth0": 这个动作指定了当规则匹配时,应该给装备分配的名称。在这个例子中,无论装备的原始名称是什么,只要它满足上述全部条件,它都将被重定名为eth0。这对于保持网络接口名称的一致性非常有用,尤其是在需要明确知道网络接口名称的脚本或配置文件中。
ACTION=="add", SUBSYSTEM=="net", NAME=="", DRIVERS=="ibmveth", PROGRAM="/bin/sh -ec 'D=$${DEVPATH#*/vio/}; D=$${D%%%%/*}; D=$${D#????}; D=$${D#0}; D=$${D#0}; D=$${D#0}; D=$${D#0}; echo $${D:-0}'", NAME="ibmveth$result"
说明
- ACTION=="add", SUBSYSTEM=="net", NAME=="", DRIVERS=="ibmveth", PROGRAM="/bin/sh -ec 'D=$${DEVPATH#*/vio/}; D=$${D%%%%/*}; D=$${D#????}; D=$${D#0}; D=$${D#0}; D=$${D#0}; D=$${D#0}; echo $${D:-0}'", NAME="ibmveth$result"
复制代码 这段udev规则是针对IBM Power系列服务器上的ibmveth网络接口卡(NIC)设计的,用于在装备添加时主动重定名网络接口。让我们逐步剖析这段规则:
- ACTION=="add": 这表示当udev吸收到一个装备添加(add)的事件时,这条规则才会被触发。
- SUBSYSTEM=="net": 指定了规则实用的子体系是“net”,即网络装备。
- NAME=="": 这个条件通常用于确保在udev尝试设置装备名称之前,该装备还没有被赋予名称。然而,在某些情况下,这个条件大概是多余的,由于udev通常会在应用规则之前打扫装备名称。但在这里,它大概是为了确保只有在装备当前没著名称时才会应用这条规则。
- DRIVERS=="ibmveth": 指定了规则仅实用于驱动程序为ibmveth的装备。ibmveth是IBM Power系列服务器上用于假造化环境(如LPARs和假造机)的网络接口驱动程序。
- PROGRAM="/bin/sh -ec '...': 这是规则的核心部门,它指定了一个要执行的shell命令。这个命令通过一系列shell参数扩展和字符串操作来天生一个新的装备名称。具体步调如下:
- D=$${DEVPATH#*/vio/};:从DEVPATH环境变量(表示装备在udev装备树中的路径)中移除开头的*/vio/部门。DEVPATH是udev用来唯一标识装备的路径。
- 接下来的几行D=$${D%%%%/*}; D=$${D#????};等是对D变量进行进一步的字符串处置惩罚,目的是从路径中提取出用于定名网络接口的部门。这些操作包罗移除路径的末端部门(大概是装备实例号或其他标识符),以及从剩余部门中移除前导的字符(这里用????表示,但实际上大概是基于ibmveth装备路径的具体结构来确定的)。
- echo $${D:-0}'":末了,利用echo命令输出处置惩罚后的字符串D,如果D为空,则默以为0。这个输出将被用作装备的新名称。
- NAME="ibmveth$result": 这里,$result变量应该捕获PROGRAM命令的输出。但是,请注意,udev规则中的PROGRAM并不直接设置$result变量。相反,udev会捕获PROGRAM命令的尺度输出,并将其存储在内部,然后可以在规则的其他部门(如NAME赋值)中通过%k(对于内核名称)或%E{key}(对于环境变量)等占位符来引用。然而,在这个例子中,$result的利用大概是不正确的,由于udev没有这样的内置变量。正确的做法大概是直接利用%c(对于PROGRAM命令的输出,但并非全部udev版本都支持)大概通过某种方式将输出生存到环境变量中,并在NAME赋值时引用该环境变量。
然而,由于udev的复杂性,以及差别Linux发行版和udev版本之间的差别,上述规则中的$result部门大概无法按预期工作。一个更可靠的方法是利用udev的内置功能来捕获PROGRAM命令的输出,并直接在NAME赋值中引用它。但是,由于udev的限制,这大概需要一些创造性的解决方案,比如将输出写入一个临时文件,然后在udev规则中读取该文件的内容。
不外,对于大多数情况,你大概不需要云云复杂的脚原来天生装备名称。通常,简朴的udev规则就足以根据装备的某些属性(如序列号、MAC地点或装备路径的一部门)来设置唯一的名称。在这个例子中,如果ibmveth装备的路径中包罗足够的信息来唯一标识每个接口,那么你可以直接修改PROGRAM命令来提取这些信息,并将其用作装备名称的一部门。
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:cf:4b:cd", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
说明
- SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:cf:4b:cd", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
复制代码 在udev规则中,您提供的规则片段用于在添加网络接口时,根据特定的条件来重定名该接口。这里,您利用了SUBSYSTEM、ACTION、DRIVERS、ATTR{address}、ATTR{type}和KERNEL等属性来匹配网络接口,如果全部条件都满足,则将接口重定名为eth0。不外,有几个地方需要注意或大概需要调解:
- DRIVERS==“?*”:这个条件通常用于匹配任何驱动程序。如果您的目的是不特别关心驱动程序,那么这个条件是可以的。但如果您想要针对特定的驱动程序,您应该更换?*为具体的驱动程序名称。
- ATTR{address} 和 ATTR{type}:这些条件分别用于匹配网络接口的MAC地点和类型。在您的情况下,它们被设置为00:0c:29:cf:4b:cd和1。确保这些值与您想要匹配的接口的实际值相匹配。
- KERNEL=="eth"*:这个条件用于匹配内核中装备的名称,这里它匹配以eth开头的任何名称。这通常是为了确保规则只应用于以太网接口。然而,请注意,在现代Linux体系中,网络接口的名称大概不是由内核直接分配的(特别是在利用systemd-networkd或udev的预测性定名规则时),但这个条件仍旧可以用于过滤出传统上被以为是“以太网”类型的接口。
- NAME=“eth0”:这是udev规则中用于设置装备名称的部门。如果前面的全部条件都满足,该接口将被重定名为eth0。
完备的udev规则大概看起来像这样(注意,我已经移除了不必要的空格和格式化以符合通常的udev规则风格):
- SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:cf:4b:cd", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
复制代码 确保将此规则添加到udev规则文件中,这些文件通常位于/etc/udev/rules.d/目录下,并且以.rules作为文件扩展名。您大概还需要重新加载udev规则或重启体系来使更改生效。
另外,请注意,如果体系利用了systemd的预测性定名规则或其他网络接口定名机制,那么直接通过udev规则来重定名接口大概不起作用,大概大概需要在体系启动时通过其他方式(如systemd服务或启动脚本)来重置接口名称。然而,在大多数基于Debian和Red Hat的Linux发行版中,传统的udev定名方法仍旧有用,只要没有启用预测性定名。
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="<网卡的MAC地址>", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="newname"
说明
- SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="<网卡的MAC地址>", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="newname"
复制代码 这条udev规则是用来在Linux体系中主动识别和重定名网络接口的。下面是对这条规则的具体表明:
- SUBSYSTEM=="net": 指定这条规则实用于net子体系,即这条规则将应用于网络装备相关的事件。
- ACTION=="add": 指定这条规则仅在装备被添加(即插入或启动)到体系时触发。
- DRIVERS=="?*": 这里利用?*作为通配符,意味着这条规则不特定于某个驱动程序。它实用于全部驱动程序。然而,在实际情况中,你大概想指定具体的驱动程序以更正确地控制规则的应用。
- ATTR{address}=="<网卡的MAC地点>": 这里需要你将<网卡的MAC地点>更换为具体的MAC地点。这条规则会检查网络装备的MAC地点是否匹配指定的值。MAC地点是网络接口的唯一标识符,用于网络通信。
- ATTR{dev_id}=="0x0": 指定装备的装备ID。然而,通常装备ID是用来唯一标识装备的,但在网络装备的上下文中,它大概不是必须的大概不是唯一的。这个值大概需要根据实际情况进行调解或移除。
- ATTR{type}=="1": 指定装备类型。对于网络装备来说,type=1通常表示以太网装备。
- KERNEL=="eth*": 指定内核识别的装备名称。eth*是一个通配符,表示全部以eth开头的装备名称。这通常用于匹配传统的以太网接口名称,如eth0、eth1等。
- NAME="newname": 这是规则的动作部门,它将匹配的装备重定名为newname。你需要将newname更换为你盼望赋予网络接口的新名称。
综上所述,这条udev规则的目的是在Linux体系中主动识别和重定名一个具有特定MAC地点的以太网装备为newname。请注意,在实际应用中,你大概需要根据你的体系环境和具体需求调解这条规则。
另外,要使这条规则生效,你需要将其添加到udev的规则文件中,通常位于/etc/udev/rules.d/目录下。然后,你大概需要重启udev服务或重新加载udev规则(利用udevadm control --reload-rules命令),以及重新加载网络接口(比方,通过重启网络服务或利用ip link set <原接口名> down; ip link set <原接口名> name <新接口名>; ip link set <新接口名> up命令)来应用这个更改。
nmcli 删除全部毗连
在利用nmcli(NetworkManager的命令行界面)时,直接删除全部网络毗连的命令并不直接存在,由于nmcli没有提供一个直接的命令来一次性删除全部毗连。但是,你可以通过一些脚本或命令组合来实现这个目的。
下面是一个利用bash脚本和nmcli命令来删除全部网络毗连的示例方法。请注意,在运行这些命令之前,请确保你完全理解它们的含义,并且你确实想要删除全部网络毗连。
方法一:利用nmcli和bash循环
你可以利用nmcli con show命令列出全部毗连,然后通过循环和nmcli con delete命令来删除它们。
- #!/bin/bash
- # 列出所有网络连接并删除它们
- connections=$(nmcli con show | awk 'NR>1 {print $1}')
- for con in $connections; do
- nmcli con delete "$con"
- done
复制代码 注意:这个脚本跳过了第一行(通常是标题行),并且假设全部的毗连名称都不包罗空格或特别字符,这通常是对的,但并非总是云云。
方法二:利用grep和xargs
另一个方法是利用grep来过滤出毗连名称,并利用xargs来将它们作为参数传递给nmcli con delete命令。
- nmcli con show | grep -v "^NAME" | awk '{print $1}' | xargs -I {} nmcli con delete {}
复制代码 这条命令的工作方式如下:
- nmcli con show:列出全部网络毗连。
- grep -v "^NAME":排除标题行(假设标题行以"NAME"开头)。
- awk '{print $1}':打印每行的第一个字段,即毗连名称。
- xargs -I {} nmcli con delete {}:将前面的输出作为参数传递给nmcli con delete命令,-I {}是一个更换字符串,用于在nmcli con delete命令中插入每个毗连名称。
注意
- 在执行这些操作之前,请确保你已经生存了全部重要毗连的配置,由于一旦删除,这些配置将不可恢复(除非你有备份)。
- 如果你不确定哪些毗连是重要的,大概你不确定这些命令的效果,请先在一个测试环境中尝试它们。
- 在某些体系上,你大概需要sudo权限来删除网络毗连。如果是这样,请在命令前加上sudo。
xargs的大括号{}
xargs 命令是一个强大的命令行工具,它可以将尺度输入(stdin)数据转换成命令行参数。xargs 在处置惩罚来自管道(pipe)或文件的数据时特别有用,尤其是当这些数据需要作为其他命令的参数时。
然而,在直接讨论 xargs 的大括号 {} 时,我们实际上大概是在肴杂了 xargs 和另一个常用的命令行工具——find 命令与 -exec 选项联合利用时的 {} 占位符,大概是在讨论 xargs 与 -I 选项(在某些版本的 xargs 中是 -i)联合利用时自定义的更换字符串。
find 命令的 {}
在 find 命令中,{} 是一个特别的字符串,它代表了 find 命令找到的每个文件名。当与 -exec 选项一起利用时,{} 被用来在 -exec 指定的命令中插入这些文件名。比方:
- find . -name "*.txt" -exec echo {} \;
复制代码 这个命令会查找当前目录及其子目录下全部扩展名为 .txt 的文件,并对每个找到的文件执行 echo 命令,打印出文件名。
xargs 的 -I 选项
虽然 xargs 本身倒霉用 {} 作为内置占位符,但它答应你通过 -I(或 -i,在某些实现中)选项指定一个自定义的更换字符串。这个字符串将在 xargs 从尺度输入读取的每个项目出现时被更换。比方:
- echo -e "file1.txt\nfile2.txt" | xargs -I {} echo Processing {}
复制代码 这个命令会输出:
- Processing file1.txt
- Processing file2.txt
复制代码 在这里,{} 被用作更换字符串,xargs 会将每个从尺度输入读取的行更换为 {},然后执行指定的命令(在这个例子中是 echo Processing {})。
总结
因此,当你看到大括号 {} 与 xargs 一起利用时,很大概是由于 xargs 被用来处置惩罚由其他命令(如 find)天生的数据,并且 {} 实际上是在谁人天生数据的命令中利用的。大概,xargs 正在利用 -I 选项来指定一个自定义的更换字符串,该字符串在功能上类似于 find 命令中的 {}。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |