본문 바로가기
Tools2026년 7월 4일4분 읽기

lsof로 포트·파일 누가 잡고 있는지 찾기

YS
김영삼
조회 711
lsof로 포트·파일 누가 잡고 있는지 찾기

핵심 요약

리눅스에서 "모든 것은 파일"이라 lsof(list open files)는 열린 파일·소켓·포트를 전부 추적할 수 있다. 어떤 프로세스가 특정 포트를 점유했는지, 삭제했는데 디스크가 안 비는 이유가 무엇인지, 마운트 해제를 막는 프로세스가 뭔지를 한 번에 찾는다.

1. 포트를 누가 쓰나

lsof -i :3000              # 3000 포트를 쓰는 프로세스
lsof -i tcp:8080           # TCP 8080만
lsof -i -P -n | grep LISTEN  # 리스닝 중인 모든 포트

-P는 포트를 번호 그대로, -n은 IP를 숫자로 표시해 빠르다. PID를 얻으면 kill로 종료.

2. 파일을 누가 잡고 있나

lsof /var/log/app.log      # 이 파일을 연 프로세스
lsof +D /var/data          # 디렉터리 이하 전부(느림)
lsof -u deploy             # deploy 사용자가 연 것 전부

3. "지웠는데 디스크가 안 빈다"

# 삭제됐지만 프로세스가 아직 붙잡은 파일
lsof +L1
# 또는
lsof | grep deleted

파일을 rm해도 열어둔 프로세스가 있으면 공간이 반환되지 않는다(특히 로그). 해당 프로세스를 재시작하거나 로그를 truncate해야 실제로 빈다.

4. 자주 쓰는 조합

목적명령
특정 프로세스가 연 것lsof -p PID
네트워크 연결 전체lsof -i
포트 점유 PID만lsof -t -i:3000
바로 죽이기kill -9 $(lsof -t -i:3000)

5. 대안 · 팁

  • 포트만 빠르게 볼 땐 ss -tulpn(요즘 netstat보다 권장)도 좋다
  • lsof -t는 PID만 출력해 스크립트·파이프에 쓰기 좋다
  • 권한 문제로 일부가 안 보이면 sudo로 실행

자주 묻는 질문

lsof와 ss(netstat) 중 뭘 쓰나요?

순수하게 포트·소켓 상태만 빠르게 보려면 ss -tulpn이 가볍고 빠릅니다. 파일·소켓·삭제된 파일까지 폭넓게 추적하려면 lsof가 만능입니다. 포트 점유 범인 찾기는 둘 다 되고, 파일 핸들 문제는 lsof가 유일합니다.

파일을 rm했는데 df 용량이 그대로예요.

프로세스가 그 파일을 아직 열고 있으면 inode가 유지돼 공간이 반환되지 않습니다. lsof | grep deleted로 범인을 찾아 재시작하거나, 로그라면 : > file로 내용을 비우면 즉시 반환됩니다.

lsof -i:3000이 아무것도 안 나와요.

다른 사용자(root 등)가 연 소켓은 권한 때문에 안 보일 수 있습니다. sudo lsof -i:3000으로 다시 시도하세요. 그래도 없으면 실제로 그 포트를 쓰는 프로세스가 없거나 다른 인터페이스에 바인딩된 것입니다.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록