Dan*_*ith 6 boot-loader pipe dd cat
我很想知道这两个命令在 Linux 中的区别:
$ cat ./boot.bin ./kernel.bin /dev/zero | dd bs=512 count=2880 of=devos.img
Run Code Online (Sandbox Code Playgroud)
和
$ cat ./boot.bin ./kernel.bin > devos.img
Run Code Online (Sandbox Code Playgroud)
ilk*_*chu 14
dd
完全复制字节count
块bs
,或者在这种情况下总共复制2880*512 个字节(但见下文)。这会将两个文件的连接截断或填充为固定大小(因为/dev/zero
根据需要提供尽可能多的零字节)。1440 kB 看起来像 3.5" 高清软盘的大小,所以也许有人想要制作完全适合软盘的图像。
cat
您的第二个示例中的纯文本只会连接文件,结果将是任何大小。
较小的例子:
$ echo hello > a; echo world > b
$ cat a b | od -c
0000000 h e l l o \n w o r l d \n
$ cat a b /dev/zero | dd bs=1 count=8 2>/dev/null | od -c
0000000 h e l l o \n w o
$ cat a b /dev/zero | dd bs=1 count=16 2>/dev/null | od -c
0000000 h e l l o \n w o r l d \n \0 \0 \0 \0
Run Code Online (Sandbox Code Playgroud)
实际上,dd
如果在一次read()
调用中获得的数据少于块大小,则读写会更少。这可能发生在大块大小的情况下,但可能不是 512 的问题,因为cat
它将以至少该大小的块写入数据。在 GNU dd 中,这可以通过iflag=fullblock
.
我们可以做同样的事情head -c
:
$ cat a b /dev/zero | head -c 16 ...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
824 次 |
最近记录: |