dd
可执行程序位置:
/usr/bin/dd
复制文件,根据操作数进行转换和格式化。
格式
dd if=input_file of=output_file bs=block_size ...
说明
该命令和系统内置命令的用法略有不同,使用 key=value 这种格式对复制文件的方式和格式进行说明。以下为dd 的参数示例。
bs=BYTES 指定每次读取和写入的字节数
cbs=BYTES 指定一次读取和写入的字节数
conv=CONVS 指定一系列用逗号分隔的转换操作
ucase: 将文件内容转换为大写
lcase: 将文件内容转换为小写
swab: 交换相邻的字节,用于处理不用字节顺序的数据
noerror: 忽略输入文件中的读取错误
sync: 将输出文件用零字节填充,以使其大小满足指定的块大小
count=BLOCKS 指定要复制的快数
ibs=BYTES 指定每次从输入文件中读取的字节数,默认为512字节
if=FILE 指定输入文件的路径,默认从标准输入(stdin)中读取数据
iflag=FLAGS 指定用于读取输入文件的一系列标志
direct: 使用文件IO 进行读取,绕过缓存区
sync: 在每次读取之前强制同步文件
obs=BYTES 指定每次写入输出文件的字节数,默认为512字节
of=FILE 指定输出文件的路径,默认将数据写入标准输出(stdout)
oflag=FLAGS 指定用于写入输出文件的一系列标志
seek=BLOCKS 跳过输出文件的前面指定块数,每个块的大小由 obs 参数定义
skip=BLOCKS 跳过输入文件的前面指定块数,每个块的大小由 ibs 参数定义
status=noxfer 禁止显示传输统计信息,以便在命令执行完成后不显示字节数和传输速度等信息
BLOCKS 和 BYTES 可以后跟以下乘法后缀:
c =1, w =2, b =512, kB =1000, K =1024, MB =1000*1000, M =1024*1024, xM =M
GB =1000*1000*1000, G =1024*1024*1024, and so on for T, P, E, Z, Y.
样例
注意:每一种用法之前会标注相应的注释。dd 命令的用法涉及到多种不同文件,参考时请核对文件和示例文件是否一致,不一致时根据自己的文件情况修改。
- 复制普通文件
[root@sylixos:/apps]# echo "hello, SylixOS!" >test1
[root@sylixos:/apps]# ls
test1
[root@sylixos:/apps]# cat test1
hello, SylixOS!
[root@sylixos:/apps]# dd if=test1 of=test2
0+1 records in
0+1 records out
17 bytes (17B) copied, 0.018326 seconds, 927B/s
[root@sylixos:/apps]# ls
test1 test2
[root@sylixos:/apps]# cat test2
hello, SylixOS!
[root@sylixos:/apps]# dd if=/apps/test1 of=/apps/test3
0+1 records in
0+1 records out
17 bytes (17B) copied, 0.017991 seconds, 944B/s
[root@sylixos:/apps]# ls
test1 test2 test3
[root@sylixos:/apps]# cat test3
hello, SylixOS!
- 创建一个指大小的空文件
[root@sylixos:/apps/test]# dd if=/dev/zero of=empty_file bs=100 count=1
1+0 records in
1+0 records out
100 bytes (100B) copied, 0.005551 seconds, 17.6KB/s
[root@sylixos:/apps/test]# ll
-rw-rw-rw- root root Thu Aug 24 05:09:10 2023 100 B, empty_file
total items: 1
[root@sylixos:/apps/test]# cat empty_file
[root@sylixos:/apps/test]#
- 验证 seek参数和skip参数的用法
注意:
seek参数指定输出时跳过的块数,意为先对输出文件跳块,之后再进行文件写操作,所以输出文件(seek)的内容不会缺少。skip参数指定输入时跳过的块数,意为先对输入文件跳块,之后再对输出文件进行写操作,所以输出文件(skip)的内容会缺少。
[root@sylixos:/apps/test]# ll
-rw-rw-rw- root root Thu Aug 24 05:18:33 2023 14 B, hello
total items: 1
[root@sylixos:/apps/test]# dd if=hello of=seek seek=5 obs=1
0+1 records in
14+0 records out
14 bytes (14B) copied, 0.010779 seconds, 1.3KB/s
[root@sylixos:/apps/test]# dd if=hello of=skip skip=10 ibs=1
4+0 records in
0+1 records out
4 bytes (4B) copied, 0.006431 seconds, 621B/s
[root@sylixos:/apps/test]# ll
-rw-rw-rw- root root Thu Aug 24 05:29:56 2023 19 B, seek
-rw-rw-rw- root root Thu Aug 24 05:18:33 2023 14 B, helo
-rw-rw-rw- root root Thu Aug 24 05:30:23 2023 4 B, skip
total items: 3
[root@sylixos:/apps/test]# cat seek
HELLO WORLD!
[root@sylixos:/apps/test]# cat skip
D!
[root@sylixos:/apps/test]#