Comment analyser commande netstat dans le but d'obtenir le nom du processus et PID-il?
Je suis en train de déterminer quelle application à l'aide de certains de 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 en conséquence, seul le nom du processus et de la PID, j'.e java 3591.
Ce qui est le meilleur moyen de le faire?
Merci.
Vous devez vous connecter pour publier un commentaire.
Essayer
ou
sudo
. Je l'ai modifié un peu:sudo netstat -tlnp | awk '/:80 */ {split($NF,a,"/"); print a[1]}' | xargs ps x -p
echo "tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1080/nginx: master" | awk '/:80 */ {split($NF,a,"/"); print a[2],a[1]}'
retournemaster
.netstat
comprend plus d'un espace entre les colonnes pour moi, l'ajout d'un multispace délimiteur à la commande AWK semble fonctionner:netstat -tlnp | awk -F ' ' '/:80 */ {split($NF,a,"/"); print a[2],a[1]}'
(c'est deux places dans l'argument de-F
)(En altérer légèrement de l'original de votre question), à savoir le processus qui est à l'écoute pour un certain numéro de port, j'ai l'habitude d'utiliser le
lsof
de commande. Par exemple:Pour afficher uniquement le nom de processus et PID, analyser les données en sortie à l'aide de:
La
tail
commande ignore la sortie de la tête, alors queawk
imprime les colonnes requises.Pourquoi
lsof
Essayer de
grep
la sortie denetstat
peut être salissant que vous aurez besoin pour vous assurer que vous êtes correspondant à l'encontre de la bonne colonne. Une solution robuste qui peut être un peu longue haleine et difficile (pour moi en tout cas) pour produire à la demande.lsof
vous évite de faire concorder le droit de ports, et a beaucoup d'autres utilisations aussi, par exemple, l'inverse de ce que nous faisons aujourd'hui (savoir quels ports sont utilisés par un processus), ou de déterminer le processus qui est à l'aide d'un fichier /point de montage (ou l'inverse). Voir lsof page de manuel pour plus d'exemples.awk + sed:
... | awk '{print $7;}'| sed 's/\///g'
Aussi, vous pouvez se débarrasser de que "vous devez être root" message par redirection de stderr vers /dev/null
où X dans le awk bits est le port que vous êtes en train de regarder.
Essayer
netstat -p
-p, --programme affiche le PID et le nom du programme à laquelle chaque socket appartient.