在命令行命令列表中使用tcpdump时出错

时间:2012-01-27 12:11:06

标签: linux bash shell

我正在尝试在后台运行tcpdump,而我在eth0上发送一些流量,然后在发送流量后启用tcpdump进程。

当我在后台单独运行tcpdump时,它运行时没有错误:

bash~~$ sudo /usr/sbin/tcpdump -i eth0 -s0 -w /tmp/eth0.pcap &
[1] 19282
bash~~$ tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

bash~~$

然后我可以在之后使用tcpdump:

bash~~$ ps -ef | grep tcpdump; sleep 1; sudo pkill tcpdump; ps -ef | grep tcpdump
fred 20437 15842  0 11:55 pts/2    00:00:00 grep tcpdump
fred 20467 15842  0 11:55 pts/2    00:00:00 grep tcpdump
bash~~$

现在当我将上述所有内容放在一起时,我似乎无法通过最初的tcpdump调用:

bash~~$ sudo /usr/sbin/tcpdump -i eth0 -s0 -w /tmp/eth0.pcap & ; ps -ef | grep tcpdump; sleep 1; sudo pkill tcpdump; ps -ef | grep     tcpdump;
-bash: syntax error near unexpected token `;'
bash~~$

关于我缺少的任何想法? tcpdump的行为是否与其他函数不同?

A

1 个答案:

答案 0 :(得分:2)

&符号&;&&||一起是管道终结符。您不应该同时指定两个不同的管道终结器,而是根据您的需要选择一个。在这里,你可能想要

sudo /usr/sbin/tcpdump -i eth0 -s0 -w /tmp/eth0.pcap & ps -ef | grep tcpdump; sleep 1; sudo pkill tcpdump; ps -ef | grep tcpdump;

bash manpage的相关摘录:

  

管道是由一个或多个命令分隔的一个或多个命令的序列   控制运算符||&

     

列表是一个或一个序列   由运算符;&&&││之一分隔的更多管道,以及   可选择由;&<newline>之一终止。