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)
酷番叔酷番叔
上一篇 2小时前
下一篇 1小时前

相关推荐

  • 如何专业查看Linux硬盘信息?

    基础命令:快速获取硬盘概览lsblk(推荐首选)列出所有块设备(硬盘、分区)的树状结构:lsblk输出解读:NAME(设备名,如sda)、SIZE(容量)、TYPE(disk/part)、MOUNTPOINT(挂载点),优势:无需root权限,清晰展示设备层级关系,df(查看磁盘使用率)显示文件系统的磁盘空间占……

    2025年7月31日
    1500
  • linux 如何高效学习命令行、管理文件及解决系统常见问题?

    Linux作为开源操作系统的代表,凭借其稳定性、安全性和灵活性,广泛应用于服务器、开发环境、嵌入式系统等领域,掌握Linux的基本操作和高级技巧,能显著提升工作效率,本文将围绕“Linux如何”展开,详细介绍文件管理、进程控制、网络配置、软件安装及Shell脚本等核心操作,并通过表格对比关键命令,帮助读者快速上……

    22小时前
    200
  • 如何查看linux网络功能

    使用ifconfig查看网络接口信息,ip addr显示IP地址,`

    2025年8月9日
    1000
  • 为什么90%的人工作效率低下?

    在Linux系统中,查看端口与进程的关联是系统管理、网络调试和安全审计的常见需求,以下是几种权威可靠的方法,均基于Linux原生工具,操作前请确保拥有sudo权限或root用户身份:使用 ss 命令(推荐)ss(Socket Statistics)是netstat的现代替代工具,执行效率更高,查看所有监听端口及……

    2025年7月8日
    2700
  • linux下如何查看硬盘

    Linux 下,可使用“df -h”查看硬盘使用情况,“lsblk

    2025年8月15日
    900

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信