Linux에서 Listening Port 확인하는 방법(netstat, ss, lsof)
네트웍이나 특정 서비스 통신이슈를 확인할때, 일반적으로 port가 살아있는지부터 확인하게 되죠.
아래 netstat
, ss
, lsof
등 명령을 사용하여 어떠한 서비스가 어떠한 포트를 사용중인지 확인하는 방법을 간단히 소개합니다.
netstat
명령어
netstat
는 통신관련된 다양한 정보를 제공하는 명령이며 사용중인 포트 및 socket상태 확인이 가능합니다. 사용법은 아래와 같습니다.
sudo netstat -tunlp
이 명령어의 주요 옵션은 다음과 같습니다:
-
-t
- tcp통신포트 -
-u
-udp통신포트 -
-n
-host,서비스,유저 등을 숫자(ip,port,UID)로 표시 -
-l
-listening port만 노출 -
-p
-PID와 서비스명 노출
output:
자주 확인하게 될 정보는
Proto
- 프로토콜 종류Local Address
- listening인 로컬 IP와PortPID/Program name
- PID와 서비스명
grep
을 이용하여 결과값에 대한 필터링이 가능합니다. 아래와 같이 TCP프로토콜로 22번 포트를 사용중인 서비스를 보고싶다면 아래와 같은 명령을 이용할수 있습니다.
sudo netstat -tnlp | grep :22
출력결과에서 볼수 있다싶이 22번 포트는 SSH가 사용중입니다.
요즘은 ss
, ip
등 명령으로 netstat
를 대체하는 추세이기는 하나 대부분 OS버전에서 여전히 사용가능하며 자주 이용하게되는 명령입니다.
ss
명령어
ss
(Socket Statistics)는 socket정보조회가 가능한 또 다른 툴이며 netstat 대체목적으로 나온 명령입니다.
netstat보다 빠르며고 상대적으로 깔끔한 포맷으로 socket정보를 제공합니다. 명령어 옵션도 netstat랑 비슷합니다.
sudo ss -tunlp
output은 netstat와 비슷하시지만 포맷차이를 확인할수 있음.
lsof
명령어
lsof
(List Open Files)는 프로세스가 열고있는 파일의 상세한 정보를 제공하는 유용한 툴입니다.
"Everything is a file" Unix계열 운영체제의 특징이며 socket도 일종의 파일이므로 관련 조회가 가능합니다.
lsof
명령어로 listening port확인
sudo lsof -nP -iTCP -sTCP:LISTEN
사용된 옵션은 아래와 같습니다.
-n
-host명 대신 ip로 표현。-p
-서비스명 대신 port번호로 표시-iTCP -sTCP:LISTEN
- TCP프로토콜로 LISTEN중인 socket파일들만 조회
특정 포트 필터링
sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
출력 결과에서 MySQL 서비스가 해당 포트를 사용 중임을 확인할 수 있습니다.
kill
명령어
특정포트가 장애나 이슈의 원인이 될 때, 혹은 단순 port release가 필요한 경우, 아래와 같이 kill
명령으로 process 죽일수가 있습니다.
kill -9 [PID]
하나의 서버에서 여러 개의 서비스가 비슷한 이름으로 실행되고 있을 수 있는데, 이럴 경우 하나하나 PID를 찾아서 종료하는 것은 번거롭습니다. 이럴 때는 grep
을 이용해 여러개의 서비스를 한 번에 종료할 수 있습니다.
예를 들어, spring
이 포함된 모든 프로세스를 찾아 종료하려면 다음 명령을 사용할 수 있습니다.
ps -ef | grep spring | grep -v grep |awk '{print $2}' | xargs kill
이상으로 netstat
,ss
,lsof
명령 어를 사용하여 listening 포트를 확인하고, 해당 포트를 사용하는 서비스를 찾는 방법을 소개했습니다.