[20140702]linux使用dd的一些细节.txt

[20140702]linux使用dd的一些细节.txt

linux下使用dd要注意的一个重要细节是输入,输出不要写错或者写反,否者后果很严重.
另外假设要修改某个文件的中间部分,有一个细节要特别注意,否者会导致文件破坏.
举一个简单的例子来说明:

# cat a1.txt
111111111
222222222
333333333

--建立一个文件每行10个字符(看到9个字符+加上\n正好10个字符.)

# dd if=a1.txt of=a2.txt bs=10 skip=1 count=1
1+0 records in
1+0 records out

# cat a2.txt
222222222

--这样正好取出中间部分.假设修改最后一个字符为b.

# cat a2.txt
22222222b

--现在替换回去.
# dd if=a2.txt of=a1.txt bs=10 count=1 seek=1
1+0 records in
1+0 records out

# cat a1.txt
111111111
22222222b

# ls -l a1.txt
-rw-r--r--  1 root root 20 2014-07-02 16:19:46 a1.txt

--可以发现结尾部分丢失,文件大小改变.正确的做法是:

# dd if=a2.txt of=a1.txt bs=10 count=1 seek=1 conv=notrunc
1+0 records in
1+0 records out

--后面的参数conv=notrunc很重要! notrunc=>do not truncate the output file

# cat a1.txt
111111111
22222222b
333333333

--可以发现这样修改后,结果才正确,仅以此文做为自己犯的一个严重错误的纪念.链接:

http://blog.itpub.net/267265/viewspace-762523/

--再次补充一个,测试操作一定要小心!!!!!!

请使用浏览器的分享功能分享到微信等