linux下查看端口占用情況以及服務啟動的目錄


1.先介紹幾個命令:

1. lsof -i:80

  查看80端口的占用情況

  命令返回結果:

    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    nginx 46678 xiaoju 7u IPv4 3292095214 0t0 TCP *:http (LISTEN)

2. netstat -lpn | grep 80

  查看80端口服務端socket占用狀況

  netstat命令介紹見http://man.linuxde.net/netstat,其中注意有-a的時候-l過濾是無效的,所以要加-l就去掉-a。

  命令返回結果:

    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      46678/nginx: worker

3. ll /proc/46778

  查看PID為46778的進程服務運行命令的目錄和命令等信息

  命令介紹見:https://www.douban.com/note/409387658/

 4. pdwx  46778

查看PID=46778的進程的工作目錄.

2. 常見case:

case1: 一台機器上啟動了好多個shop服務,如下,想知道每個服務分別占用什么端口

1
2
3
4
5
[xiaoju@rico- public  order]$ ps -ef |grep shop
xiaoju   15061     1  3 Jun12 ?        07:49:08 ./bin/shop -config=./conf/service.conf.dev.liantiao
xiaoju   17279     1  3 17:54 ?        00:11:43 ./bin/shop -config=./conf/service.conf.dev
xiaoju   19776     1  4 Jun15 ?        06:56:42 /home/xiaoju/shop/output/bin/shop -config=/home/xiaoju/shop/output/conf/service.conf
xiaoju   37919     1  2 Jun15 ?        03:14:06 ./bin/shop -config=/home/xiaoju/shop_8407/output/conf/service.conf.dev.8407

解決辦法: 

1
2
3
4
5
6
7
[xiaoju@rico- public  order]$ netstat -npl | grep shop
(Not all processes could be identified, non-owned process info
  will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:8420            0.0.0.0:*               LISTEN      17279/./bin/shop
tcp        0      0 0.0.0.0:8401            0.0.0.0:*               LISTEN      19776/shop
tcp        0      0 0.0.0.0:8402            0.0.0.0:*               LISTEN      15061/./bin/shop
tcp        0      0 0.0.0.0:8407            0.0.0.0:*               LISTEN      37919/./bin/shop

 這樣就知道每個shop服務占用的是哪個端口(netstat最后一列是pid,pid與ps -ef出來的pid一一對應)

1
2
3
[xiaoju@rico- public  order]$ ll /proc/17279
lrwxrwxrwx  1 xiaoju xiaoju 0 Jun 21 22:56 cwd -> /home/xiaoju/shop/output            // 運行路徑
lrwxrwxrwx  1 xiaoju xiaoju 0 Jun 21 22:53 exe -> /home/xiaoju/shop/output/bin/shop   // 可執行文件<br>-r--r--r--  1 xiaoju xiaoju 0 Jun 21 23:19 cmdline                     // 運行的命令,這個很重要<br>-r--------  1 xiaoju xiaoju 0 Jun 21 23:18 environ                     // 運行時的環境變量<br>

 這個命令返回很多信息,這里只列了命令運行的路徑和可執行文件路徑。

 

case2:我想啟動一個服務,服務需要占用8420端口,不知道這個端口有沒有被占用,如占用是被什么程序占用

解決辦法:

1
2
3
[xiaoju@rico- public  order]$ lsof -i:8420
COMMAND   PID   USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
shop    17279 xiaoju   10u  IPv4 3919976561      0t0  TCP *:8420 (LISTEN)

 如果這條命令沒有返回任何結果那么表明端口沒被占用,如果返回信息,那么我們就可以看到PID

1
2
3
[xiaoju@rico- public  order]$ ll /proc/17279
lrwxrwxrwx  1 xiaoju xiaoju 0 Jun 21 22:56 cwd -> /home/xiaoju/shop/output
lrwxrwxrwx  1 xiaoju xiaoju 0 Jun 21 22:53 exe -> /home/xiaoju/shop/output/bin/shop<br>-r--r--r--  1 xiaoju xiaoju 0 Jun 21 23:19 cmdline

 然后根據PID查到是被什么程序占用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM