본문으로 건너뛰기

Linux에서 Listening Port 확인하는 방법(netstat, ss, lsof)

· 약 5분

네트웍이나 특정 서비스 통신이슈를 확인할때, 일반적으로 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:

netstat command

자주 확인하게 될 정보는

  • Proto - 프로토콜 종류
  • Local Address - listening인 로컬 IP와Port
  • PID/Program name - PID와 서비스명

grep을 이용하여 결과값에 대한 필터링이 가능합니다. 아래와 같이 TCP프로토콜로 22번 포트를 사용중인 서비스를 보고싶다면 아래와 같은 명령을 이용할수 있습니다.

sudo netstat -tnlp | grep :22

출력결과에서 볼수 있다싶이 22번 포트는 SSH가 사용중입니다.

Checking Listening Ports and Services in Use(netstat,ss,lsof)

요즘은 ss, ip등 명령으로 netstat를 대체하는 추세이기는 하나 대부분 OS버전에서 여전히 사용가능하며 자주 이용하게되는 명령입니다.

ss 명령어

ss(Socket Statistics)는 socket정보조회가 가능한 또 다른 툴이며 netstat 대체목적으로 나온 명령입니다.

netstat보다 빠르며고 상대적으로 깔끔한 포맷으로 socket정보를 제공합니다. 명령어 옵션도 netstat랑 비슷합니다.

sudo ss -tunlp

output은 netstat와 비슷하시지만 포맷차이를 확인할수 있음.

Checking Listening Ports and Services in Use(netstat,ss,lsof)

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파일들만 조회

Checking Listening Ports and Services in Use(netstat,ss,lsof)

특정 포트 필터링

sudo lsof -nP -iTCP:3306 -sTCP:LISTEN

출력 결과에서 MySQL 서비스가 해당 포트를 사용 중임을 확인할 수 있습니다.

Checking Listening Ports and Services in Use(netstat,ss,lsof)

kill 명령어

특정포트가 장애나 이슈의 원인이 될 때, 혹은 단순 port release가 필요한 경우, 아래와 같이 kill명령으로 process 죽일수가 있습니다.

kill -9 [PID]

하나의 서버에서 여러 개의 서비스가 비슷한 이름으로 실행되고 있을 수 있는데, 이럴 경우 하나하나 PID를 찾아서 종료하는 것은 번거롭습니다. 이럴 때는 grep을 이용해 여러개의 서비스를 한 번에 종료할 수 있습니다.

예를 들어, spring이 포함된 모든 프로세스를 찾아 종료하려면 다음 명령을 사용할 수 있습니다.

ps -ef | grep spring | grep -v grep |awk '{print $2}' | xargs kill

이상으로 netstatsslsof 명령어를 사용하여 listening 포트를 확인하고, 해당 포트를 사용하는 서비스를 찾는 방법을 소개했습니다.