grep / awk оптимизировал вывод netstat или ss - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь написать сценарий bash, который выводит TCP-соединения, установленные на порту 8000 (icecast), а также фильтрует внутренний IP-адрес из этого списка.

Вот 2 примера, которые работают, но мне нужнопомогите оптимизировать командную строку.

1.

    netstat -ant | grep 8000 | grep ESTABLISHED | grep -v
'192.168.1.102

2.

    ss -H -nt sport eq 8000 | awk '{print $5}'| awk -F':' '{print $1}' |
    grep -v '192.168.1.102'

Может кто-нибудь помочь мне объединить фильтры grep или awk, пожалуйста?Из того, что я прочитал, команда SS лучше по производительности, чем команда netstat.Но если кто-то знает лучшее приложение, чтобы получить вышеуказанную информацию и отфильтровать ее, я буду использовать ее вместо этого.

Пример вывода из SS:

ESTAB       0      1400   192.168.3.2:8000               x.x.x.x:62090             

ESTAB 0 0 192.168.3.2:8000192.168.1.102:1033

Образец из netstat:

    tcp        0   1400 192.168.3.2:8000        x.x.x.x:62090       ESTABLISHED
    tcp        0   0    192.168.3.2:8000        192.168.1.102:1033  ESTABLISHED
    tcp        0   0    192.168.3.2:22          y.y.y.y:32897       ESTABLISHED

1 Ответ

0 голосов
/ 15 февраля 2019

Помните, Awk может делать все, что может grep, и обычно почти так же быстро.Как общее руководство, постарайтесь свести к минимуму количество процессов.Таким образом, попытайтесь преобразовать все ваши конвейеры в одну программу Awk.

  1. Вам также понадобится экранировать точки в IP-адресе.

    netstat -ant | awk '/8000/ && /ESTABLISHED/ && ! /192\.168\.1\.102/'
    
  2. Это немного сложнее, но отнюдь не сложно.

    ss -H -nt sport eq 8000 |
    awk '{ split($5, a, /:/); if (a[1] !~ /192\.168\.1\.102/) print a[1] }'
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...