Как правильно контролировать команду VPS Linux

Я наткнулся на эту команду

watch -n 30 "netstat -ntu | awk '{print \$5}' | cut -d: -f1 | sort | uniq -c | sort -n"

В нем перечислены IP-адреса, подключенные к моему серверу, не так ли? Может кто-нибудь, пожалуйста, сломайте все переданные здесь команды и скажите мне другие команды, которые могут быть похожими в целях мониторинга трафика сервера?

1 ответ

Решение

watch выполняет последовательность команд снова и снова, с -n 50 каждые 50 секунд, чтобы вы могли видеть изменение выходного сигнала с течением времени.

netstat отображает информацию о сетевых подключениях, интерфейсах и т. д. Опция -n выбирает числовой вывод, -t выбирает TCP-соединения и -u выбирает UDP. Таким образом, вы получаете таблицу активных соединений TCP и UDP, нормализованную только для IP-адресов и числовых номеров портов.

awk а также cut инструменты для извлечения только одного столбца (Или, ну, Awk сам по себе является простым языком программирования, так что он действительно может сделать намного больше.) Вероятно, это должно быть реорганизовано в один скрипт Awk;

 awk '{ split($5, n, /:/); print n[1] }'

Это извлекает содержимое перед двоеточием в пятом столбце вывода, то есть IP-адрес без конечного номера порта из netstat выход.

(Обратная косая черта перед знаком доллара в вашем примере требуется, потому что watch Команда в двойных кавычках. Если вы хотите запустить это внутри watch, поставь обратную косую черту.)

sort | uniq | sort -n это общая идиома для заказа чего-либо по количеству вхождений. Первый sort просто помещает одинаковые строки рядом друг с другом, так что uniq может работать правильно (требует отсортированного ввода). С -c, uniq показывает, сколько смежных строк было объединено в одну, а затем мы сортируем по этому номеру.

Итак, в итоге вы получите список IP-адресов, которые имеют открытые соединения с вашим хостом, в порядке возрастания. (Для этого конкретного варианта использования, возможно, будет иметь смысл нисходящий порядок - sort -rn отсортировать по порядку в обратном порядке.)

Если вы хотите научиться этим вещам, имеет смысл разделить задачу на две части - одна половина должна понять netstat и связанные сетевые инструменты, а другая половина - общая обработка текста для извлечения читаемой человеком информации из потенциально больших объемов машиночитаемых данных. Для первого, вероятно, посмотрите руководство по администрированию сети. Для последнего, возможно, посмотрите на GNU coreutils Документация для начала, с особым акцентом на утилиты обработки текста.

Для развлекательной ценности здесь весь трубопровод переделан в основном в Awk.

netstat -ntu |
awk '{ split($5, n, /:/); a[n]++ }
    END { for (ip in a) print a[ip], ip }' |
sort -rn
Другие вопросы по тегам