Хочу легко проверять порты, которые слушают процессы, и удобно выводить используемые порты и службы.
Привет, я бездарь.
Ой-ой, кажется, в заголовке использована фраза, которую я где-то слышал... До сих пор иногда думаю, что это хорошее название для сайта. В эти дни на медосмотре у меня было идеальное низкое давление 60-100. Второе измерение показало очень низкое давление, так что, конечно, использовали первое значение.
Введение
Внезапно
я подумал: «Хочу наглядно выводить, какие порты используются и какие службы им соответствуют».
Причина в следующем:
- При личном использовании хочу легко проверять и выводить информацию без необходимости в схеме конфигурации сервера.
- Хочу выводить в формате Markdown или в виде текстового файла.
- Проверка используемых портов
Честно говоря, по мере того как я запускаю все больше своих собственных вещей, я часто задаюсь вопросом: «Какой порт я использовал?»
Таких случаев становится много, и как только у меня будет собрана нужная информация, я хочу в какой-то степени автоматизировать это с помощью скрипта и легко проверять в виде файла .md.
Кстати, причина, по которой я настаиваю на текстовых файлах, заключается в том, что
это упрощает работу с данными.
Я напишу об этом подробнее позже.
Просто набрав одну эту команду:
lsof -i -P -n | grep "LISTEN" | awk '{print $1 "," $3 "," $9}' | sort | uniq
получим:
$ lsof -i -P -n | grep "LISTEN" | awk '{print $1 "," $3 "," $9}' | sort | uniq
pulseaudi,haturatu,*:38169
pulseaudi,haturatu,*:44409
pulseaudi,haturatu,*:4713
Вывод будет выглядеть примерно так.
Кстати, результат вывода тот же и без опций lsof, но, похоже, в версии BSD он отличается, поэтому я использую все опции.
Преобразование в CSV
Хотя о форматах файлов часто говорят разное, мне нравится формат CSV.
Честно говоря, я не думаю, что CSV плох при работе с CSV-файлами. Единственная очевидная вещь заключается в том, что если вы замените запятые с помощью sed, и запятая используется внутри строки, то она тоже будет заменена.
TSV пока не очень привычен, поэтому CSV лучше. (Честно говоря, если заменять с помощью sed, то что будет иметь меньше ошибок: запятая или табуляция...)
Я немного отвлекся, но если легко преобразовать это в CSV, то можно скопировать и вставить прямо в Excel, и даже простое открытие обеспечит высокую читаемость.
Можно легко открыть его как файл .csv, перенаправив стандартный вывод, например, в LibreOffice. Далее добавим информацию о TCP и UDP.
$ lsof -i -P -n | grep "LISTEN" | awk '{print $1 "," $3 "," $9 "/" $8}' | sort | uniq > test.csv

Получится примерно так:
Таким образом,
возможно, будет довольно легко визуализировать.
Честно говоря, сначала я выводил данные грубо, используя `print " "` без пробелов, как в `printf %10s`, но в конечном итоге, для команды, предназначенной для формата CSV, мне кажется, что передача ее через пайп команде column делает саму команду более понятной и читаемой...
Если преобразовывать в формат Markdown
Сначала я думал сделать таблицу в формате Markdown, но мне не очень нравятся таблицы в Markdown, поэтому я решил, что будет достаточно использовать «```» для удобного копирования и вставки.
При необходимости я выведу данные с помощью `awk`.
Цель вывода в формате Markdown заключается в том, что если запускать это как cron-задачу для регулярной отправки в приватный репозиторий на GitHub или аналогичном сервисе, то можно будет легко проверять информацию в любое время.
Размышления о других необходимых вещах
Далее, для проверки объема диска есть df -h, vmstat, free и т.д., но это уже больше относится к мониторингу ресурсов всей системы, так что, возможно, лучше будет извлекать информацию из /proc/cpuinfo, /proc/meminfo и т.п.
Было бы еще лучше, если бы информация о таблицах БД была легко визуализируемой. Если бы я это делал, то мог бы запускать некоторые команды, связанные с БД, с помощью `which *` и выводить информацию только для тех, которые возвращают статус 0, что было бы еще более тщательно. Но я немного неохотно берусь за это.
Схемы конфигурации сильно различаются у разных людей, и я понимаю, что подробные проектные документы для промежуточного ПО, конечно, необходимы, но общую картину системы трудно проверить, если она не собрана в одном месте, поэтому я задаюсь вопросом, нет ли способа упростить личное управление.
Легко создавать диаграммы с помощью таких инструментов, как draw.io, но я также хочу сократить затраты на проверку до создания этих диаграмм.
Бонус: Молчание Wireguard
Кстати, когда я это делал, я задался вопросом, почему lsof не показывает Wireguard, работающий на UDP51820, и затем нашел ответ.
the wireguard not listening on port after started
Raspberry Pi で WireGuard + VPS
Похоже, это потому, что он функционирует как модуль ядра. По моей собственной интерпретации, Wireguard работает на уровне 3, а "
процесс показывает открытые файлы", поэтому я подумал, может быть, поэтому он не выводит его. Я ошибаюсь?
Кстати, японская документация Red Hat довольно понятна.
Глава 8. Настройка WireGuard VPN
На этом сегодня все. Если мне придет в голову что-то еще хорошее, я, возможно, напишу продолжение, а может быть, и нет.
До новых встреч.