lsof是一个十分强悍的linux工具,她被拿来查找什么程序使用了这些文件。在linux系统下,基本上所有的东西都可以被当成文件来用。socket其实也是一种文件了。所以lsof可以拿来查找谁用了某一个端口。具体方式:
lsof-i:port_number|grep"(LISTEN)"
-i是拿来查找和网路相关的文件,":"号是必须的,它是标志你查找的是一个端口。port_number就是你要查找的端标语,例如你要查找是否有程序占用了oracle的窃听端口1521,就可以使用lsof-i:1521|grep"(LISTEN)"。假如有程序早已占用了,这么下边复印的第二个数组就是该程序的进程idlinux查看服务使用端口,第一个数组是进程的名子。
假如只有losf-i:port_number可能会查到好多应用程序,但这种程序实际并没有占用你指定的端口,这种端口只是联接到本机器或则别的机器的该端口。所以要grep"(LISTEN)“,由于一个端口只可能被一个程序占用的,所以这些方式是可靠的。
2)使用netstat命令
你们一定对这个命令比较熟悉了,可能你从没有想到用到来查找哪一个程序的占用了指定的端口。并且netstat-an的确提供了这些功能。所以有问题了一定要想到先去查找man指南红联linux论坛,不过说实话,个别man指南写得让中国人看不懂,那没有办法了,就googe或则baidu一下吧。
执行mannetstat命令linux查看服务使用端口,你会发觉netstat提供了'-p'的选项,这个选项的功能是告诉你那个程序占用了该端口,然而她提供的方式比较奇特是以pid/process_name提供的。pid其实是进程id了,process_name是进程的命令,中间以'/'号分隔。
和里面的诱因一样红帽linux系统下载,我们只查找listen的端口,netstat给我们提供了-l的选项,这个选项不是默认的选项。
下边以1521端口来看如何查找到该程序,我们使用下边的命令:
netstat-lnp|awk'BEGIN{prt=":1521$"}{if($4~prt)print$0}'
在这儿使用awk来匹配第4个数组的模式是为了防止错判。