最近幾天在整理公司服務器系統架構信息,其中一項是監聽端口及對應服務的整理。通過端口號可以找到對應的進程(及父进程),再通过父进程ID找到对应的服务。
Comparsion
主要使用到的命令有ss
、netstat
、ps
在不同版本的CentOS Minimal中,命令是否預裝
OS | ss | netstat | ps |
---|---|---|---|
CentOS6.8 | No | Yes | Yes |
CentOS7 | No | No | Yes |
命令分屬於不同的套件
Package | Commands |
---|---|
iproute | ip , rtmon , ss |
net-tools | ifconfig , netstat , route |
procps-ng | ps , free , skill , pkill , pgrep , snice , tload , top , uptime , vmstat , w , watch , pwdx |
套件是否預安裝在CentOS Minimal中
OS | net-tools | iproute | procps-ng |
---|---|---|---|
CentOS6.8 | Yes | No | No |
CentOS7 | No | No | Yes |
以下是對套件的介紹,通過命令yum info
即可查看
|
|
故而需要先安裝相關套件
|
|
Shell Script
該腳本用於獲取系統正在被監聽的端口及調用對應端口的進程、應用。Shell腳本代碼託管在GitLab。
使用方式如下
|
|
Analysis
通過lsof
命令獲取指定端口的進程id(pid),對數據的處理主要是通過awk
、sed
命令。
- 使用
awk
可更改數據展現形式 - 使用
sed
可從目標字符串中提取指定字符串,如
|
|
參數解釋
-r
: 使用正則 use extended regular expressions in the scripts
: 替換 substitute.*
: 正則最小匹配(非貪婪匹配)\1
: 指代之前的(.*)
的內容,即要提取的內容
Usage
使用實例
Example 1
|
|
Example2
開發測試環境
|
|
Change Logs
- 2016.08.10 17:50 Wed Asia/Shanghai
- 初稿完成
- 2016.11.01 10:04 Tue Asia/Shanghai
- Shell腳本修改,添加
$UID
權限判斷
- Shell腳本修改,添加
- 2016.12.29 17:33 Thu Asia/Shanghai
- Shell Script代碼重構
- 2016.01.04 11:21 Wed Asia/Shanghai
- awk版本提取代碼修改以兼容Debian系統
- 2017.02.03 12:08 Fri America/Boston
- 添加
lsof
命令是否存在的判斷、取消PPID判斷(Debian Jessie 8.7)
- 添加
- 2017.02.27 18:40 Mon Asia/Shanghai
- 代碼重構,改用
-tuanp
指令提取端口
- 代碼重構,改用
- 2017.04.07 14:43 Fri Asia/Shanghai
- 代碼優化,在
while
循環中使用IFS
,read -r
,優化awk
檢測代碼
- 代碼優化,在
- 2019.04.29 10:16 Mon America/Boston
- 勘誤,遷移到新Blog