linux dd命令详解

dd 是一个功能强大的 Unix/Linux 命令行工具,用于低级别的字节流操作,常用于创建、复制、转换和处理文件或设备数据。它在 macOS 和 Linux 系统上都可用,但在 macOS 上有一些细微差异。本文将详细讲解 dd 命令的用法,包括参数、常见用例、注意事项以及 macOS 特定的细节。

1. dd 命令概述

dd(data duplicator)是一个低级工具,可以从输入源(如文件、设备或标准输入)读取数据,并将其写入输出目标(如文件、设备或标准输出)。它的灵活性使其适用于多种场景,如创建固定大小的文件、备份磁盘、转换数据格式等。由于其直接操作字节流的特性,使用时需谨慎,以免覆盖重要数据。

基本语法

dd [选项]

常见选项包括:

  • if=FILE:指定输入文件或设备(如 /dev/zero/dev/urandom)。
  • of=FILE:指定输出文件或设备。
  • bs=BYTES:设置块大小(如 1k1M1G)。
  • count=N:指定要复制的块数。
  • skip=N:跳过输入文件开头的 N 个块。
  • seek=N:跳过输出文件开头的 N 个块。
  • conv=CONVERSIONS:指定数据转换选项(如 notruncsync)。
  • status=LEVEL:控制进度输出(nonenoxferprogress)。

2. 核心参数详解

以下是 dd 的主要参数及其作用:

if(输入文件)

  • 指定数据来源,默认为标准输入(/dev/stdin)。
  • 示例:
    • /dev/zero:生成全零字节流。
    • /dev/urandom:生成随机字节流。
    • 普通文件:如 input.txt
    • 设备:如 /dev/sda(磁盘设备)。

of(输出文件)

  • 指定数据写入目标,默认为标准输出(/dev/stdout)。
  • 示例:
    • 普通文件:如 output.bin
    • 设备:如 /dev/sdb(U 盘)。
    • /dev/null:丢弃数据(常用于测试)。

bs(块大小)

  • 定义每次读写的块大小,单位可以是字节(默认)或使用后缀:
    • k:1KB(1024 字节)
    • M:1MB(1024² 字节)
    • G:1GB(1024³ 字节)
  • 示例:bs=1M 表示每次读写 1MB。
  • 注意:macOS 的 dd 支持小写 m 和大写 M,但 Linux 更严格,推荐使用大写。

count(块数)

  • 指定复制的块数,总数据量 = bs × count
  • 示例:bs=1M count=100 表示复制 100MB 数据。

skipseek

  • skip=N:跳过输入文件开头的 N 个块。
  • seek=N:跳过输出文件开头的 N 个块。
  • 示例:skip=10 表示从输入文件的第 11 个块开始读取。

conv(转换选项)

  • 指定数据处理方式,多个选项用逗号分隔:
    • notrunc:不截断输出文件(追加而非覆盖)。
    • sync:用填充字节(如零)补齐块大小。
    • fsync:在写入完成前同步数据到磁盘。
    • nocache:避免使用缓存(Linux 特有)。
  • 示例:conv=notrunc 确保追加数据到现有文件。

status(进度输出)

  • 控制 dd 的输出信息:
    • status=progress:显示实时进度(macOS 和较新 Linux 支持)。
    • status=none:抑制所有输出。
    • status=noxfer:仅抑制传输统计信息。
  • 示例:dd if=/dev/zero of=output.bin bs=1M count=100 status=progress

3. 常见用例

以下是一些常见的 dd 使用场景,包含示例命令和说明。

3.1 创建固定大小的文件

  • 创建 100MB 的全零文件

    dd if=/dev/zero of=output.bin bs=1m count=100
    
    • if=/dev/zero:从零字节流读取。
    • of=output.bin:写入 output.bin
    • bs=1m count=100:生成 100MB 数据。
    • macOS 兼容,输出文件为 100MB。
  • 创建 100MB 的随机数据文件

    dd if=/dev/urandom of=output.bin bs=1m count=100
    
    • 使用 /dev/urandom 生成随机数据。

3.2 备份磁盘或分区

  • 备份磁盘到文件

    dd if=/dev/sda of=backup.img bs=4M
    
    • 从磁盘 /dev/sda 读取,写入 backup.img
    • bs=4M 提高效率。
  • 恢复备份到磁盘

    dd if=backup.img of=/dev/sdb bs=4M
    
    • 注意:目标磁盘会被覆盖,需谨慎!

3.3 复制文件

  • 复制文件
    dd if=input.txt of=output.txt bs=64k
    
    • 复制 input.txtoutput.txt
    • bs=64k 优化性能。

3.4 测试磁盘性能

  • 测试写入速度
    dd if=/dev/zero of=testfile bs=1M count=1000 status=progress
    
    • 写入 1GB 数据到 testfile,显示进度和速度。

3.5 创建启动盘

  • 将 ISO 写入 U 盘
    dd if=ubuntu.iso of=/dev/disk2 bs=4m status=progress
    
    • macOS 示例,disk2 为 U 盘设备(通过 diskutil list 确认)。
    • 注意:需 sudo,且目标设备会被格式化。

3.6 擦除磁盘

  • 用零填充磁盘
    dd if=/dev/zero of=/dev/disk2 bs=1m
    
    • 将整个磁盘填充为零,清除数据。

4. macOS 特定注意事项

由于你在 macOS 上使用 dd,以下是一些 macOS 特定的细节:

4.1 块大小单位

  • macOS 的 dd 支持 k(1024 字节)、m(1024² 字节)、g(1024³ 字节),大小写均可。
  • 示例:bs=1mbs=1M 均有效。

4.2 设备路径

  • macOS 的磁盘设备通常为 /dev/diskN(如 /dev/disk2)。
  • 使用 diskutil list 查看设备路径。
  • 写入设备时,可能需要卸载磁盘:
    diskutil unmountDisk /dev/disk2
    

4.3 权限问题

  • 写入设备(如 U 盘)需要 sudo
    sudo dd if=input.iso of=/dev/disk2 bs=4m
    

4.4 进度显示

  • macOS 的 dd 默认不显示进度,但较新版本(macOS 10.11 及以上)支持 status=progress
  • 替代方法:发送 SIGINFO 信号查看进度:
    1. 运行 dd 命令。
    2. Ctrl+T 查看当前状态。

4.5 性能优化

  • macOS 的 dd 默认使用缓存,可能会影响性能。
  • 使用 conv=fsync 确保数据写入磁盘,但会稍慢:
    dd if=/dev/zero of=output.bin bs=1m count=100 conv=fsync
    

5. 注意事项

  • 数据覆盖风险dd 直接操作字节流,错误的目标(如 of=/dev/sda)可能导致数据丢失。始终检查 of 参数。
  • 块大小选择:较大的 bs(如 1M4M)通常提高性能,但过大可能导致内存问题。
  • 错误处理dd 默认输出错误到 stderr,建议检查返回值:
    dd if=/dev/zero of=output.bin bs=1m count=100 && echo "Success" || echo "Failed"
    
  • macOS vs Linux:macOS 的 dd 不支持某些 Linux 专有选项(如 conv=nocache),但核心功能一致。

6. 示例:结合上下文

根据你之前的任务(创建 100MB 文件并用于 sendfile),可以用以下命令生成测试文件:

dd if=/dev/zero of=example.txt bs=1m count=100 status=progress
  • 这将在 macOS 上创建 100MB 的 example.txt,可用于你的 TCP 服务器测试。
  • 如果需要随机数据:
    dd if=/dev/urandom of=example.txt bs=1m count=100 status=progress
    

7. 高级用法

  • 管道操作

    dd if=/dev/urandom bs=1M count=100 | gzip > output.bin.gz
    
    • 生成 100MB 随机数据并压缩。
  • 部分文件复制

    dd if=input.bin of=output.bin bs=1M skip=10 count=20
    
    • 从第 10MB 开始复制 20MB 数据。
  • 转换大小写

    dd if=input.txt of=output.txt conv=ucase
    
    • 将输入文件内容转换为大写。

8. 总结

dd 是一个功能强大但需谨慎使用的工具,适合低级别数据操作。在 macOS 上,核心功能与 Linux 一致,但需注意设备路径、权限和进度显示的差异。通过合理设置 bscount,可以高效完成文件创建、备份等任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/92922.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多线程同步技术是用于协调多个线程访问共享资源或执行顺序的机制,以避免数据竞争、死锁、线程不安全等问题

多线程同步技术是用于协调多个线程访问共享资源或执行顺序的机制,以避免数据竞争、死锁、线程不安全等问题。 在提供的代码中,存在多线程操作加热板的场景,涉及锁竞争和硬件资源访问,优化多线程同步可以显著提升程序性能和稳定性。 以下是多线程同步技术的详细解释、常见…

CRMEB标准版,从创建数据表到实现最基础增删改查的实现过程

很多使用了CRMEB单商户系统的童鞋在进行二开的时候,都会遇到新建了数据表之后不知道对数据表怎么进行操作。那么,这篇文章将带你完整的实现一遍,以后就不会怕啦。一、创建数据表就以最简单的为例,创建一个学生的信息表编号姓名性别…

J2EE模式---数据访问对象模式

数据访问对象模式基础概念数据访问对象模式(Data Access Object Pattern,简称 DAO 模式)是一种结构型设计模式,其核心思想是将数据访问逻辑与业务逻辑分离,通过一个抽象层(DAO)来处理数据的持久…

【OpenCV篇】OpenCV——02day.图像预处理(1)

目录 前言 一、图像色彩空间转换 1 RGB颜色空间 2 颜色加法 3 颜色加权加法 4 HSV颜色空间 5 RGB转Gray(灰度) 二、灰度实验 1 灰度图 2 最大值法 3 平均值法 4 加权均值法 5 两个极端的灰度值 三、图像二值化处理 二值图像 1 阈值法(THRESH_BINARY) 2 反阈值…

经典IDE之Turbo C

写的程序不多,换过的 IDE 不少,本文将列举曾经用过的不同 C 语言相关的 IDE 环境,既是纪念,也是回忆。值得注意的是 IDE 的出现是为了提高开发效率,有一个相对成熟的编译环境和程序。从编程的角度来看,过分…

Go 多模块仓库标签管理教程

为了方便自己开发,自己写了个小工具:DzhGO 代码生成工具 功能特点标题 初始化项目基础结构生成插件模块代码生成模型和实体代码生成服务接口和实现代码支持 admin 和 app 两种模块类型生成项目基础目录 具体介绍看仓库: https://github.co…

IDEA 类上方注释 签名

File -->settings–>Editor–>File and Code Templates–>class新建 Class 类上方添加内容:/*** author Jagger* since ${DATE} ${TIME}*/

卫星通信终端天线对星之:参考星对星

我们在前面的文章中介绍了3种卫星通信终端的对星模式,分别是: 卫星通信终端天线的5种对星模式之一:信标跟踪 卫星通信终端天线的5种对星模式之二:功率检测型载波跟踪 卫星通信终端天线的5种对星模式之二:DVB跟踪 今…

来自麻省理工和AI制药公司 Recursion 的结构与结合亲和力预测模型Boltz-2,解决小分子药物发现的关键问题

1. Boltz-2介绍 文章来源:http://jeremywohlwend.com/assets/boltz2.pdf 开源代码来源:https://github.com/jwohlwend/boltz 该AI模型由麻省理工学院计算机科学与人工智能实验室与上市AI制药公司Recursion一起开发,双方在Boltz-1的基础之上…

从零用java实现 小红书 springboot vue uniapp(14) 集成阿里云短信验证码

从零用java实现 小红书 springboot vue uniapp(14) 集成阿里云短信验证码 移动端演示 http://8.146.211.120:8081/#/ 管理端演示 http://8.146.211.120:8088/#/ 项目整体介绍及演示 前言 在现代应用中,手机号不仅是用户的唯一标识&#xff0…

`<< EOF` 与 `<< ‘EOF‘` 与 `<< “EOF“`有无引号的区别多回答笔记250722

<< EOF 与 << EOF 与 << "EOF"有无引号的区别多回答笔记250722 实测 自测代码: # 定义变量 hello"ni hao"# 无引号 tee << EOF # 无引号 ${hello} world \n $(date) # 无引号 EOF# 单引号 tee << EOF # 单…

点击按钮滚动到底功能vue的v-on:scroll运用

使用vue自带的监听滚动功能v-on:scroll&#xff0c;滚动条变化时&#xff0c;会调用方法 checkScrollStatus&#xff0c;如果滚动条在容器底部时&#xff0c;则隐藏按钮&#xff0c;否则显示按钮&#xff0c;点击按钮能一键滚动到底部。<div class"chat-area" ref…

Linux下编译SLEPc

本文记录在Linux下编译安装SLEPc的流程。 一、下载代码 git clone https://github.com/slepc/slepc.git cd ./slepc二、安装依赖 2.1 安装PETSc 参见: <Linux下编译安装PETSc> 2.2 安装intel oneAPI sudo apt install intel-oneapi-base-toolkit sudo apt install i…

【无标题】qwen3-8b 强化学习训练后的模型,可以接着 进行其他grpo 强化学习训练 吗

ser_count’, 0),)} {((‘valid_user_count’, 1),)} 44 0.0 88 [0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.0, 0.6, 0.0, 0.6, 0.0, 0.6] 55 100%|???{‘loss’: 0.0132, ‘grad_norm’: 0.07552657276391983, ‘learning_rate’: 2e-06, ‘num_tokens’: 2098…

IDC权威认可:瑞数信息双项入选《中国大模型安全保护市场概览》

近日&#xff0c;国际数据公司IDC正式发布了《中国大模型安全保护市场概览&#xff0c;2025&#xff1a;全方位安全检测与防护构建可信AI》报告。本次报告中IDC结合全球统一定义以及中国市场特色&#xff0c;将中国大模型安全保护市场划分为7个细分领域&#xff0c;并通过对中国…

多智能体(Multi-agent)策略模式:思维链CoT和ReAct

参考&#xff1a;https://zhuanlan.zhihu.com/p/704523060 &#x1f3af; 一句话记住 CoT&#xff1a;像“考试时在草稿纸上写完所有步骤&#xff0c;再抄答案”。ReAct&#xff1a;像“玩密室逃脱&#xff0c;每开一个箱子就去找下一个线索”。 用小学生能听懂的话 两个小故事…

ChatGPT指令大全:输入需求=输出完整方案

ChatGPT指令大全提供数百个精炼过的指令语句 (提示词)&#xff0c;让你充分发挥 ChatGPT 的强大功能 一、核心功能模块分类 1. 求职与面试 简历优化 专业反馈&#xff1a;按面试官视角分析简历并提出改进建议量化数据&#xff1a;为经历添加具体数字&#xff08;如提升效率30…

Java零基础入门学习知识点2-JDK安装配置+Maven

文章目录版本提示参考视频Maven环境准备一、安装Java开发工具包&#xff08;JDK&#xff09;二、JDK环境配置三、下载Maven安装包*四、Maven环境配置&#xff08;可省略&#xff09;*五、验证安装&#xff08;上一步没做&#xff0c;这步无法验证&#xff0c;可省&#xff09;六…

基于单片机智能衣柜/智能衣橱设计

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 本设计实现了一种基于单片机的多功能智能衣柜&#xff0c;融合环境检测、安全防护与用户交互功能…

自动语音识别(ASR)技术详解

语音识别&#xff08;Automatic Speech Recognition, ASR&#xff09;是人工智能和自然语言处理领域的重要技术&#xff0c;旨在将人类的语音信号转换为对应的文本。近年来&#xff0c;深度学习的突破推动语音识别系统从实验室走入日常生活&#xff0c;为智能助手、实时翻译、医…