comment grep à l'écoute sur le port 80, qui peut également filtrer les autres port contenir 80 comme 8080 8088 ...?
Je veux utiliser bash pour grep si un processus est en écoute sur le port 80,mais maintenant je tombe sur autre numéro de port qui m'agace. Comment puis-je filtrer cette grep?
netstat -ant|grep LISTEN|grep 80|wc -l
Il génère également d'autres documents tels que les 8080 8088 et ainsi de suite.
OriginalL'auteur clevertension | 2012-05-17
Vous devez vous connecter pour publier un commentaire.
Je suis à la recherche à la sortie de mon
netstat
de commande, et de voir cela:- Je considérer que le port est le dernier numéro de la cinq la partie en pointillés de sortie. Cela signifie que
ramasser seul le port 80. Le
\.
dit de ramasser de la période. (Normalement, le délai moyen n'importe quel caractère dans les expressions régulières). Et, en mettant un espace après le80
, vous aurez la garantie que vous n'allez pas à ramasser le port 8080. En fait, vous avez la garantie que vous n'allez pas à ramasser des adresses IP qui ont.80
.En fait, je vous recommande d'utiliser
awk
au lieu degrep
. Avecawk
, vous pouvez spécifier les champs et faire un peu plus de traitement:Avec
awk
chaque colonne devient automatiquement un champ distinct. Champ #6 (6$awk) est celui qui ditESTABLISHED
,CLOSED
,LISTEN
. Champ$4
est la première colonne de l'adresse IP.Ci-dessus, je suis à la recherche pour les lignes qui ont le mot ÉCOUTER dans le sixième champ, et où les acteurs de terrain n ° 4 correspond à l'expression régulière
\.80$
. Le$
est un point d'ancrage à la fin de la chaîne, et le\.
est de ramasser un point décimal et ne représente n'importe quel caractère. Leawk
commande imprime automatiquement à chaque ligne qui correspond, donc je n'ai pas de préciser que.Awk est vraiment un langage de programmation. Il suppose une lecture en boucle pour chaque ligne dans le fichier. Vous pouvez avoir un
BEGIN
clause qui est exécutée avant que le fichier est en lecture et unEND
clause qui s'exécute après le fichier a été lu. Les différents champs sont numérotés et représentés avec un signe dollar. Le spécial$0
variable représente l'ensemble de la ligne. Variables spéciales comme comme NF vous donne le nombre de champs dans une ligne, et le N ° vous donne le nombre de lignes à lire. Vous avez aussi toute une série de fonctions pour aider à analyser le texte, etc. Voici une véritable version de laawk
script que, fondamentalement, dispose de tout pour vous, et ne sa propre ligne de comptage, de sorte que vous n'avez pas de tube dewc -l
.:Appendice
OP obtient le résultat suivant:
Dans ce cas, essayez de:
Où la
\.
est remplacé par un:
ou...Qui utilise
[\.:]
qui va l'obtenir si c'est un deux-points ou une période. Heck, pourrait tout aussi bien aller tout le chemin...La
[^0-9]
signifie pas un caractère numérique. Vous ne pouvez pas vous tromper avec ça. De cette façon, si c'est une période, une virgule, un point-virgule, une virgule, ou quel que soit le séparateur de votre version denetstat
utilise, il va fonctionner.netstat -ant | awk '$6 == "ÉCOUTER" && $4 ~ /(\.|\:)8080$/' peut être mieux
Pas besoin de s'échapper du côlon.
Mon
netstat
met un point et non une virgule. Il suffit de changer la commande de$ netstat -ant | awk '$6 == "LISTEN" && $4 ~ /:80$/' | wc -l
. Que doit gérer le problème. Si vous n'avez ceci:$ netstat -ant | awk '$6 == "LISTEN" && $4 ~ /[\.:]80$/' | wc -l
, vous obtiendrais sinetstat
utilise une virgule ou un point. En fait, voir l'appendice sur ma réponse.OriginalL'auteur David W.
Au lieu de grepping la sortie de
netstat
-- demandant plus d'informations que vous avez besoin, puis de les jeter en vrac, demandez simplement àfuser
le processus qui a le port que vous vous souciez d'ouverture:Si vous ne se soucient de savoir si un processus a le port est ouvert, vous pouvez le faire encore plus rapidement et efficacement, sans avoir besoin de processus de sortie, à l'aide de la
-q
argument de l'unité de fusion et d'exploitation sur son statut de sortie:Si vous voulez savoir combien de connexions il y a un distance port, l'unité de fusion peut le faire aussi:
...ou des connexions sur un port distant sur un hôte spécifique:
En bref -- utiliser le bon outil pour le travail à la requête pour les paramètres que vous souhaitez directement vous évite d'avoir à faire à base de texte de filtrage dans la première place.
Tout à fait le droit-cette réponse est donnée pour Linux (système d'exploitation pour lequel la question est identifié).
OriginalL'auteur Charles Duffy
Utilisation
grep ":80 "
au lieu degrep 80
:
. Ce n'est pas spécial à grep.Ta, mise à jour de réponse. Je suis un peu lâche comme ça - en cas de doute, s'échapper 😉
OriginalL'auteur laher
Vous pouvez prendre avantage du fait que les ports sont précédées par un deux-points (comme
:80
). Le jeûne chose serait alors quelque chose comme:De cette façon, vous n'êtes pas en invoquant
grep
deux fois. Aussi, grep a la capacité de compter les matchs avec-c
, de sorte que vous pouvez l'utiliser à la place dewc
:OriginalL'auteur Tim Pote
La commande de votre recherche pour:
netstat -ntpl | grep ':PORT '
Exemple:
OriginalL'auteur Gabriel Laden
Si vous voulez qu'il soit plus robuste, vous pouvez le faire
OriginalL'auteur pizza