Ошибка при использовании tcpdump в списке команд командной строки - PullRequest
0 голосов
/ 27 января 2012

Я пытаюсь запустить tcpdump в фоновом режиме, пока я отправляю некоторый трафик через eth0, а затем pkill процесс 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 Ответ

2 голосов
/ 27 января 2012

Ampersand & - терминатор конвейера вместе с ;, && и ||.Вы не должны указывать два разных терминатора конвейера вместе, а должны выбирать один в зависимости от ваших потребностей.Здесь вы, вероятно, захотите

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

Соответствующие выдержки из man-страницы bash :

Конвейер - это последовательность из одной или нескольких команд, разделенных одной из следующих команд:управляющие операторы | или |&.

Список - это последовательность из одного или нескольких конвейеров, разделенных одним из операторов ;, &, && или ││,и необязательно завершается одним из ;, & или <newline>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...