首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可用于常规的小文件吗?

可用于常规的小文件吗?
EN

Unix & Linux用户
提问于 2021-10-29 12:01:10
回答 2查看 294关注 0票数 1

Man dd

dd -转换和复制文件

我倾向于使用dd。奇怪的是,在复制1字节文本文件之后,它变得更小了:

代码语言:javascript
复制
$ block_size=1; device_to_edit=/media/ramdrive/a; device_from=/media/ramdrive/b; echo "aaaaaaaaaa">$device_to_edit; echo "bbbbbbbbbb">$device_from; cat $device_to_edit; cat $device_from; dd if=$device_from of=$device_to_edit count=1 seek=2 skip=2 bs=$block_size; cat $device_to_edit
aaaaaaaaaa
bbbbbbbbbb
1+0 records in
1+0 records out
1 byte copied, 0,000156688 s, 6,4 kB/s
aab

它说1 byte copied,为什么文件的结尾消失了?

添加:

正如评论建议的那样,conv=notrunc修复了它。但来自man

conv=CONVS按照逗号分隔符号列表转换文件

我不想转换文件。在阅读有关复制块设备的文章时,我还没有看到这个操作数。当不是所有文件(例如,/dev/sdb: USB磁盘中的一个512字节块)被更改时,是否总是需要它?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2021-10-29 12:32:33

你要做的是:

代码语言:javascript
复制
block_size=1; 
dd ... count=1 seek=2 skip=2 bs=$block_size; 

您要求dd只复制一个字节。但是,默认情况下,它会截断输出文件,以便文件的末尾是dd完成的地方。

代码语言:javascript
复制
$ echo abcdefgh > test1
$ echo 12345678 > test2
$ dd count=1 bs=1 skip=2 seek=2 if=test1 of=test2
1+0 records in
1+0 records out
1 byte copied, 0.000179375 s, 5.6 kB/s
$ cat test2; echo
12c

我所拥有的GNU手册似乎并没有明确地这样说,但是POSIX描述

of=file指定输出路径名;如果指定了seek=expr,但没有指定conv=notrunc,则副本的效果应该是保留dd查找的输出文件中的块,但输出文件的其他部分不应保留。(If查找文件的大小加上输入文件的大小小于以前输出文件的大小,输出文件将被副本缩短。)

为了防止这种情况,添加conv=notrunc选项:

notrunc不截断输出文件

代码语言:javascript
复制
$ echo 12345678 > test2
$ dd conv=notrunc count=1 bs=1 skip=2 seek=2 if=test1 of=test2
1+0 records in
1+0 records out
1 byte copied, 0.00019385 s, 5.2 kB/s
$ cat test2
12c45678

notrunc并没有让它修改实际被复制的数据,所以在这个意义上它不是一个“转换”,即使它被当作到conv的标志。

请注意,如果给出了count=dd就会执行许多read()调用,这意味着如果您从一个可以进行短读的设备读取,那么实际读取的数据量并不是countbs

票数 3
EN

Unix & Linux用户

发布于 2021-10-29 12:28:26

应该查看完整的文档,man dd

代码语言:javascript
复制
Full documentation at: 
       or available locally via: info '(coreutils) dd invocation'

“of=FILE”写入文件,而不是标准输出。除非给出‘conv=notrunc’,否则‘dd’会将文件截断为零字节(或用‘seek=’指定的大小)。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/675283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档