这个 shell 命令有什么作用?
What does this shell command do?
我正在用另一种语言重写 GNU 的 wc
实用程序,我 运行 跨过这个 应该 导致 wc 输出 0 的命令字节计数。
(dd ibs=99k skip=1 count=0; ./wc -c) < /etc/group
按照我目前的理解,dd
是在一个单独的(子)shell中启动的,然后是wc
启动的,然后是/etc/group
的内容在 shell?
中重定向
dd
命令使用 99kB 的输入块大小并在读取输入之前跳过其中一个?这就是我被绊倒的地方。
现在我的版本报告读取了 ~980 字节,所以我想更好地理解这个命令,以便我的实用程序可以反映这一点。
此命令 (dd ibs=99k skip=1 count=0; ./wc -c) < /etc/group
生成子 shell(对于 (list)
)并将 /etc/group
附加到该子 shell 的标准输入。
在子shell中,dd
命令是运行(并继承了子shell的标准输入),输入块大小为99k
跳过计数为 1,块复制计数为 0。这将导致 dd
在其标准输入流中寻找 99k
并停止。完成后 wc
就是 运行(并继承子 shell 的标准输入)并报告要读取的流中剩余的字符数(对于所有但是巨大的组文件将一无所获。
您的 wc
实现是否正在寻找文件句柄的开头?
dd
命令与/etc/group
一起使用作为输入。使用这些参数,我们有一个 99k
的块文件,99k
的 1 个块由于 ibs argument
而被跳过,然后 99k
的 0 个块被复制。然后您使用自定义命令 ./wc -c
并将此命令的结果作为输入。 dd最终实现的是忽略99k
块,然后将剩余数据输入您的自定义命令。
例如
$ wc -c /etc/group
1011 /etc/group
$ (dd ibs=500 skip=1 count=0; wc -c) < /etc/group
511
当然,您会通过自定义 wc
命令获得不同的结果。
注意,这取决于实施
在我的 OS X 上使用@nalipar 的示例。
$ wc -c /etc/group
2317 /etc/group
$ gwc -c /etc/group #the GNU version of the wc
2317 /etc/group
系统默认wc
(dd ibs=500 skip=1 count=0; wc -c) < /etc/group
打印
0+0 records in
0+0 records out
0 bytes transferred in 0.000012 secs (0 bytes/sec)
2317
使用 GNU wc
(dd ibs=500 skip=1 count=0; gwc -c) < /etc/group
0+0 records in
0+0 records out
0 bytes transferred in 0.000013 secs (0 bytes/sec)
1817
我正在用另一种语言重写 GNU 的 wc
实用程序,我 运行 跨过这个 应该 导致 wc 输出 0 的命令字节计数。
(dd ibs=99k skip=1 count=0; ./wc -c) < /etc/group
按照我目前的理解,dd
是在一个单独的(子)shell中启动的,然后是wc
启动的,然后是/etc/group
的内容在 shell?
dd
命令使用 99kB 的输入块大小并在读取输入之前跳过其中一个?这就是我被绊倒的地方。
现在我的版本报告读取了 ~980 字节,所以我想更好地理解这个命令,以便我的实用程序可以反映这一点。
此命令 (dd ibs=99k skip=1 count=0; ./wc -c) < /etc/group
生成子 shell(对于 (list)
)并将 /etc/group
附加到该子 shell 的标准输入。
在子shell中,dd
命令是运行(并继承了子shell的标准输入),输入块大小为99k
跳过计数为 1,块复制计数为 0。这将导致 dd
在其标准输入流中寻找 99k
并停止。完成后 wc
就是 运行(并继承子 shell 的标准输入)并报告要读取的流中剩余的字符数(对于所有但是巨大的组文件将一无所获。
您的 wc
实现是否正在寻找文件句柄的开头?
dd
命令与/etc/group
一起使用作为输入。使用这些参数,我们有一个 99k
的块文件,99k
的 1 个块由于 ibs argument
而被跳过,然后 99k
的 0 个块被复制。然后您使用自定义命令 ./wc -c
并将此命令的结果作为输入。 dd最终实现的是忽略99k
块,然后将剩余数据输入您的自定义命令。
例如
$ wc -c /etc/group
1011 /etc/group
$ (dd ibs=500 skip=1 count=0; wc -c) < /etc/group
511
当然,您会通过自定义 wc
命令获得不同的结果。
注意,这取决于实施
在我的 OS X 上使用@nalipar 的示例。
$ wc -c /etc/group
2317 /etc/group
$ gwc -c /etc/group #the GNU version of the wc
2317 /etc/group
系统默认wc
(dd ibs=500 skip=1 count=0; wc -c) < /etc/group
打印
0+0 records in
0+0 records out
0 bytes transferred in 0.000012 secs (0 bytes/sec)
2317
使用 GNU wc
(dd ibs=500 skip=1 count=0; gwc -c) < /etc/group
0+0 records in
0+0 records out
0 bytes transferred in 0.000013 secs (0 bytes/sec)
1817