在 Linux 系统中,"设备"(Device)是指与计算机硬件交互的抽象接口,通常以文件形式存在于 /dev
目录下。Linux 遵循"一切皆文件"的设计哲学,通过设备文件实现对硬件(如磁盘、键盘、打印机等)或虚拟设备(如随机数生成器)的访问。
块设备(Block Devices)
/dev/sda
(第一块 SATA 硬盘)、/dev/nvme0n1
(NVMe SSD)/dev/sda1
(第一块 SATA 硬盘的第一个分区)/dev/loop0
(回环设备)lsblk
, fdisk
, dd
(用于块设备读写)字符设备(Character Devices)
/dev/tty1
(第一个虚拟终端)/dev/input/mouse0
/dev/random
、/dev/urandom
/dev/null
(丢弃所有写入的数据)网络设备(Network Devices)
/dev
下的文件。ifconfig
, ip addr
, ethtool
特殊设备
/dev/zero
(提供无限的空字符)、/dev/pts/0
(伪终端)。/dev/mapper/vg0-lv_root
。设备文件位置
所有设备文件位于 /dev
目录,由 udev
(用户空间设备管理器)动态创建和管理。
查看设备信息
ls -l /dev
:查看设备文件及其类型(b
=块设备,c
=字符设备)。lsblk
:列出所有块设备(磁盘、分区)。lspci
:查看 PCI 设备(如显卡、网卡)。lsusb
:查看 USB 设备。设备的主/次设备号
每个设备文件关联两个数字:
8
表示 SCSI 磁盘)。$ ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 May 10 10:00 /dev/sda # 主设备号=8, 次设备号=0
手动创建设备文件
使用 mknod
命令(需 root 权限):
mknod /dev/mydevice c 200 0 # 创建主设备号=200的字符设备
挂载磁盘分区
mount /dev/sdb1 /mnt/data # 将 /dev/sdb1 挂载到 /mnt/data
写入数据到设备
echo "test" > /dev/tty1 # 向终端发送文本(需权限)
dd if=/dev/zero of=/dev/sdb bs=1M # 用零填充整个磁盘(谨慎操作!)
监控设备事件
udevadm monitor --kernel # 查看内核发出的设备事件
udev
:动态管理 /dev
下的设备文件,响应硬件插拔事件。systemd-udevd
:现代 Linux 中管理设备的守护进程。modprobe
:加载设备驱动模块(如 modprobe usb-storage
)。/dev/sda
)可能导致数据丢失,需谨慎。/sys
、/proc
)也提供设备信息(如 /sys/class/net/eth0
)。通过理解 Linux 设备模型,可以更高效地管理硬件、排查问题或开发底层应用。