Как правильно контролировать команду 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