Linux如何查看设备的设备号及详细信息?

在Linux系统中,设备号是内核用于标识和管理硬件设备的唯一标识符,由主设备号(Major Number)和次设备号(Minor Number)组成,主设备号用于标识设备类型(如磁盘、终端等),对应设备的驱动程序;次设备号用于区分同一类型下的不同设备实例(如不同磁盘分区、多个串口等),查看设备号是系统管理和驱动开发中的基础操作,本文将详细介绍多种查看设备号的方法及适用场景。

linux如何查看设备号

通过lsblk命令查看块设备设备号

lsblk(list block devices)是Linux中查看块设备信息的常用命令,以树状结构展示磁盘、分区等设备信息,其中包含主设备号(MAJ)和次设备号(MIN)。

基本用法

lsblk

常用参数

  • -l:以列表形式输出(默认为树状结构);
  • -f:显示文件系统信息(如UUID、挂载点);
  • -o:指定输出列,如lsblk -o NAME,MAJ:MIN,FSTYPE,MOUNTPOINT

输出示例

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  100G  0 disk 
├─sda1   8:1    0   50G  0 part /  
└─sda2   8:2    0   50G  0 part /home  
sr0     11:0    1 1024M  0 rom  

MAJ:MIN列直接显示主设备号和次设备号,如sda的主设备号为8,次设备号为0;sda1的主设备号为8,次设备号为1。

适用场景

适用于快速查看磁盘、分区、光驱等块设备的设备号,尤其适合需要同时了解设备挂载点、文件系统信息的场景。

通过blkid命令查看块设备属性

blkid主要用于查看块设备的属性(如UUID、文件系统类型),但也可通过解析设备路径间接获取设备号。

基本用法

blkid /dev/sda

输出示例

/dev/sda: UUID="12345678-1234-1234-1234-1234567890ab" TYPE="ext4" 

虽然blkid不直接显示设备号,但结合ls -l可查看设备文件的设备号:

ls -l /dev/sda

输出:

brw-rw---- 1 root disk 8, 0 Jan 1 10:00 /dev/sda

8, 0分别表示主设备号和次设备号。

适用场景

适用于需要同时获取块设备属性(如UUID)和设备号的场景,尤其当设备已挂载或格式化时。

通过fdisk命令查看磁盘分区设备号

fdisk是磁盘分区管理工具,可查看磁盘及分区的详细信息,包括设备号。

基本用法

sudo fdisk -l

输出示例

Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: Virtual Disk  
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512/512 bytes
I/O size (minimum/optimal): 512/512 bytes
Disklabel type: gpt
Device     Start      End  Sectors Size Type
/dev/sda1   2048 104857599 104855552  50G Linux filesystem
/dev/sda2 104857600 209715199 104857600  50G Linux filesystem

结合lsblkls -l可进一步确认分区的设备号,如/dev/sda1的主设备号与sda相同(8),次设备号为1。

适用场景

适用于磁盘分区管理场景,尤其当需要查看分区表结构及设备号对应关系时。

linux如何查看设备号

通过dmesg命令查看内核日志中的设备号

dmesg用于显示内核环缓冲区中的消息,设备驱动加载或设备注册时,内核会输出包含设备号的信息。

基本用法

dmesg | grep "device"

输出示例

[    0.123456] sd 0:0:0:0: [sda] 209715200 512-byte logical blocks: 107 GB/100 GiB (1000*1000*1000 bytes)
[    0.234567] sd 0:0:0:0: [sda] Attached SCSI disk
[    1.345678] device-mapper: verity: 8:0: Using device 8:1 for hash device

sd 0:0:0:0中的0:0对应主设备号和次设备号(需结合/proc/devices进一步确认)。

适用场景

适用于调试驱动问题或查看设备动态注册时的设备号信息,尤其适合字符设备或驱动开发场景。

通过/proc/devices查看已注册设备的主设备号

/proc/devices是内核导出的虚拟文件,记录了当前已注册的字符设备和块设备的主设备号及设备名称。

查看字符设备

cat /proc/devices | grep "Character"

查看块设备

cat /proc/devices | grep "Block"

输出示例

Character devices:
  4 tty
  5 /dev/tty
  10 misc
  189 ptm
Block devices:
  8 loop
  8 sd
  11 sr
  259 dm

左侧数字为主设备号,右侧为设备类型或名称,块设备sd(磁盘)的主设备号为8,字符设备tty(终端)的主设备号为4。

获取次设备号

/proc/devices不显示次设备号,需结合ls -l /dev查看具体设备文件的设备号:

ls -l /dev/ttyS0

输出:

crw-rw---- 1 root dialout 4, 64 Jan 1 10:00 /dev/ttyS0

4是主设备号(与/proc/devices中的tty一致),64是次设备号。

适用场景

适用于查看内核中已注册的设备类型及主设备号,尤其适合驱动开发时确认设备号是否被占用。

通过udevadm查看设备详细信息

udevadm是udev的管理工具,可查询设备的详细属性,包括设备号。

基本用法

udevadm info --query=all --name=/dev/sda

输出示例

P: /devices/pci0000:00/0000:00:07.0/virtio0/block/sda
N: sda
L: 0
S: disk
E: DEVNAME=/dev/sda
E: DEVPATH=/devices/pci0000:00/0000:00:07.0/virtio0/block/sda
E: DEVTYPE=disk
E: MAJOR=8
E: MINOR=0
E: SUBSYSTEM=block

MAJOR=8MINOR=0分别表示主设备号和次设备号。

linux如何查看设备号

适用场景

适用于需要获取设备完整属性(如设备路径、子系统、设备号)的场景,尤其适合udev规则编写或设备调试。

查看字符设备号的特殊方法

字符设备通常位于/dev目录下(如/dev/tty/dev/null),可通过ls -l直接查看设备号:

ls -l /dev/null

输出:

crw-rw-rw- 1 root root 1, 3 Jan 1 10:00 /dev/null

1是主设备号(字符设备misc的主设备号为1),3是次设备号。

适用场景

适用于查看终端、串口、字符型设备文件的设备号,操作简单直观。

不同查看方法的对比总结

以下表格总结了上述方法的适用场景及特点:

方法 适用设备类型 是否显示次设备号 优点 缺点
lsblk 块设备 直观,可同时查看挂载信息 不适用于字符设备
blkid+ls -l 块设备 可获取设备属性及设备号 需组合命令
fdisk -l 块设备(分区) 间接(需结合其他) 可查看分区结构 不直接显示设备号
dmesg 字符/块设备 间接(需解析) 可查看动态注册信息 日志量大,需过滤
/proc/devices 字符/块设备 仅主设备号 显示内核已注册设备类型 无次设备号,需结合ls -l
udevadm 字符/块设备 属性全面,适合调试 命令较长
ls -l /dev/xxx 字符设备 简单直接 需已知设备文件路径

相关问答FAQs

Q1: 如何通过设备号(如主设备号8,次设备号0)定位对应的设备文件?
A: 可通过find命令在/dev目录下搜索设备号匹配的文件:

find /dev -type b -printf "%M %n %pn" 2>/dev/null | grep "8, 0"

或使用stat命令查看设备文件的设备号:

find /dev -name "sda" -exec stat -c "%N %t %T" {} ;

%t%T分别表示主设备号和次设备号(十六进制),可通过printf "%d %d" 0x$t 0x$T转换为十进制。

Q2: 主设备号和次设备号在驱动开发中有什么作用?如何申请设备号?
A: 主设备号用于关联设备驱动程序(如注册驱动时指定主设备号),次设备号用于区分驱动管理的多个设备实例(如同一驱动的多个磁盘分区)。
申请设备号可通过register_chrdev()(字符设备)或alloc_blkdev()(块设备)动态申请,或通过mknod手动创建设备文件(需指定主次设备号),静态分配可通过查看/proc/devices选择未被占用的主设备号,动态分配则由内核自动分配并返回设备号。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/20068.html

(0)
酷番叔酷番叔
上一篇 2025年8月30日 05:55
下一篇 2025年8月30日 06:11

相关推荐

  • Linux线程唤醒如何优化多线程性能?

    线程唤醒的本质当线程因等待资源(如锁、I/O操作或条件变量)而进入休眠状态时,操作系统会将其移出运行队列,唤醒则是通过特定事件(如资源就绪)重新激活线程,将其加入就绪队列等待CPU调度,这一过程由内核调度器管理,确保线程状态从TASK_INTERRUPTIBLE(可中断睡眠)或TASK_UNINTERRUPTI……

    2025年7月29日
    4000
  • Linux不重启还原系统的具体操作方法是什么?

    Linux系统在运行过程中,常因配置误操作、软件包冲突或服务异常等问题需要还原状态,与重启还原不同,不重启的动态还原能避免服务中断,适用于生产环境的高可用需求,本文将从配置文件、软件包、服务状态、内核参数及用户数据等方面,详细介绍Linux不重启系统还原的具体操作方法,配置文件还原配置文件错误是系统异常的常见原……

    2025年9月20日
    1900
  • Linux环境下如何有效屏蔽或过滤warning提示信息?

    在Linux系统中,warning通常提示非致命问题或潜在风险,但过多的warning可能干扰关键信息查看,合理屏蔽warning需结合具体场景,避免盲目过滤导致重要问题被忽略,以下是常见场景下的屏蔽方法及注意事项,命令行工具中的warning屏蔽编译型语言(如C/C++)的编译器(如gcc/g++)和构建工具……

    2025年8月24日
    3200
  • 知道ip如何登录linux

    Windows系统,打开命令提示符输入ssh 用户名@IP地址;

    2025年8月10日
    3300
  • Linux系统如何查看电脑的详细重启时间记录?

    在Linux系统中,查看电脑重启记录是系统管理和故障排查的重要操作,通过记录可以分析系统稳定性、定位启动异常等问题,以下是几种常用的查看方法,涵盖不同场景和需求,通过系统日志文件查看重启记录Linux系统会将启动过程中的关键信息记录在日志文件中,不同发行版的日志文件位置略有差异:Debian/Ubuntu:主要……

    2025年10月7日
    1000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信