我正在尝试在后台运行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
答案 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>
之一终止。