想要方便地檢查進程正在監聽的端口,並輕鬆輸出使用的端口和服務
大家好,我是無能。
哎呀呀,標題裡用的這個詞組,總覺得在哪裡聽過...
我現在有時還會覺得那真是個好網站名,最近健康檢查時,血壓完美地測出了低血壓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 替換,逗號和 Tab 哪個比較不容易出錯呢...)
話題好像跑偏了,但總之如果能輕鬆轉換成 CSV 格式,就可以直接複製貼上到 Excel,或者直接打開也能保持高可讀性。
只需簡單地將標準輸出重定向為 .csv 文件,就可以輕鬆地用 LibreOffice 等工具打開。接下來,我們將添加 TCP 和 UDP 的信息。
$ lsof -i -P -n | grep "LISTEN" | awk '{print $1 "," $3 "," $9 "/" $8}' | sort | uniq > test.csv

會變成這樣
這樣一來
可能比較容易視覺化。
老實說,一開始我是用 printf %10s 或 print " " 這種笨方法輸出,沒有加空格,但如果以 CSV 格式為前提,最終將其通過管道傳給 column 命令,感覺命令本身會更清晰易讀...
如果轉換成 Markdown 格式
一開始我想按照 Markdown 格式做成表格... 但我不太喜歡 Markdown 格式的表格,所以覺得用 "```" 方便複製貼上就好...
如果需要,就用 awk print 輸出吧。
我想輸出成 Markdown 格式的目的,是因為如果將其作為 cron 定期推送到 GitHub 等私人倉庫,就可以隨時輕鬆查看。
考慮其他所需項目
接下來是檢查磁碟容量,可以使用df -h、vmstat、free 等命令,但這樣一來就帶有監控整個系統資源的意味了,所以或許可以從/proc/cpuinfo、/proc/meminfo 等地方提取信息...。
如果能讓資料庫的表格信息更容易視覺化就更好了,如果這樣做的話,可以通過 which * 執行一些資料庫相關的命令,只輸出狀態碼為 0 的指定資料庫信息,這樣會更周到。但這方面我有點懶惰。
架構圖因人而異,詳細的中間件產品設計書當然也是必要的,但我認為如果系統的整體概覽沒有統一整理,確認起來會很困難,所以我在想有沒有什麼方法可以讓我個人更容易管理。
像 draw.io 那樣輕鬆繪製圖表也很方便,但我也想降低繪製圖表之前的確認成本。
附錄:Wireguard 的沉默
順帶一提,我在操作時想到,Wireguard 明明作為 UDP51820 運行,為什麼lsof 不顯示呢?後來找到了答案。
the wireguard not listening on port after started
Raspberry Pi で WireGuard + VPS
看來是因為它作為內核模塊運行。根據我自己的理解,Wireguard 運行的層級是第三層,而 "進程打開的文件" 只是顯示進程打開的文件,所以它不輸出嗎?是不是這樣呢?
順帶一提,Red Hat 的日文文檔非常清晰易懂。
第8章 WireGuard VPN の設定
那麼今天就到這裡。如果我想到其他好點子,可能會繼續寫,也可能不會。
再次感謝大家。