udev(六):udev

article/2025/9/23 16:38:36

  原创文章,转载请注明出处,谢谢!       

  作者:清林,博客名: 空静渡


<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

        基于上面提到的问题,便开始了 udev 的项目。 Udev 的目标有下面几点:

        1 、运行于用户空间。

        2 、创建动态的 /dev

        3 、如果需要就提供一个固定的设备名字。

        4 、提供用户 API 以供访问当前系统设备的信息。


        首先可以看下第一点的“运行于用户空间”,这点很容易做到,这可以通过利用任何的设备增加或从系统中移除时 /sbin/hotplug 都会产生一个事件的这样的机制并联合 sysfs 的功能来显示所有有关设备的信息。

        而其它的几个剩下的目标就使 udev 分成三个子系统了:

        1 namedev --处理所有的设备命名。

        2 libsysfs --访问系统里的设备信息的一个标准库。

        3 udev --为 /dev 进行动态更换。


        下面来看看这三个子系统。

       

        6.1 namedev


        由于需要为不同的设备进行命名,设备命名这部分就从 udev 中分离出来成为一个子系统。设备命名从 udev 从分离出来,这就允许了可插拔设备的命名可以有不同的组织来开发。设备命名子系统 namedev --提供了一个标准的接口可供调用来命名一个指定的设备。

        udev 的最初发行版里, namedev 逻辑上是由一些链接文件,链接到 udev 上。在当前中只有一个命名方案,就是 LANANA 定义的命名表(前面说的那个)。通常由 sysfs 来代表设备使用这些相同的名字,这也符合当前大多数的 Linux 用户。

        udev 项目的部分目标是为用户基于一组机制来命名设备提供一种方法。在当前的 namedev 版本中,提供了用户 5 个步骤来确定设备的名字。这些步骤是有循序的,并且在这 5 个步骤的过程中,任何一个步骤中检测出设备的名字的话,就用这个名字了。这 5 个步骤如下:

        1 、标签或序列号

        2 、总线设备号

        3 、总线拓扑结构

        4 、替换名字

        5 、内核名字


        在第一步中,当一个设备增加进系统时就会基于这个设备的类型来检测,看它是否有唯一的标识符。例如,如果是 usb 设备,则 usb 序列号就会被检测;如果是 scsi 设备,那么 uuid 就会被检测;而块设备的话,就会检测文件系统的标签。如果这个由用户提供的标识符匹配的话(在配置文件中),那么这个就是最终的名字而被使用。

第二步是检测设备的总线号。对于大多数总线来说,这个号通常随着时间的推移是不会改变的,并且所有的总线号在系统里的任何时间点上都可以保证唯一性。一个好的例子就是 PCI 的总线号,在大多系统中基本上是不改变的(然而,升级 BIOS ,或者热插拔 PCI 控制器,那么在机子重启之后就有可能改变这个 PCI 总线号)。同样,如果总线号匹配用户提供的标识符,那么这个名字就会被赋给设备了。

        第三步是检测设备在总线上的位置。例如, usb 设备可以通过插在哪个插口上来确定。

        第四步是简单的字符串替换。如果设备在内核中的名字与指定的名字相匹配,就于用这个指定的名字。

        第五步,如果前面的都没有确定设备名,那么设备名就用默认的内核名字。


        下图摘自 udev – A Userspace Implementation of devfs


        其中,第一、二项显示怎样为设备指定序列号来控制设备的命名。第三、四项是根据总线 id来命名设备,第五、六项是根据 usb设备的接口位置来命名设备,第七项显示的是简单的名字替换。

 

        6.2 libsysfs

        为了可以让许多的不同的程序访问到 sysfs里设备的信息,需要提供通用的 API接口,而不仅仅限于 udev里。设备命名子系统和 udev系统都需要从 sysfs所描述的设备中查询许多各种不同的设备信息。因此就从 sysfs中分出这个作为一个库来供使用。


        6.3 udev

        udev程序使用 namedev和 libsysfs库来完成设备的命名机制。当 /sbin/hotplug被内核调用时, udev就会运行。它是通过在 /etc/hotplug.d/default目录里为自己增加一个符号连接来实现的,而这个目录由 /sbin/hotplug复用器脚本( multiplexer script)来搜索。

        /sbin/hotplug有内核调用,并输出许多设备的特定信息,这些信息是产生了什么样的动作,产生什么样的设备类型动作以及是 sysfs目录树中的哪个设备。 udev就根据这些信息调用 namedev来确定这个设备应该怎么命名。如果这是个新增加进来的设备, udev就会使用 libsysfs来确定这个设备的设备文件应该用什么主次设备号,并在 /dev目录下创建为设备创建一个合适的设备文件名和分配主次设备号。如果这个设备是从系统里移除的,那就相应的从 /dev目录下移除它的设备文件。

 

 

参考文章:《udev – A Userspace Implementation of devfs》

 


http://chatgpt.dhexx.cn/article/YJYEQArJ.shtml

相关文章

udev(八):实战:使用udevadm修改usb优盘在/dev下的名字

原创文章&#xff0c;转载请注明出处&#xff0c;谢谢&#xff01; 作者&#xff1a;清林&#xff0c;博客名&#xff1a; 飞 空静渡 udev的规则的编写&#xff0c;我这里就不说了&#xff0c;大家可以在udev的文档中可以了解&#xff0c;有时间的话我在安排一…

Linux下udev规则详解

如何运用udev&#xff1f;编写udev规则&#xff1f;通过udev更好的管理Linux设备? udev是什么&#xff1f; udev 是 Linux2.6 内核里的一个功能&#xff0c;它替代了原来的 devfs&#xff0c;成为当前 Linux 默认的设备管理工具。udev 以守护进程的形式运行&#xff0c;通过侦…

Udev设备管理器

udev 引入 在2.4内核中 引入了 devfs&#xff0c;他支持设备节点的动态创建。devfs提供了在内存中的文件系统中创建设备节点的能力。设备驱动程序能够自主的管理自己的设备文件。而命名节点的任务还是落到了设备驱动程序头上。但是&#xff0c;设备命名策略是可管理的&#xf…

linux下udev详解

一.udev简介 udev是一个设备管理工具&#xff0c;udev以守护进程的形式运行&#xff0c;通过侦听内核发出来的uevent来管理/dev目录下的设备文件。udev在用户空间运行&#xff0c;而不在内核空间 运行。它能够根据系统中的硬件设备的状态动态更新设备文件&#xff0c;包括设备…

[2020.1.14][udev] udev介绍

1 什么是udev udev是一种工具&#xff0c;它能够根据系统中的硬件设备的状态动态更新设备文件&#xff0c;包括设备文件的创建&#xff0c;删除等。 设备文件通常放在/dev目录下。使用udev后&#xff0c;在/dev目录下就只包含系统中真正存在的设备。 设备访问控制udev:user …

LINUX下 Udev详解

如果你使用Linux比较长时间了&#xff0c;那你就知道&#xff0c;在对待设备文件这块&#xff0c;Linux改变了几次策略。在Linux早期&#xff0c;设备文件仅仅是是一些带有适当的属性集的普通文件&#xff0c;它由mknod命令创建&#xff0c;文件存放在/dev目录下。后来&#xf…

wmic bug

今天尝试用wmic进行横向移动&#xff0c;老是出现 , - Alias not found&#xff0c;再三确认不是命令的问题&#xff0c;尝试修改域控用户的密码后成功解决&#xff0c;难道这时wmic的bug&#xff1f;&#xff1f;&#xff1f; 猜测是因为密码种含有 , . 这样的符号导致命令产生…

wmic命令学习

我目前知道wmic可以查询进程&#xff0c;还可以查询服务。查询进程使用wmic process,如果想知道进程的名字、进程号、执行文件路径可以通过get来获取&#xff0c;还可以根据where筛选进程进行查询。 wmic process get name, processid,executablepath 查询主机进程信息&#xf…

Windows 命令 WMIC 使用详解

WMIC扩展WMI&#xff08;Windows Management Instrumentation&#xff0c;Windows管理工具&#xff09; &#xff0c;提供了从命令行接口和批命令脚本执行系统管理的支持。在WMIC出现之前&#xff0c;如果要管理WMI系统&#xff0c;必须使用一些专门的WMI应用&#xff0c;例如S…

wmic java_Java执行wmic命令获取系统环境变量

1.首先编写文件setenv.bat设置系统环境变量&#xff1a; echo %cd% set framework_home%cd% echo %framework_home% wmic ENVIRONMENT create name"framework_home",username"",VariableValue"%framework_home%" Note: 此处假设framework_home为…

wmic命令

友情链接&#xff1a;wmic命令 目录 一、如何获取帮助文档 &#xff08;1&#xff09;wmic /? &#xff08;2&#xff09;wmic nic /? &#xff08;3&#xff09;wmic nic get ##获取网卡所有信息&#xff0c;如下只列出部分列 &#xff08;4&#xff09;信息筛…

内网渗透 | powershellwmic详解

文章目录 引子PowerShell0x001基本概念0x002命令格式0x003基本使用0x004常用命令0x005powershell脚本0x006参考文章 WMIC0x001基本概念0x002命令格式0x003常用命令1、目标系统相关2、用户管理 0x004参考文章 引子 之前在内网渗透&#xff0c;免杀中到处能看到powershell和wmic的…

wmic横向

WMI&#xff0c;是Windows 2K/XP管理系统的核心&#xff1b;对于其他的Win32操作系统&#xff0c;WMI是一个有用的插件。WMI以CIMOM为基础&#xff0c;CIMOM即公共信息模型对象管理器&#xff08;Common Information Model Object Manager&#xff09;&#xff0c;是一个描述操…

【转】wmic命令

友情链接&#xff1a;wmic命令 目录 一、如何获取帮助文档 &#xff08;1&#xff09;wmic /? &#xff08;2&#xff09;wmic nic /? &#xff08;3&#xff09;wmic nic get ##获取网卡所有信息&#xff0c;如下只列出部分列 &#xff08;4&#xff09;信息筛选 二、…

WMIC学习笔记

wmic 是什么 wmic 是计算机管理工具&#xff0c;提供给管理员以命令行的方式管理计算机。在 win10 已经弃用&#xff0c;不过还能用。 执行模式 WMIC 有两种执行模式&#xff1a;交互模式(Interactive mode)和非交互模式(Non-Interactive mode)。 在命令提示符或“运行”窗口…

信息收集--wmic命令

后渗透信息收集之wmic命令的一些使用方法 前言一、关于wmic二、wmic的简单使用三、以进程为例展现wmic的使用四、关于powershell的Get-Wmi 对象 前言 wmic和cmd一样在所有的windows版本中都存在&#xff0c;同时wmic有很多cmd下不方便使用的部分 一、关于wmic WMI命令行(WMIC)实…

Wmic

WMIC&#xff08;Windows Management InstrumentationCommand Line&#xff09; windows除了cmd &#xff0c;powershell以外另一个更为强大的命令执行shell: windows最令网管诟病的地方就是命令行没有unix和linux强大。但这种情况正在不断改观&#xff0c;windows命令行也越来…

比CMD更强大的命令行:WMIC后渗透利用(系统命令)

写在前面的话 在这篇文章中&#xff0c;我们将讨论如何在攻击的后渗透利用阶段使用WMIC&#xff08;Windows Management InstrumentationCommand Line&#xff09;。当攻击者在远程PC上拿到meterpreter会话之后&#xff0c;他们就可以枚举大量的系统信息&#xff0c;并利用WMI…

“教务管理系统”ER模型

将ER模型转换成逻辑数据模型 ⑴学生表&#xff08;学号&#xff0c;姓名&#xff0c;性别&#xff0c;出生日期&#xff0c;专业&#xff0c;籍贯&#xff0c;联系电话&#xff0c;班级编号&#xff09;&#xff1b; ⑵课程表&#xff08;课程编号&#xff0c;课程名称&#…

【MySQL必知必会】 范式 | ER模型

范式 第一范式 第一范式要求&#xff1a;所有的字段都是基本数据字段&#xff0c;不可进一步拆分。 第二范式 第二范式&#xff1a;在满足第一范式的基础上&#xff0c;还要满足数据表里的每一条数据记录&#xff0c;都是可唯一标识的。而且所有字段&#xff0c;都必须完…