web-dev-qa-db-fra.com

Comment analyser la commande netstat afin d’obtenir le nom du processus et le PID?

J'essaie de déterminer quelle application utilise un certain port et d'obtenir netstat -tlnp | grep <port> for Linux.

Cette commande renvoie le résultat suivant:

(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:<port>  0.0.0.0:*  LISTEN  3591/Java

J'ai besoin d'obtenir uniquement le nom du processus et le PID, par exemple Java 3591.

Quelle est la meilleure façon de le faire?

Je vous remercie.

21
yart

Essayer

ps -p $(lsof -ti tcp:80) o comm=,pid=

ou

netstat -tlnp | awk '/:80 */ {split($NF,a,"/"); print a[2],a[1]}'
29
Dennis Williamson

(Légèrement en retrait de votre question initiale), pour savoir quel processus écoute un certain numéro de port, j'utilise généralement la commande lsof. Par exemple:

lsof -i tcp:80

Pour afficher uniquement le nom du processus et le PID, analysez la sortie en utilisant:

lsof | tail -n +2 | awk '{print $1 " " $2}'

La commande tail ignore l'en-tête de sortie pendant que awk imprime les colonnes requises.

Pourquoi lsof

Essayer de grep la sortie de netstat peut être compliqué car vous devez vous assurer que la correspondance est établie avec la bonne colonne. Une solution robuste peut être assez longue et difficile (pour moi en tout cas) à produire à la demande. 

lsof vous évite d'avoir à faire correspondre les bons ports et a de nombreuses autres utilisations, par exemple. l'inverse de ce que nous faisons maintenant (savoir quels ports sont utilisés par un processus) ou déterminer quel processus utilise un fichier/un point de montage (ou l'inverse). Voir lsof manpage pour plus d'exemples.

15
Shawn Chin

awk + sed:

awk '{print $7}' | sed "s/\// /g"
2
shuvalov

Vous pouvez aussi vous débarrasser de ce message "vous devez être root" en redirigeant stderr vers/dev/null

netstat -tlnp 2>/dev/null | grep ...
1
Jacek Prucia

... | awk '{print $7;}'| sed 's/\// /g'

1
khachik
netstat -tlnp 2>/dev/null | awk '/\.[0-9]:X/ {print $7}' | sed 's/\//\s/g'

où X dans la partie awk est le port que vous regardez.

0
Wesley Rice

Essayez netstat -p

-p, --program Affiche le PID et le nom du programme auquel chaque socket appartient.

0
ZRJ