V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
cernard
V2EX  ›  分享创造

写了一个生成服务器所有被占用端口及其进程报告的 shell,复制运行即可

  •  
  •   cernard · 2020-10-12 17:15:41 +08:00 · 2705 次点击
    这是一个创建于 1528 天前的主题,其中的信息可能已经有所发展或是发生改变。

    感觉有时候整理服务器的时候需要:

    https://gist.github.com/archichen/8aade04462fe1ffb3ae8e9ca97d0fdc1

    复制一个命令,然后运行,报告在 /tmp/reporter.csv|md

    可以生成 CSV 或者 Markdown,效果如图:

    CSV

    Markdown

    不知道上面的图有没有挂

    https://imgur.com/ivmUhgu

    https://imgur.com/c5E0T1v

    12 条回复    2020-10-15 20:31:32 +08:00
    dingdangnao
        1
    dingdangnao  
       2020-10-12 21:13:10 +08:00
    可以可以
    letitbesqzr
        2
    letitbesqzr  
       2020-10-12 22:48:23 +08:00
    赞,不知道能否写个 ss 命令的。CentOS 7 mini 安装的 没有 netstat (net-tools )了
    talentl
        3
    talentl  
       2020-10-12 23:30:15 +08:00 via iPhone
    @letitbesqzr 不能单独安一下 netstat 吗?
    mikeguan
        4
    mikeguan  
       2020-10-13 01:18:16 +08:00 via Android
    @letitbesqzr ss 照抄楼主作业就行了。
    为什么用 ss:ss 速度比 netstat 好,极端情况 netstat 会很卡的
    richzhu
        5
    richzhu  
       2020-10-13 10:56:37 +08:00
    这是一篇不翻墙就没法看的帖子。。。
    zealinux
        6
    zealinux  
       2020-10-13 14:21:55 +08:00
    (Not all processes could be identified, non-owned process info
    will not be shown, you would have to be root to see it all.)
    cernard
        7
    cernard  
    OP
       2020-10-13 14:31:08 +08:00
    @zealinux #6 非 root 用户看不到所有进程,切到 root 用户下运行即可
    frant1c
        8
    frant1c  
       2020-10-13 15:51:27 +08:00
    (base) [root@localhost ~]# netstat -ntlp | awk 'BEGIN{ system("echo \\|IP\\|Port\\|PID\\|Parameter\\| > /tmp/reporter.md; echo \\|-\\|-\\|-\\|-\\| >> /tmp/reporter.md") } NR>2 {if($4 !~ "::" && $7 != "-"){split($4,ipAndPort,":"); split($7,pidAndProgress,"/"); system("echo \\|"ipAndPort[1]"\\|"ipAndPort[2]"\\|"pidAndProgress[1]"\\|`cat /proc/"pidAndProgress[1]"/cmdline`\\| >> /tmp/reporter.md")}}'
    (base) [root@localhost ~]# cat /tmp/reporter.md
    |IP|Port|PID|Parameter|
    |-|-|-|-|
    |0.0.0.0|139|5042|/usr/sbin/smbd--foreground--no-process-group|
    |0.0.0.0|22|5044|/usr/sbin/sshd-D|
    |127.0.0.1|25|5479|/usr/libexec/postfix/master-w|
    |0.0.0.0|445|5042|/usr/sbin/smbd--foreground--no-process-group|

    只能显示几个服务,redis, mysql, docker 里运行的 web 服务都没有显示呢
    cernard
        9
    cernard  
    OP
       2020-10-13 16:05:47 +08:00
    @frant1c docker 的服务,使用 netstat -ntlp 无法显示进程 PID,列出来也没啥意义。我的脚本是只显示有 PID 的进程,如果你需要通过 docker 容器端口再从 docker ps 中找到对应的服务名,然后添加到 report 中,可以自己改一下
    frant1c
        10
    frant1c  
       2020-10-13 16:30:55 +08:00
    @cernard redis 和 mysql 不是装在 docker 里的
    cernard
        11
    cernard  
    OP
       2020-10-13 16:33:01 +08:00
    @frant1c 🤦‍我服务器上没这,没法调试,你看着改改吧哈哈哈
    cdlnls
        12
    cdlnls  
       2020-10-15 20:31:32 +08:00 via Android
    这个 awk 用得有点 6 啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5796 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 02:42 · PVG 10:42 · LAX 18:42 · JFK 21:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.