V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
cernard

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

  •  
  •   cernard · Oct 12, 2020 · 3332 views
    This topic created in 2023 days ago, the information mentioned may be changed or developed.

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

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

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

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

    CSV

    Markdown

    不知道上面的图有没有挂

    https://imgur.com/ivmUhgu

    https://imgur.com/c5E0T1v

    12 replies    2020-10-15 20:31:32 +08:00
    dingdangnao
        1
    dingdangnao  
       Oct 12, 2020
    可以可以
    letitbesqzr
        2
    letitbesqzr  
       Oct 12, 2020
    赞,不知道能否写个 ss 命令的。CentOS 7 mini 安装的 没有 netstat (net-tools )了
    talentl
        3
    talentl  
       Oct 12, 2020 via iPhone
    @letitbesqzr 不能单独安一下 netstat 吗?
    mikeguan
        4
    mikeguan  
       Oct 13, 2020 via Android
    @letitbesqzr ss 照抄楼主作业就行了。
    为什么用 ss:ss 速度比 netstat 好,极端情况 netstat 会很卡的
    richzhu
        5
    richzhu  
       Oct 13, 2020
    这是一篇不翻墙就没法看的帖子。。。
    zealinux
        6
    zealinux  
       Oct 13, 2020
    (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
       Oct 13, 2020
    @zealinux #6 非 root 用户看不到所有进程,切到 root 用户下运行即可
    frant1c
        8
    frant1c  
       Oct 13, 2020
    (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
       Oct 13, 2020
    @frant1c docker 的服务,使用 netstat -ntlp 无法显示进程 PID,列出来也没啥意义。我的脚本是只显示有 PID 的进程,如果你需要通过 docker 容器端口再从 docker ps 中找到对应的服务名,然后添加到 report 中,可以自己改一下
    frant1c
        10
    frant1c  
       Oct 13, 2020
    @cernard redis 和 mysql 不是装在 docker 里的
    cernard
        11
    cernard  
    OP
       Oct 13, 2020
    @frant1c 🤦‍我服务器上没这,没法调试,你看着改改吧哈哈哈
    cctv6
        12
    cctv6  
       Oct 15, 2020 via Android
    这个 awk 用得有点 6 啊
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1421 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 17:09 · PVG 01:09 · LAX 10:09 · JFK 13:09
    ♥ Do have faith in what you're doing.