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系统中如何获取指定进程的准确名称?

    在Linux系统中,获取进程名是系统管理、调试和监控中的基础操作,进程名(Process Name)通常指进程的可执行文件名或用户定义的标识符,用于区分不同类型的进程,本文将详细介绍多种获取进程名的方法,涵盖基础命令、系统文件、专用工具等场景,并对比不同方法的适用场景与优缺点,基础命令法:ps与top/htop……

    2025年9月30日
    6000
  • Linux如何查看桌面环境及文件?

    查看当前桌面环境类型方法1:通过环境变量查询(推荐)echo $XDG_CURRENT_DESKTOP输出示例:GNOME、KDE、XFCE等原理:该变量由桌面环境自动设置,直接反映当前会话的桌面类型,方法2:检查进程列表ps -e | grep -E "gnome|kde|mate|cinnamon……

    2025年6月27日
    10500
  • linux如何去掉大小写限制

    Linux 中,可通过修改 /etc/ssh/sshd_config 文件,

    2025年8月17日
    7300
  • Linux下如何进入Oracle RMAN?

    在Linux环境下进入Oracle RMAN需确保环境变量配置正确,通过终端以SYSDBA权限执行rman target /命令连接目标数据库进行操作。

    2025年8月5日
    8400
  • EasyBCD如何安装Linux系统?引导配置步骤是什么?

    EasyBCD是一款主要用于Windows系统引导配置的工具,它可以帮助用户管理多系统启动项、修复引导问题等,但需要注意的是,EasyBCD本身并不能直接“安装”Linux系统——Linux系统的安装需要通过官方安装介质(如U盘)完成,而EasyBCD的作用更多是在Linux安装后,辅助配置Windows与Li……

    2025年9月27日
    5800

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信