linux 设备目录/dev 学习

文章目录

    • [一. 核心概念:一切皆文件](#一. 核心概念:一切皆文件)
    • [二. 设备文件的类型](#二. 设备文件的类型)
      • [2.1. 字符设备 (Character Devices)](#2.1. 字符设备 (Character Devices))
      • [2.2. 块设备 (Block Devices)](#2.2. 块设备 (Block Devices))
    • [三. `/dev` 中常见的关键设备文件详解](#三. /dev 中常见的关键设备文件详解)
    • [四. `/dev` 的管理机制:udev](#四. /dev 的管理机制:udev)
    • [五. 实用操作示例](#五. 实用操作示例)
      • [5.1. 查看设备文件类型](#5.1. 查看设备文件类型)
      • [5.2. 屏蔽命令输出(使用 /dev/null)](#5.2. 屏蔽命令输出(使用 /dev/null))
      • [5.3. 创建一个大文件(使用 /dev/zero)](#5.3. 创建一个大文件(使用 /dev/zero))
      • [5.4. 挂载 ISO 镜像(使用 /dev/loop)](#5.4. 挂载 ISO 镜像(使用 /dev/loop))
      • [5.5. 查看磁盘分区](#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 的服务状态:

bash 复制代码
systemctl status systemd-udevd

五. 实用操作示例

5.1. 查看设备文件类型

bash 复制代码
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)

bash 复制代码
# 将标准输出和错误输出都丢进黑洞
find / -name "test.txt" > /dev/null 2>&1

5.3. 创建一个大文件(使用 /dev/zero)

bash 复制代码
# 创建一个 1GB 的空文件,全部填充为 0
dd if=/dev/zero of=./bigfile.img bs=1M count=1024

5.4. 挂载 ISO 镜像(使用 /dev/loop)

bash 复制代码
# 将 ubuntu.iso 挂载到 /mnt/iso
sudo mount -o loop ubuntu.iso /mnt/iso
# 系统会自动分配一个 /dev/loopX 设备

5.5. 查看磁盘分区

bash 复制代码
lsblk
# 或
fdisk -l
# 这些命令本质上是在读取 /dev/sdX 等块设备的信息

六. 注意事项

⚠️ 不要随意删除 /dev 下的文件!

  • 虽然 udev 可以重新创建设备文件,但手动删除可能导致正在运行的服务(如数据库、Web 服务器)无法访问硬件,导致系统崩溃或服务中断。
  • 严禁/dev/sda 等块设备进行 rm 操作(虽然 rm 删的是文件节点,但误操作格式化 mkfs 或 dd 写入会销毁数据)。

⚠️ 权限问题

  • 大多数设备文件属于 root 用户或特定组(如 disk, tty, audio)。
  • 普通用户通常只能访问与自己相关的设备(如 /dev/tty1),访问硬盘设备通常需要 sudo 权限。

相关推荐
红茶要加冰1 小时前
三、条件测试
linux·运维·服务器
爱喝水的鱼丶1 小时前
SAP-ABAP:第二篇:实操避坑篇——ABAP Hello World程序创建、语法校验到调试运行全流程指南
运维·服务器·数据库·学习·sap·abap
xhbh6661 小时前
主机端口映射完全教程:路由器端口转发+云安全组配置+虚拟机NAT转发
服务器·网络·智能路由器·端口映射·映射
wanderist.1 小时前
完美解决VS Code/Cursor远程连接报错:远程主机不满足运行 VS Code 服务器的先决条件(附AI编程最佳实践)
运维·服务器·ssh·ai编程
wanhengidc1 小时前
服务器 科学技术
运维·服务器·安全·web安全
韩明君1 小时前
Debian12安装RabittMQ 4.3.0
linux·debian·高并发·debian12·rabittmq
雨的旋律20991 小时前
keepalived + LVS DR
服务器·网络·lvs
晓翔仔1 小时前
从零搭建自己的网站 AI 助手:阿里云百炼 + 云服务器部署全教程
服务器·人工智能·阿里云·token·ai助手