偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

在 Linux 使用 systemd-udevd 管理你的接入硬件

系統(tǒng) Linux
在這篇文章中,我會(huì)討論為何有人想要使用這樣的名稱。在這個(gè)過(guò)程中,我會(huì)探索剖析 udev 的配置文件,然后展示如何更改 udev 的設(shè)置,包括編輯系統(tǒng)命名設(shè)備的方式。

Linux 能夠出色地自動(dòng)識(shí)別、加載、并公開(kāi)接入的無(wú)數(shù)廠商的硬件設(shè)備。事實(shí)上,很多年以前,正是這個(gè)特性說(shuō)服我,堅(jiān)持讓我的雇主將整個(gè)基礎(chǔ)設(shè)施轉(zhuǎn)換到 Linux。痛點(diǎn)在于 Redmond 的某家公司(LCTT 譯注:指微軟)不能在我們的 Compaq 臺(tái)式機(jī)上加載集成網(wǎng)卡的驅(qū)動(dòng),而 Linux 可以輕松實(shí)現(xiàn)這一點(diǎn)。

?[[418036]]??

從那以后的歲月里,Linux 的識(shí)別設(shè)備庫(kù)隨著該過(guò)程的復(fù)雜化而與日俱增,而 udev 就是解決這個(gè)問(wèn)題的希望之星。udev 負(fù)責(zé)監(jiān)聽(tīng) Linux 內(nèi)核發(fā)出的改變?cè)O(shè)備狀態(tài)的事件。它可能是一個(gè)新 USB 設(shè)備被插入或拔出,也可能是一個(gè)無(wú)線鼠標(biāo)因浸入灑出的咖啡中而脫機(jī)。

udev 負(fù)責(zé)處理所有的狀態(tài)變更,比如指定訪問(wèn)設(shè)備使用的名稱和權(quán)限。這些更改的記錄可以通過(guò) dmesg 獲取。由于 dmesg 的輸出通常有幾千行,對(duì)結(jié)果進(jìn)行過(guò)濾通常是聰明的選擇。下面的例子說(shuō)明了 Linux 如何識(shí)別我的 WiFi 接口。這個(gè)例子展示了我的無(wú)線設(shè)備使用的芯片組(ath9k)、啟動(dòng)過(guò)程早期階段分配的原始名稱(wlan0)、以及正在使用的又臭又長(zhǎng)的永久名稱(wlxec086b1ef0b3):

$ dmesg | grep wlan [    5.396874] ath9k_htc 1-3:1.0 wlxec086b1ef0b3: renamed from wlan0 

在這篇文章中,我會(huì)討論為何有人想要使用這樣的名稱。在這個(gè)過(guò)程中,我會(huì)探索剖析 udev 的配置文件,然后展示如何更改 udev 的設(shè)置,包括編輯系統(tǒng)命名設(shè)備的方式。這篇文件基于我的新課程中《Linux 系統(tǒng)優(yōu)化》的一個(gè)模塊。

理解 udev 配置系統(tǒng)

使用 systemd 的機(jī)器上,udev 操作由 systemd-udevd 守護(hù)進(jìn)程管理,你可以通過(guò)常規(guī)的 systemd 方式使用 systemctl status systemd-udevd 檢查 udev 守護(hù)進(jìn)程的狀態(tài)。

嚴(yán)格來(lái)說(shuō),udev 的工作方式是試圖將它收到的每個(gè)系統(tǒng)事件與 /lib/udev/rules.d/ 和 /etc/udev/rules.d/ 目錄下找到的規(guī)則集進(jìn)行匹配。規(guī)則文件包括匹配鍵和分配鍵,可用的匹配鍵包括 action、name 和 subsystem。這意味著如果探測(cè)到一個(gè)屬于某個(gè)子系統(tǒng)的、帶有特定名稱的設(shè)備,就會(huì)給設(shè)備指定一個(gè)預(yù)設(shè)的配置。

接著,“分配”鍵值對(duì)被拿來(lái)應(yīng)用想要的配置。例如,你可以給設(shè)備分配一個(gè)新名稱、將其關(guān)聯(lián)到文件系統(tǒng)中的一個(gè)符號(hào)鏈接、或者限制為只能由特定的所有者或組訪問(wèn)。這是從我的工作站摘出的一條規(guī)則:

$ cat /lib/udev/rules.d/73-usb-net-by-mac.rules # Use MAC based names for network interfaces which are directly or indirectly # on USB and have an universally administered (stable) MAC address (second bit # is 0). Don't do this when ifnames is disabled via kernel command line or # customizing/disabling 99-default.link (or previously 80-net-setup-link.rules). IMPORT{cmdline}="net.ifnames" ENV{net.ifnames}=="0", GOTO="usb_net_by_mac_end" ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", NAME=="", \     ATTR{address}=="?[014589cd]:*", \     TEST!="/etc/udev/rules.d/80-net-setup-link.rules", \     TEST!="/etc/systemd/network/99-default.link", \     IMPORT{builtin}="net_id", NAME="$env{ID_NET_NAME_MAC}" 

add 動(dòng)作告訴 udev,只要新插入的設(shè)備屬于網(wǎng)絡(luò)子系統(tǒng),并且是一個(gè) USB 設(shè)備,就執(zhí)行操作。此外,如果我理解正確的話,只有設(shè)備的 MAC 地址由特定范圍內(nèi)的字符組成,并且 80-net-setup-link.rules 和 99-default.link 文件不存在時(shí),規(guī)則才會(huì)生效。

假定所有的條件都滿足,接口 ID 會(huì)改變以匹配設(shè)備的 MAC 地址。還記得之前的 dmesg 信息顯示我的接口名稱從 wlan0 改成了討厭的 wlxec086b1ef0b3 嗎?那都是這條規(guī)則的功勞。我怎么知道?因?yàn)?ec:08:6b:1e:f0:b3 是設(shè)備的 MAC 地址(不包括冒號(hào))。

$ ifconfig -a wlxec086b1ef0b3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500         inet 192.168.0.103  netmask 255.255.255.0  broadcast 192.168.0.255         inet6 fe80::7484:3120:c6a3:e3d1  prefixlen 64  scopeid 0x20<link>         ether ec:08:6b:1e:f0:b3  txqueuelen 1000  (Ethernet)         RX packets 682098  bytes 714517869 (714.5 MB)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 472448  bytes 201773965 (201.7 MB)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0 

Linux 默認(rèn)包含這條 udev 規(guī)則,我不需要自己寫(xiě)。但是為什么費(fèi)力進(jìn)行這樣的命名呢——尤其是看到這樣的接口命名這么難使用后?仔細(xì)看一下包含在規(guī)則中的注釋?zhuān)?/p>

對(duì)直接或間接插入在 USB 上的網(wǎng)絡(luò)接口使用基于 MAC 的名稱,并且用一個(gè)普遍提供的(穩(wěn)定的)MAC 地址(第二位是 0)。當(dāng) ifnames 通過(guò)內(nèi)核命令行或 customizing/disabling 99-default.link(或之前的 80-net-setup-link.rules)被禁用時(shí),不要這樣做。

注意,這個(gè)規(guī)則專(zhuān)為基于 USB 的網(wǎng)絡(luò)接口設(shè)計(jì)的。和 PCI 網(wǎng)絡(luò)接口卡(NIC)不同,USB 設(shè)備很可能時(shí)不時(shí)地被移除或者替換,這意味著無(wú)法保證它們的 ID 不變。某一天 ID 可能是 wlan0,第二天卻變成了 wlan3。為了避免迷惑應(yīng)用程序,指定絕對(duì) ID 給設(shè)備——就像分配給我的 USB 接口的 ID。

操作 udev 的設(shè)置

下一個(gè)示例中,我將從 VirtualBox 虛擬機(jī)里抓取以太網(wǎng)接口的 MAC 地址和當(dāng)前接口 ID,然后用這些信息創(chuàng)建一個(gè)改變接口 ID 的 udev 新規(guī)則。為什么這么做?也許我打算從命令行操作設(shè)備,需要輸入那么長(zhǎng)的名稱讓人十分煩惱。下面是工作原理。

改變接口 ID 之前,我需要關(guān)閉 Netplan 當(dāng)前的網(wǎng)絡(luò)配置,促使 Linux 使用新的配置。下面是 /etc/netplan/ 目錄下我的當(dāng)前網(wǎng)絡(luò)接口配置文件:

$ less /etc/netplan/50-cloud-init.yaml # This file is generated from information provided by # the datasource.  Changes to it will not persist across an instance. # To disable cloud-init's network configuration capabilities, write a file # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: # network: {config: disabled} network:     ethernets:         enp0s3:             addresses: []             dhcp4: true     version: 2 

50-cloud-init.yaml 文件包含一個(gè)非?;镜慕涌诙x,但是注釋中也包含一些禁用配置的重要信息。為此,我將移動(dòng)到 /etc/cloud/cloud.cfg.d 目錄,創(chuàng)建一個(gè)名為 /etc/cloud/cloud.cfg.d 的新文件,插入 network: {config: disabled} 字符串。

盡管我只在 Ubuntu 發(fā)行版上測(cè)試了這個(gè)方法,但它應(yīng)該在任何一個(gè)帶有 systemd 的 Linux(幾乎所有的 Linux 發(fā)行版都有 systemd)上都可以工作。不管你使用哪個(gè),都可以很好地了解編寫(xiě) udev 配置文件并對(duì)其進(jìn)行測(cè)試。

接下來(lái),我需要收集一些系統(tǒng)信息。執(zhí)行 ip 命令,顯示我的以太網(wǎng)接口名為 enp0s3,MAC 地址是 08:00:27:1d:28:10。

$ ip a 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000     link/ether 08:00:27:1d:28:10 brd ff:ff:ff:ff:ff:ff     inet 192.168.0.115/24 brd 192.168.0.255 scope global dynamic enp0s3 

現(xiàn)在,我要在 /etc/udev/rules.d 目錄創(chuàng)建一個(gè)名為 peristent-net.rules 的新文件。我將給文件一個(gè)以較小的數(shù)字開(kāi)頭的名稱,比如 10:

$ cat /etc/udev/rules.d/10-persistent-network.rules ACTION=="add", SUBSYSTEM=="net",ATTR{address}=="08:00:27:1d:28:10",NAME="eth3" 

數(shù)字越小,Linux 越早執(zhí)行文件,我想要這個(gè)文件早點(diǎn)執(zhí)行。文件被添加時(shí),包含其中的代碼就會(huì)分配名稱 eth3 給網(wǎng)絡(luò)設(shè)備——只要設(shè)備的地址能夠匹配 08:00:27:1d:28:10,即我的接口的 MAC 地址 。

保存文件并重啟計(jì)算機(jī)后,我的新接口名應(yīng)該就會(huì)生效。我可能需要直接登錄虛擬機(jī),使用 dhclient 手動(dòng)讓 Linux 為這個(gè)新命名的網(wǎng)絡(luò)請(qǐng)求一個(gè) IP 地址。在執(zhí)行下列命令前,可能無(wú)法打開(kāi) SSH 會(huì)話:

$ sudo dhclient eth3 

大功告成?,F(xiàn)在你能夠促使 udev 控制計(jì)算機(jī)按照你想要的方式指向一個(gè)網(wǎng)卡,但更重要的是,你已經(jīng)有了一些工具,可以弄清楚如何管理任何不聽(tīng)話的設(shè)備。


責(zé)任編輯:趙寧寧 來(lái)源: Linux中國(guó)
相關(guān)推薦

2018-11-06 09:24:55

LinuxLutries命令

2022-04-18 16:28:30

Linux

2022-02-25 07:38:35

Linux

2022-04-16 19:04:49

Linuxpass 命令

2022-07-18 07:12:33

開(kāi)源Linux

2018-04-02 11:15:04

Linux終端管理chkservice

2021-06-15 15:00:08

Cockpit樹(shù)莓派Linux

2021-10-15 13:00:55

LinuxSeahorse加密密鑰

2019-03-31 17:28:37

Arch LinuxLinux鏡像

2022-05-27 10:59:22

LinuxSystemd

2019-05-30 10:20:10

Linux環(huán)境變量命令

2021-10-14 18:00:51

systemd系統(tǒng)管理員系統(tǒng)運(yùn)維

2019-08-05 15:38:07

BitwardenPodman密碼管理器

2012-06-06 10:09:31

iPad數(shù)據(jù)中心

2022-06-30 15:48:52

rustupRust

2015-04-08 09:26:21

IT管理云計(jì)算基礎(chǔ)設(shè)施數(shù)據(jù)存儲(chǔ)

2022-06-06 14:20:25

個(gè)人財(cái)務(wù)開(kāi)源預(yù)算

2018-11-02 08:10:58

Linuxsystemd定時(shí)器

2018-03-05 10:18:44

Linux密碼密碼管理器

2012-05-22 15:19:55

Rex服務(wù)器管理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)