![为什么我们使用 cp 来复制文件而不是 dd?(在 unix 衍生产品中)](https://linux22.com/image/1367382/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%BB%AC%E4%BD%BF%E7%94%A8%20cp%20%E6%9D%A5%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6%E8%80%8C%E4%B8%8D%E6%98%AF%20dd%EF%BC%9F%EF%BC%88%E5%9C%A8%20unix%20%E8%A1%8D%E7%94%9F%E4%BA%A7%E5%93%81%E4%B8%AD%EF%BC%89.png)
对于 *nix 中的常规文件复制,我只见过人们使用 cp(例如cp /mnt/mydevice/myfile ~/myfile
),但我最终遇到了dd
,它似乎做同样的事情(dd if=/mnt/mydevice/myfile of=~/myfile
)。我确实看到它们有一些不同的参数可用(dd 似乎更擅长微调复制),但它们似乎是多余的。这些工具真的做同样的事情吗?
答案1
回答你的主要问题,不,他们不会做同样的事情。
dd 可处理您指定的文件,使其能够在设备之间或从设备到文件复制数据。这通常用于在涉及特定设备时移动数据(例如,从 cd-rom 光盘创建 iso 映像:dd if=/dev/cdrom of=mycdrom.iso),或备份原始设备(有时用于 RAC 数据库:dd if=/dev/raw/raw1 of=device_raw1)
cp 用于将文件内容复制到新文件或新位置。您特别想要的是保留所有权、时间戳和模式(权利),以及能够递归操作(=能够复制目录)。
答案2
dd
它们的作用相同,除非您指定了限制复制哪些字节的选项之一 ,例如seek
或skip
或count
或如果您使用 dd
选项来改变字节,例如conv
。如果您没有使用其中一个选项 dd
,而只是使用更常见的选项,如if
、of
,bs
那么这两个实用程序都会做同样的事情:打开两个文件,从输入中读取,写入输出,直到输入耗尽或输出无法接受更多字节。
关于读写“设备”文件有很多迷信的说法,说必须使用dd
这些文件,但这只是迷信。 dd
并没有做任何不同的事情,我们只是打开文件并读写字节。