I'm trying to determine what application is using certain port and get netstat -tlnp | grep <port> for Linux
.
This command return the following output:
(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
I need to get in result only name of the process and PID, i.e java 3591.
What is best way to do it?
Thank you.
... | awk '{print $7;}'| sed 's/\// /g'
(Detracting slightly from your original question), to find out which process listens to a certain port number, I usually use the
lsof
command. For example:To show only the process name and PID, parse the output using:
The
tail
command skips the output header whileawk
prints out the required columns.Why
lsof
Trying to
grep
the output ofnetstat
can be messy as you'll need to make sure you're matching against the correct column. A robust solution can be rather long winded and difficult (for me anyway) to produce on-demand.lsof
saves you the trouble of matching the right ports, and has lots of other uses too, e.g. the inverse of what we're doing now (find out which ports are being used by a process), or determining which process is using a file / mount point (or the inverse). See lsof manpage for more examples.awk + sed:
Try
netstat -p
-p, --program Show the PID and name of the program to which each socket belongs.
where X in the awk bit is the port you're looking at.
Also you can get rid of that "you have to be root" message by redirecting stderr to /dev/null