为什么我们使用cp而不是dd来复制文件?(在unix衍生品中)

use*_*105 24 linux unix bsd dd cp

对于 *nix 中的普通文件复制,我只见过人们使用 cp(例如cp /mnt/mydevice/myfile ~/myfile),但我最终遇到了dd,它似乎做完全相同的事情(dd if=/mnt/mydevice/myfile of=~/myfile)。我确实看到它们有一些不同的可用参数(dd 在微调复制方面似乎更好),但它们似乎是多余的。这些工具真的做同样的事情吗?

Kru*_*uug 12

回答你的主要问题,不,他们不做同样的事情。

dd 处理您指定的文件,使其能够在设备之间复制数据,或从设备复制到文件。如果特别涉及设备,这通常用于移动数据(从 cd-rom 光盘创建 iso 映像,例如:dd if=/dev/cdrom of=mycdrom.iso),或备份原始设备(有时在 RAC 数据库中使用) : dd if=/dev/raw/raw1 of=device_raw1)

cp 用于将文件内容复制到新文件或新位置。您特别想要的是保留所有权、时间戳和模式(权限),以及能够递归操作(=能够复制目录)。

来源

  • @Kruug,我一定遗漏了一些东西,因为我仍然看不到 `cp` 能做什么而 `dd` 不能。`dd` 还能够*“将文件内容复制到新文件或新位置”* 和*“保留所有权、时间戳和模式”* 对吗? (6认同)
  • 啊! 好的,所以 dd 复制原始文件,而 cp 复制内容(例如,它允许它复制目录而不破坏文件系统)。谢谢! (3认同)
  • @Pacerier 据我所知,`cp` 是一个更专注的实用程序,而 `dd` 更通用。`dd` 可以做`cp` 能做的所有事情,但`cp` 只能做`dd` 能做的部分。 (3认同)

小智 11

他们做同样的事情,除非你指定的选项之一, dd这其中字节被复制的限制,如seekskipcount或如果您使用的 dd选项突变字节如conv。如果您没有使用这些选项之一, dd而只是使用更常见的选项,如if, ofbs那么这两个实用程序都做同样的事情:打开两个文件,从输入读取,写入输出,直到输入耗尽或者输出不能接受更多字节。

有很多关于读取和写入“设备”文件的迷信,说明您必须使用dd这些文件,但这只是迷信。 dd没有做任何不同的事情,我们只是打开文件并读取和写入字节。