Vím, že pomocí příkazu:
lsof -i TCP
(nebo některá varianta parametrů s lsof) Dokážu určit, který proces je vázán na konkrétní port. Toto je užitečné říci, pokud se pokouším začít něco, co se chce vázat k 8080 a někdo jiný už používá tento port, ale nevím co.
Existuje snadný způsob, jak to udělat bez použití lsof? Trávím čas prací na mnoha systémech a lsof není často nainstalován.
netstat -lnp
zobrazí seznam pid a název procesu vedle každého portu pro poslech. Toto bude fungovat pod Linuxem, ale ne všichni ostatní (jako AIX.) Přidat -t
pokud chcete TCP).
# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:24800 0.0.0.0:* LISTEN 27899/synergys
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 3361/python
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 2264/mysqld
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22964/Apache2
tcp 0 0 192.168.99.1:53 0.0.0.0:* LISTEN 3389/named
tcp 0 0 192.168.88.1:53 0.0.0.0:* LISTEN 3389/named
atd.
V systému AIX lze netstat & rmsock použít k určení procesní vazby:
[[email protected]] netstat -Ana|grep LISTEN|grep 80
f100070000280bb0 tcp4 0 0 *.37 *.* LISTEN
f1000700025de3b0 tcp 0 0 *.80 *.* LISTEN
f1000700002803b0 tcp4 0 0 *.111 *.* LISTEN
f1000700021b33b0 tcp4 0 0 127.0.0.1.32780 *.* LISTEN
# Port 80 maps to f1000700025de3b0 above, so we type:
[[email protected]] rmsock f1000700025de3b0 tcpcb
The socket 0x25de008 is being held by process 499790 (Java).
Dalším nástrojem dostupným v systému Linux je ss. Ze stránky ss man na Fedoře:
NAME
ss - another utility to investigate sockets
SYNOPSIS
ss [options] [ FILTER ]
DESCRIPTION
ss is used to dump socket statistics. It allows showing information
similar to netstat. It can display more TCP and state informations
than other tools.
Příklad výstupu níže - poslední sloupec ukazuje procesní vazbu:
[[email protected]] ss -ap
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::http :::* users:(("httpd",20891,4),("httpd",20894,4),("httpd",20895,4),("httpd",20896,4)
LISTEN 0 128 127.0.0.1:munin *:* users:(("munin-node",1278,5))
LISTEN 0 128 :::ssh :::* users:(("sshd",1175,4))
LISTEN 0 128 *:ssh *:* users:(("sshd",1175,3))
LISTEN 0 10 127.0.0.1:smtp *:* users:(("sendmail",1199,4))
LISTEN 0 128 127.0.0.1:x11-ssh-offset *:* users:(("sshd",25734,8))
LISTEN 0 128 ::1:x11-ssh-offset :::* users:(("sshd",25734,7))
Jednou jsem musel čelit pokusu zjistit, jaký proces stojí za konkrétním portem (tentokrát to bylo 8000). Vyzkoušel jsem řadu lsof a netstat, ale pak jsem využil šanci a pokusil se zasáhnout port přes prohlížeč (tj. http: // název hostitele: 8000 / ). Hle, aj, úvodní obrazovka mě pozdravila a bylo zřejmé, co to bylo za proces (pro záznam to bylo Splunk ).
Ještě jedna myšlenka: "ps -e -o pid, args" (YMMV) může někdy zobrazit číslo portu v seznamu argumentů. Grep je tvůj přítel!