Linux系统中使用dd命令来转换和拷贝文件

说实话,dd命令看起来很简单,但只有真正使用后,你才会意识到它有多么神奇。
第一次使用的时候,我是盲目地看说明书,结果把系统盘的格式给破坏了,真是有趣。

以复制文件为例。
曾经想备份整个系统分区,直接使用了dd if=/dev/sda of=/dev/sdb命令,但是忘记加bs参数了。
你猜怎么着?复制速度慢得要命,几GB的数据要几个小时才能拿到。
后来又加了bs=4 M,一键全部复制了。
所以,说到这个参数,确实要深究细节。

有趣的是转换函数。
我有一个使用服务器创建报告系统的客户端。
数据采用 ASCII 代码,但数据库必须采用 EBCDIC 格式。
每次都手动转换,速度很慢。
他直接在dd中加上了conv=ascii,数据传完之后,就直接用conv=ebcdic传回来了,省了两个人的加班费。
这个过程当时让我震惊。
事实证明DD还可以这么玩。

说到错误处理,我曾经在硬盘上遇到过坏扇区,使用 dd 复制它们并卡在那里。
后来我加了noerror参数,发现自动跳过了坏块,继续复制。
最后,虽然丢失了一些数据,但我终于保存了所有可用的数据。
我自己没有运行过这个,但是后来查了资料,发现notrunc参数对于防止输出文件被意外截断也很重要。

使用 gzip 压缩备份也很常见,但要小心管道字符的使用。
我曾经有一个朋友写了一个脚本并将dd输出直接连接到gzip。
结果gzip崩溃了,整个服务器崩溃了。
后来我改用dd | gzip > file.gz 并添加了重定向,延迟立即停止。
所以当谈到这些细节时,我们真的不能跳过它们。

最后,一个小知识:使用dd进行MBR备份时,不要使用count=1 ,使用count=4 更可靠。
我已经尝试过,但有时使用 count=1 会导致丢失备份中的最后几个扇区。
某些系统在计算扇区时可能会出现错误。
数据几乎毫无用处。

dd这东西用得好可以省事,用错了可以杀人。
关键是要知道每个参数是什么场景可靠的。
例如bs越大,速度越快,但也必须考虑硬盘寻道时间。
没有任何经验,做这份工作确实很困难。

linux中怎么拷贝文件到指定目录下?

是的,这就是复制命令。
严格来说,cp。

我们先来说说用法。
cp 加选项;源文件;然后是目标位置。

你的第一个例子是错误的。
路径是倒着写的。
cp /TEST/test1 /test01 /TEST/test2 应该这样写。

第二个例子是正确的。
使用 -r 重复复制文件夹。

第四个例子也是如此。
./ 代表当前目录。
将 test1 的全部内容复制到 test2
第五个例子是不正确的。
这是一个符号,但写错了。
你必须使用 cp 和 find。

你自己看看。