linux 设备目录/dev 学习
文章目录
- 一. 核心概念:一切皆文件
- 二. 设备文件的类型
- 2.1. 字符设备 (Character Devices)
- 2.2. 块设备 (Block Devices)
- 三. `/dev` 中常见的关键设备文件详解
- 四. `/dev` 的管理机制:udev
- 五. 实用操作示例
- 5.1. 查看设备文件类型
- 5.2. 屏蔽命令输出(使用 /dev/null)
- 5.3. 创建一个大文件(使用 /dev/zero)
- 5.4. 挂载 ISO 镜像(使用 /dev/loop)
- 5.5. 查看磁盘分区
- 六. 注意事项
在 Linux 系统中,
/dev目录是一个极其特殊且核心的目录。它的全称是Device(设备)。一. 核心概念:一切皆文件
Linux 遵循“一切皆文件”的设计哲学。/dev目录下存放的不是普通的数据文件,而是设备文件。
- 作用:它是内核与硬件设备(或虚拟设备)之间的接口。
- 原理:当程序需要读取硬盘、键盘输入或向屏幕输出时它不需要直接操作硬件电路,而是像读写普通文件一样,对
/dev下的特定文件进行open()、read()、write()操作。内核会通过设备驱动程序将这些操作转换为具体的硬件指令。
二. 设备文件的类型
在/dev中,设备文件主要分为两大类:
2.1. 字符设备 (Character Devices)
- 标识:
ls -l显示时,第一个字符为c。 - 特点:数据以字符流的形式逐个传输,不支持随机访问(不能_seek_)。
- 典型例子:
/dev/tty:终端设备。/dev/null:空设备(黑洞)。/dev/random:随机数生成器。/dev/console:系统控制台。
2.2. 块设备 (Block Devices)
- 标识:
ls -l显示时,第一个字符为b。 - 特点:数据以块(block,通常为 512 字节或 4KB)为单位传输,支持随机访问(可以跳转到任意位置读写)。
- 典型例子:
/dev/sda:第一块 SATA/SCSI 硬盘。/dev/nvme0n1:NVMe 固态硬盘。/dev/loop0:回环设备(用于挂载 ISO 镜像等)。
💡注意:现代 Linux 系统中,还有网络设备(如 eth0),但它们通常不直接在
/dev下体现为文件,而是通过 socket 接口操作。
三./dev中常见的关键设备文件详解
| 设备文件 | 类型 | 说明 | 常见用途 |
|---|---|---|---|
/dev/autofs | 字符 | 自动挂载 | Linux 内核模块和用户空间守护进程(daemon),用于自动挂载文件系统 |
/dev/bsg/x:x:x:x | 字符 | Block SCSI Generic(BSG)设备 | 允许用户空间程序直接发送 SCSI 命令到 SCSI 或 SAS 设备,而无需通过传统的 SCSI 层抽象 |
/dev/null | 字符 | 空设备 / 黑洞 | 任何写入它的数据都会被丢弃;读取它立即返回 EOF。常用于屏蔽命令输出:command > /dev/null 2>&1 |
/dev/zero | 字符 | 零发生器 | 读取它会无限返回\0(空字符)。常用于创建指定大小的空文件:dd if=/dev/zero of=test.img bs=1M count=100 |
/dev/full | 字符 | 满设备 | 写入它会返回“磁盘空间不足”错误;读取它返回无限多的\0。用于测试程序处理磁盘满的情况。 |
/dev/random | 字符 | 真随机数 | 从环境噪声中收集熵生成随机数。如果熵池不足,读取会阻塞等待。用于高安全性加密密钥生成。 |
/dev/urandom | 字符 | 伪随机数 | 非阻塞随机数生成器。如果熵不足,会使用算法补充。速度快,适用于大多数非极高安全场景。 |
/dev/tty | 字符 | 当前终端 | 指向当前进程控制的终端。例如在脚本中向当前用户屏幕发消息。 |
/dev/console | 字符 | 系统控制台 | 系统启动信息和内核消息输出的地方。 |
/dev/sdX | 块 | SCSI/SATA 硬盘 | sda是第一块盘,sdb是第二块…sda1是第一个分区。 |
/dev/nvmeXnY | 块 | NVMe 硬盘 | 现代高速 SSD 的命名方式。nvme0n1表示第一个控制器的第一个命名空间。 |
/dev/loopX | 块 | 回环设备 | 将普通文件模拟成块设备。常用于挂载.iso镜像文件。 |
四./dev的管理机制:udev
在早期的 Linux 系统中,/dev下的文件是静态创建的(通过mknod命令),数量固定且庞大。
现代 Linux 使用udev设备管理器:
- 动态创建:当内核检测到新硬件插入(如插入 U 盘)时,
udev会自动在/dev下创建对应的设备文件。 - 动态删除:当硬件移除时,设备文件自动消失。
- 规则定制:管理员可以通过
/etc/udev/rules.d/自定义规则,例如:插入特定 USB 设备时,自动将其映射为/dev/my_usb并设置权限。
你可以查看udev的服务状态:
systemctl status systemd-udevd五. 实用操作示例
5.1. 查看设备文件类型
ls-l/dev/sda /dev/null /dev/random# 输出示例:# brw-rw---- 1 root disk 8, 0 Apr 10 10:00 /dev/sda # b = 块设备# crw-rw-rw- 1 root root 1, 3 Apr 10 10:00 /dev/null # c = 字符设备# crw-rw-rw- 1 root root 1, 8 Apr 10 10:00 /dev/random # c = 字符设备5.2. 屏蔽命令输出(使用 /dev/null)
# 将标准输出和错误输出都丢进黑洞find/-name"test.txt">/dev/null2>&15.3. 创建一个大文件(使用 /dev/zero)
# 创建一个 1GB 的空文件,全部填充为 0ddif=/dev/zeroof=./bigfile.imgbs=1Mcount=10245.4. 挂载 ISO 镜像(使用 /dev/loop)
# 将 ubuntu.iso 挂载到 /mnt/isosudomount-oloop ubuntu.iso /mnt/iso# 系统会自动分配一个 /dev/loopX 设备5.5. 查看磁盘分区
lsblk# 或fdisk-l# 这些命令本质上是在读取 /dev/sdX 等块设备的信息六. 注意事项
⚠️不要随意删除/dev下的文件!
- 虽然
udev可以重新创建设备文件,但手动删除可能导致正在运行的服务(如数据库、Web 服务器)无法访问硬件,导致系统崩溃或服务中断。 - 严禁对
/dev/sda等块设备进行rm操作(虽然 rm 删的是文件节点,但误操作格式化mkfs或 dd 写入会销毁数据)。
⚠️权限问题
- 大多数设备文件属于
root用户或特定组(如disk,tty,audio)。 - 普通用户通常只能访问与自己相关的设备(如
/dev/tty1),访问硬盘设备通常需要sudo权限。
