Je sais qu'en utilisant la commande:
lsof -i TCP
(ou une variante de paramètres avec lsof) Je peux déterminer quel processus est lié à un port particulier. C'est utile de dire si j'essaie de démarrer quelque chose qui veut se lier à 8080 et que quelqu'un d'autre utilise déjà ce port, mais je ne sais pas quoi.
Existe-t-il un moyen simple de le faire sans utiliser lsof? Je passe du temps à travailler sur de nombreux systèmes et lsof n'est souvent pas installé.
netstat -lnp
listera le pid et le nom du processus à côté de chaque port d'écoute. Cela fonctionnera sous Linux, mais pas tous les autres (comme AIX.) Ajoutez -t
si vous voulez TCP uniquement.
# 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
etc.
Sous AIX, netstat & rmsock peuvent être utilisés pour déterminer la liaison de processus:
[root@aix] 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:
[root@aix] rmsock f1000700025de3b0 tcpcb
The socket 0x25de008 is being held by process 499790 (Java).
Un autre outil disponible sur Linux est ss. Depuis la page man ss sur Fedora:
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.
Exemple de sortie ci-dessous - la dernière colonne montre la liaison du processus:
[root@box] 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))
J'ai été une fois confronté à essayer de déterminer quel processus était derrière un port particulier (cette fois, c'était 8000). J'ai essayé une variété de lsof et netstat, mais j'ai ensuite tenté ma chance et essayé de frapper le port via un navigateur (c'est-à-dire http: // hostname: 8000 / ). Et voilà, un écran de démarrage m'a accueilli et il est devenu évident quel était le processus (pour mémoire, c'était Splunk ).
Une dernière pensée: "ps -e -o pid, args" (YMMV) peut parfois afficher le numéro de port dans la liste des arguments. Grep est votre ami!