zoukankan      html  css  js  c++  java
  • 查找linux系统下的端口被占用进程的两种方法 【转】

    在linux下开发时,你的软件可能要使用某一个端口,或者想查找某一个端口是否被占用。需要怎么做呢??这的确是一个比较烦恼的问题,我也此为这个苦恼过。但是通过查找man手册,还是同事的交流。总结出来两种方法:

    1)使用lsof命令

    lsof是一个非常强大的linux工具,她被用来查找哪些程序使用了那些文件。在linux系统下,基本上所有的东西都可以被当作文件来用。socket当然也是一种文件了。所以lsof可以用来查找谁用了某一个端口。具体方法:

        lsof -i :port_number |grep "(LISTEN)"

    -i是用来查找和网络相关的文件,":"号是必须的,它是标志你查找的是一个端口。port_number就是你要查找的端口号,譬如你要查找是否有程序占用了oracle的监听端口1521,就可以使用lsof -i :1521 |grep "(LISTEN)"。如果有程序已经占用了,那么下面打印的第二个字段就是该程序的进程id,第一个字段是进程的名字。

    如果只有losf -i :port_number可能会查到很多应用程序,但这些程序实际并没有占用你指定的端口,这些端口只是连接到本机器或者别的机器的该端口。所以要grep "(LISTEN)“,因为一个端口只可能被一个程序占用的,所以这种方法是可靠的。

    2)使用netstat 命令

    大家一定对这个命令比较熟悉了,可能你从没有想到用到来查找哪一个程序的占用了指定的端口。但是netstat -an 的确提供了这种功能。所以有问题了一定要想到先去查找man手册,不过说实话,某些man手册写得让中国人看不懂,那没有办法了,就googe或者baidu一下吧。

    执行man netstat命令,你会发现netstat 提供了'-p'的选项,这个选项的功能是告诉你哪个程序占用了该端口,但是她提供的形式比较古怪是以pid/process_name提供的。pid当然是进程id了,process_name是进程的命令,中间以'/'号分隔。

    和上面的原因一样,我们只查找listen的端口,netstat 给我们提供了-l的选项,这个选项不是默认的选项。

    下面以1521端口来看怎么查找到该程序,我们使用下面的命令:

    netstat -lnp|awk 'BEGIN{prt=":1521$"}{if ($4 ~ prt) print $0}'

    在这里使用awk来匹配第4个字段的模式是为了避免误判。

    小结:许多问题只要多读读man手册就可以搞定了,要想成长起来就自己多看看man手册。

    (补充说明:上述两条命令lsof在root下执行才有显示,netstat -lnp命令在普通用户下显示信息不全,也需要用root用户才能看到全部的信息)

  • 相关阅读:
    Redis源码分析(二十一)--- anet网络通信的封装
    leetcode 总结part1
    leetcode String to Integer (atoi)
    leetcode 165. Compare Version Numbers
    leetcode 189. Rotate Array
    leetcode 168. Excel Sheet Column Title
    leetcode 155. Min Stack
    leetcode 228. Summary Ranges
    leetcode 204. Count Primes
    leetcode 6. ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/chenjunjie/p/4425214.html
Copyright © 2011-2022 走看看