Linux 命令:dd

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

  • dd 是 Linux 核心命令,核心功能是按块复制数据,支持格式转换、设备读写、镜像制作等场景,因参数灵活且功能强大,是运维/开发必备技能。以下按「基础→进阶→实战」结构化拆解,兼顾入门理解与生产应用。
  • 资料合集:https://pan.quark.cn/s/6fe3007c3e95https://pan.quark.cn/s/561de99256a5https://pan.quark.cn/s/985f55b13d94https://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)设备名错误导致数据丢失
  • 避坑:用 lsblkfdisk -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盘、测试磁盘速度),即可熟练应用于工作中。

相关推荐
小Tomkk26 分钟前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
赌博羊26 分钟前
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32‘ not found
linux·运维·gnu
木卫二号Coding28 分钟前
第七十九篇-E5-2680V4+V100-32G+llama-cpp编译运行+Qwen3-Next-80B
linux·llama
getapi37 分钟前
Ubuntu 22.04 服务器的系统架构是否为 amd64 x86_64
linux·服务器·ubuntu
消失的旧时光-19431 小时前
Linux 入门核心命令清单(工程版)
linux·运维·服务器
艾莉丝努力练剑1 小时前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
Trouvaille ~1 小时前
【Linux】TCP Socket编程实战(一):API详解与单连接Echo Server
linux·运维·服务器·网络·c++·tcp/ip·socket
旖旎夜光2 小时前
Linux(13)(中)
linux·网络
威迪斯特3 小时前
CentOS图形化操作界面:理论解析与实践指南
linux·运维·centos·组件·图形化·桌面·xserver
一方热衷.3 小时前
在线安装对应版本NVIDIA驱动
linux·运维·服务器