写了个 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

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

4878 次点击
所在节点    Linux
27 条回复
yuananf
2021-01-29 00:21:46 +08:00
看标题准备举报了,进来一看,打扰了
jinliming2
2021-01-29 00:37:58 +08:00
emmmm,alias 里写个 curl 真的不觉得慢吗……要是网突然断了怎么办……
我是习惯于直接 lsof 。
比如端口 lsof -i:9000 、lsof -iTCP:9000 、lsof -iUDP:9000
查 PID 的端口:lsof -i -ap1234 、lsof -iTCP -ap1234 、lsof -iUDP -ap1234
查进程名的端口:lsof -i -ac node 、lsof -i:TCP -ac node 、lsof -i:UDP -ac node 。并且支持正则:lsof -i -ac '/Node$/i'
sleepm
2021-01-29 01:17:20 +08:00
ss -antpl
netstat -luntap
lsof 最方便,不用装默认就有
Pastsong
2021-01-29 01:22:44 +08:00
上来就跑一个网络地址的未知脚本也太不安全了吧。。
felixcode
2021-01-29 02:07:26 +08:00
ls 命令参数太多输出列太多也做个 curl 脚本?
fzinfz
2021-01-29 02:29:26 +08:00
代码有点长。。。我写了个一行版本:
netstat_keyword(){ netstat -lntup | grep --color -P "\b$1\b"; }

感觉也能实现楼主需求?
ihwbunny
2021-01-29 04:30:20 +08:00
👍 鼓励楼主
df4VW
2021-01-29 04:53:15 +08:00
确实不是我想的 3p
blogfeng
2021-01-29 07:57:54 +08:00
进来前想举报,进来后更想举报。
css3
2021-01-29 08:17:54 +08:00
@jinliming2 学习了,老哥
nieqibest
2021-01-29 08:20:45 +08:00
@sleepm 啥版本默认装 lsof
masker
2021-01-29 08:35:16 +08:00
这。。。。。。。
sleepm
2021-01-29 09:17:34 +08:00
@nieqibest ubuntu 20.10 还有 20.04.1 LTS
DevAlex
2021-01-29 09:19:59 +08:00
略感失望 0.0
Tumblr
2021-01-29 09:34:51 +08:00
抱着猎奇的心情来😍,带着失望的心情走😌
40EaE5uJO3Xt1VVa
2021-01-29 09:37:27 +08:00
centos 好像没有默认张 lsof
0ZXYDDu796nVCFxq
2021-01-29 09:41:14 +08:00
Shell 配置里直接写个远程脚本……
matrix67
2021-01-29 09:44:02 +08:00
@gstqc #17 的确不妥,而且现在还有个 sudo 提权漏洞,分分钟给你....
ScotGu
2021-01-29 10:17:49 +08:00
哎哟~ 额, 学习了!谢谢 LZ 分享。

转头骂骂咧咧走开了。
Aynamic
2021-01-29 10:25:20 +08:00
嫌弃列多用 awk 选择需要的列不就好了?

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

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

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

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

© 2021 V2EX