Intereting Posts
Как использовать Awk для печати между двумя позиционными параметрами Как установить GTK3 в Centos 6.2 Почему я не могу скопировать директиву с * nix на установленный smbfs-ресурс в Windows 7? Автоматическая блокировка, но не затемнение оболочки gnome при неактивном Как init определяет, какие устройства должны modprobe? Автоматически запускать команду перед удалением файловой системы Владелец каталога – это номер вместо имени в Centos. Почему это? несколько SSID в разных подсетях kmod-batman-adv Патч с использованием нескольких независимых файлов патчей? bc выводит двоичный код, как куски, разделенные пробелами Неоднократно извлекает каждую вторую и третью строки файла с 3-строчными блоками данных Отправить команду DXY-GL на принтер Извлечь линии, содержащие шаблон Отключение расширения сервера Xorg во время выполнения (для новых клиентов)? В каких дистрибутивах GNU / Linux есть хорошее программное обеспечение для увеличения экрана, которое можно свободно или предустановить?

странное поведение команды строк

Я пытаюсь захватить трафик mysql и передать этот трафик на команду строк следующим образом:

tcpdump -i any -s 0 -l -w - dst port 3306 | strings 

Это работает как ожидалось и печатает все запросы mysql, такие как

 select * from mytables show databases 

Но когда я пытаюсь перенаправить вывод в файл, он не печатает вывод в файл /tmp/out :

 tcpdump -i any -s 0 -l -w - dst port 3306 | strings > /tmp/out 

Может ли кто-нибудь объяснить мне поведение вышеприведенной команды и почему она не перенаправляет вывод в файл.

Я получил решение:

Фактически команда string – буферизация. Я отключил буферизацию, используя

 stdbuf -i0 -o0 -e0 command 

Таким образом, после изменения всей команды на следующую, вывод начался в / tmp / final файл.

 tcpdump -i any -s 0 -l -w - dst port 3306 | stdbuf -i0 -o0 -e0 strings > /tmp/final 

Рекомендации

  • stdbuf man page
  • буферизация в стандартных потоках
  • linux stdbuf – строка-буферизация опции stdin не существует