Linux 命令:dd

Linux dd 命令:从基础到高级(结构化学习指南)

  • dd 是 Linux 核心命令,核心功能是按块复制数据,支持格式转换、设备读写、镜像制作等场景,因参数灵活且功能强大,是运维/开发必备技能。以下按「基础→进阶→实战」结构化拆解,兼顾入门理解与生产应用。
  • 资料合集:https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a

一、核心基础(必掌握)

1. 命令本质

  • 作用:从 if(输入文件)读取数据,按指定规则处理后写入 of(输出文件)
  • 核心逻辑:dd if=输入 of=输出 [参数]
  • 注意:无备份时慎用!of 指定的文件/设备会被直接覆盖

2. 基础参数(高频必记)

参数 作用 示例值
if=FILE 输入源(文件/设备,如 /dev/sda、test.txt) if=/dev/zero
of=FILE 输出目标(文件/设备,如 /dev/sdb、output.img) of=test.img
bs=N 单次读写块大小(默认 512 字节),推荐用 K/M/G 单位 bs=4M(4兆字节)
count=N 读取的块数(总大小 = bs × count) count=1000
skip=N 跳过输入源的前 N 个块 skip=10(跳过前10块)
seek=N 输出时跳过前 N 个块(仅对文件有效) seek=5(写入前跳过5块)
status=LEVEL 输出日志级别(none=不输出,noxfer=不显示传输统计) status=none

3. 入门示例(快速上手)

(1)复制文件(替代 cp,支持大文件/设备)
bash 复制代码
# 复制 test.txt 到 test_copy.txt,块大小 4M(复制速度更快)
dd if=test.txt of=test_copy.txt bs=4M status=none
(2)创建空文件(替代 touch,支持指定大小)
bash 复制代码
# 创建 1G 空文件(/dev/zero 提供无限空字符)
dd if=/dev/zero of=1G_file.img bs=1G count=1 status=none
(3)测试磁盘读写速度(常用性能测试)
bash 复制代码
# 测试写入速度(生成临时文件后删除)
dd if=/dev/zero of=temp.img bs=100M count=10 oflag=direct && rm -f temp.img
# 测试读取速度(从空设备 /dev/null 读取,仅测磁盘读取)
dd if=/dev/sda1 of=/dev/null bs=100M count=10 iflag=direct status=none

二、进阶用法(工作场景高频)

1. 设备操作(U盘/硬盘/镜像)

(1)制作系统镜像(如 Ubuntu 安装U盘)
bash 复制代码
# 将 ubuntu.iso 写入 /dev/sdb(U盘设备,需先 umount 分区)
sudo dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress && sync
# sync:确保数据写入设备(避免拔U盘时数据丢失)
(2)备份/恢复分区(灾难恢复必备)
bash 复制代码
# 备份 /dev/sda1 分区到镜像文件
sudo dd if=/dev/sda1 of=sda1_backup.img bs=4M status=progress
# 从镜像恢复分区(注意:会覆盖目标分区所有数据!)
sudo dd if=sda1_backup.img of=/dev/sda1 bs=4M status=progress

2. 数据转换(格式/编码处理)

(1)转换文件编码(如 ASCII→UTF-8,需结合 iconv)
bash 复制代码
# 将 GBK 编码文件转为 UTF-8(conv=ucs2 指定编码格式)
dd if=gbk_file.txt of=utf8_file.txt conv=ucs2 && iconv -f UCS-2 -t UTF-8 utf8_file.txt -o utf8_file.txt
(2)去除文件空白字符(清理无效数据)
bash 复制代码
# 去除文件中的空行和制表符(conv=stripall)
dd if=raw.txt of=clean.txt conv=stripall status=none

3. 高级参数(优化性能/特殊场景)

(1)oflag/iflag 优化(提升读写效率)
bash 复制代码
# 直接读写设备(绕过系统缓存,适合磁盘测试/镜像写入)
dd if=input.img of=/dev/sdb bs=4M oflag=direct iflag=direct
  • 常用 flag:direct(直接IO)、sync(同步IO)、nonblock(非阻塞IO)
(2)稀疏文件(节省磁盘空间)
bash 复制代码
# 创建 100G 稀疏文件(实际占用空间为0,写入数据后才占用)
dd if=/dev/null of=sparse_file.img bs=1G seek=100 status=none
# 查看实际占用空间(du -sh 显示真实大小,ls -lh 显示逻辑大小)
du -sh sparse_file.img  # 输出:0B

三、实战技巧(避坑+效率提升)

1. 常见坑与解决方案

(1)设备名错误导致数据丢失
  • 避坑:用 lsblk 或 fdisk -l 确认设备名(如 /dev/sdb 是U盘,/dev/sda 是硬盘)
  • 示例:lsblk 输出中,U盘通常标注为 sdX(如 sdb),分区为 sdX1
(2)复制速度慢
  • 优化:增大 bs(如 4M/8M,默认 512 字节太慢),加 status=progress 查看进度
  • 示例:dd if=large.img of=/dev/sdc bs=8M status=progress
(3)中途中断后续传
  • 方法:用 skip(跳过已复制的块)+ 已复制大小计算

  • 示例:已复制 2G,bs=4M → 已复制块数=2G/4M=512 → 续传命令:

    bash 复制代码
    dd if=large.img of=/dev/sdc bs=4M skip=512 status=progress

2. 实用组合命令

(1)压缩备份分区(节省空间)
bash 复制代码
# 备份分区并通过 gzip 压缩(比单独备份小 50%+)
sudo dd if=/dev/sda1 bs=4M | gzip -c > sda1_backup.img.gz
# 解压恢复
gunzip -c sda1_backup.img.gz | sudo dd of=/dev/sda1 bs=4M status=progress
(2)远程复制设备/文件(跨服务器)
bash 复制代码
# 从服务器 A 复制 /dev/sda1 到服务器 B 的 /dev/sdb1(通过 ssh 传输)
sudo dd if=/dev/sda1 bs=4M | ssh user@serverB "sudo dd of=/dev/sdb1 bs=4M status=progress"

四、核心总结(快速回顾)

  1. 核心场景:文件复制、设备镜像、分区备份、性能测试
  2. 必记参数 :if/of(输入输出)、bs(块大小)、count(块数)、status(日志)
  3. 安全原则:操作设备时先 umount 分区,确认设备名无误,重要数据先备份
  4. 效率优化 :大文件/设备用 bs=4M+,加 direct 绕过缓存,progress 查看实时进度

通过「基础参数→入门示例→进阶场景→实战技巧」的逻辑,可快速掌握 dd 命令的核心用法,结合实际场景练习(如制作U盘、测试磁盘速度),即可熟练应用于工作中。

相关推荐
小小龙学IT7 分钟前
ROS2 安装完全指南(Ubuntu 版):从零开始到跑通第一个节点本文
linux·运维·ubuntu
Ruiery9 分钟前
Linux 6.6内核 CPU 深度解析(十二):SMT 进阶 — core scheduling 与共享算力的负载平衡
linux·运维·服务器
影视飓风TIM10 分钟前
Linux 进程虚拟地址空间详解
linux·算法
硅基手札20 分钟前
【Linux内核专栏 12】VFS 与文件系统
linux
水饺编程32 分钟前
第1章:开发环境搭建,在 Windows 中安装 VS 2019
linux·c语言·汇编·visual studio
supabc12343 分钟前
Celium:连接 Windows、Mac、Linux 与 Android,让远程访问和设备管理更简单
android·linux·windows·macos·远程访问·网络管理·celium
ShineWinsu1 小时前
对于Redis:RDB持久化的解析
linux·数据库·redis·缓存·面试·持久化·rdb
Ruiery10 小时前
Linux 6.6内核 CPU 深度解析(七):调度器启动 — 从单核到多核,调度器分阶段点亮
linux·运维·服务器
50万马克的面包10 小时前
CSDN-栈队列数组-知识点整理
linux·运维·服务器
wjkjpcba11 小时前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂