写了个 bash 脚本用于 3P 互查

2021-01-28 23:42:32 +08:00
 vision1900

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

我知道很多前辈肯定已经写过这种程序,但自己还是要写一遍,哈哈

4671 次点击
所在节点    Linux
27 条回复
IceMimosa
2021-01-29 10:39:33 +08:00
奇怪的词语又增加了。。
dimlau
2021-01-29 10:40:50 +08:00
不是我理解的那种使用场景诶……
piecezzz
2021-01-29 10:51:44 +08:00
啊这
vision1900
2021-01-29 11:00:36 +08:00
@jinliming2 原来 lsof 这么强大,之前有遇见过,list open files, 看来是把 sockets 也看成文件了,回头再看看,学习了
tikazyq
2021-01-29 11:03:07 +08:00
我 xx 都拖了,就给看这
someonedeng
2021-01-29 11:11:52 +08:00
没点进来还以为什么敏感的查询网站呢
Thresh
2021-01-29 11:27:51 +08:00
确实不是我想想中的 3p,差评。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/749387

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX