Перенаправление вывода из grep не работает должным образом

У меня есть два диска NVMe в моем Lenovo P50 с Arch, проблем пока нет, работает ext4.

У меня включен fstrim.timer вместо использования параметра discard в fstab.

sudo systemctl enable fstrim.timer

Единственный другой примечательный вариант —:

noatime

Вы захотите избавиться от:

  1. отношение
  2. диратим
1
13.11.2016, 19:42
1 ответ

Утилита grepвыполняет буферизацию своего вывода, когда она не подключена к терминалу. Вы не увидите никакого вывода в файлах /tmp/outputдо тех пор, пока буфер вывода grepне будет заполнен и очищен.

Это будет проблемой, пока работает ngrep. Как только ngrepзавершится, grepочистит свой выходной буфер до того, как он тоже завершится.

Эта буферизация выполняется из соображений производительности. Сброс строки текста на вывод занимает короткое время, но когда задействованы большие объемы данных, это замедляет конвейер.

Вы можете отключить буферизацию, которую выполняет grep, или, скорее, включить буферизацию строки -. В BSD и GNU grepэто делается с помощью нестандартной -опции --line-buffered, так что вы получите

sudo ngrep -W byline -qilw get tcp dst port 80 |
grep --line-buffered -i '.*' |
tee /tmp/output

Или вы можете просто удалить это grepполностью, так как оно будет передавать все строки от ngrepдоtee(регулярное выражение .*совпадает в каждой строке, независимо от того, пуста она или нет ).

0
27.01.2020, 22:32

Теги

Похожие вопросы