技术解析
3P => Program, Pid, Port
在 Linux 下有好几种工具来做 program(程序名), pid(进程号), port(端口) 之间的对应
1. ps 做了 pid 和 program 之间的对应
2. netstat 做了 port 和 pid/program 之间的对应
3. pgrep 做了 program 和 pid 之间的对应
...
ps 和 netstat 很强大,但是参数多而且很多输出列其实无关紧要,pgrep 默认不是 exact match, 比如 pgrep ss 会把 sshd 的 pid 也输出出来。
更重要的是,对于普通用户来说,很多只关心 3 个核心参数: program, pid 和 port
今天我用 bash 实现了三者互查:
1. 给 port 会输出对应的 pid 和 program name;
2. 给 pid 会输出 program name 和 port(s) (如果没有会是 none, 如果有多个会以空格为间隔输出)
3. 给 program 会输出所有对应进程的 pid, 以及每个 pid 对应的 port(s)
当然如果输入的参数无效,回给提示并返回一个非 0 的状态码
这是地址: https://github.com/librz/shell_scripts/blob/main/3p.sh
我是在 .zshrc 里写了一个 alias:
alias 3p="bash <(curl -sL https://raw.githubusercontent.com/librz/shell_scripts/main/3p.sh)"
这样就能直接用了, 以下是一些例子:
# who's listening on port 9000?
3p --port 9000
# I have pid 1234, what kind of program is it? is it using any port?
3p --pid 1234
# I want to see all process and ports related to node
3p --program node
我知道很多前辈肯定已经写过这种程序,但自己还是要写一遍,哈哈