Come usare fuser e netstat su Linux/Ubuntu

Iniziamo ad usare la shell di comandi Linux/Ubuntu per gestire le installazioni di Domotica più evolute. Useremo Ubuntu per applicazioni complesse che non potrebbero mai girare su una semplice scheda Arduino.

In questo post impareremo a usare fuser nel terminale di Linux.

Come scoprire i programmi che bloccano una certa porta su Linux?

Ammesso che non siate già appassionati di Ubuntu o Fedora o altre “distro” Linux voglio iniziare con una serie di brevi articoli per risolvere alcuni piccoli ma noiosi problemi che rallentano il lavoro di programmazione. Tra i tanti, secondo me il più comune è Port already used  (Porta già occupata) che appare quande lanciate un server Python/Django o NodeJs.

Detto in modo facile, avete lanciato e dimenticato un programma che sta bloccando proprio la porta che vi serve. Ad esempio la porta 3000 di Nodejs o la 8000 di Python/Django.

Potremmo lanciare il comando ps -ea per andare a spulciare tra tutti i programmi in esecuzione ma perderemmo troppo tempo. Scriviamo invece sul PROMPT di Linux (che si chiama SHELL) il comando seguente e otterremo in un instante il PID del programma:

fuser -i  :3000

oppure

fuser -i  :8000

facendo attenzione a lasciare uno spazio prima dei “due punti”. Riceveremo un messaggio del tipo:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 16176 
utente 22u IPv4 26591333 0t0 TCP :3000 (LISTEN)

e da questo siamo in grado di capire che un server node sta girando in sottofondo (come demon) con un PID = 16176.
Per bloccarlo ci basta scrivere:

kill -9 16176 (o qualunque numero sia il PID)

facendo come sempre attenzione agli spazi. In alternativa puoi usare invece netstat insieme a grep per cercare il programma che occupa la porte 80 o 3000 o 8000.

sudo netstat -ltnp | grep 80
sudo netstat -ltnp | grep 3000
sudo netstat -ltnp | grep 8000

Dopo avere ottenuto il messaggio:

tcp-0-0-0-0-0-0-3000-0-0-0-0-listen-16176-node
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 16176/node

possiamo procedere con il solito comando kill -9 PID per “stoppare” il programma che ci dà fastidio.