본문 바로가기
C.W.K.
Stream
Lesson 09 of 10 · published

lsof: 누가 뭘 쓰는지

~10 min · lsof, files, ports

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

열린 파일부터 소켓과 장치까지 추적해

lsof는 프로세스가 열어 둔 파일 디스크립터를 보여 줘. 일반 파일뿐 아니라 소켓, 파이프, 터미널도 같은 표에 나타나므로 어느 프로세스가 포트를 열었는지, 누가 볼륨을 붙잡고 있는지 추적할 수 있어.

자주 묻는 질문에 맞춰 명령을 골라

  • lsof -i :8080을 실행하면 8080번 포트에서 수신 중이거나 그 포트에 연결된 프로세스를 볼 수 있어.
  • lsof -i TCP:LISTEN은 현재 TCP 연결을 기다리는 모든 프로세스를 보여 줘.
  • lsof -nP -iTCP -sTCP:LISTEN은 DNS 조회를 생략하고 IP 주소와 포트 번호를 숫자로 표시해서 더 빠르고 분명하게 확인할 수 있어.
  • lsof /Volumes/Backup은 해당 볼륨 안의 파일을 열어 둔 프로세스를 찾아 줘.
  • lsof -p PID는 지정한 프로세스가 가진 모든 파일 디스크립터를 보여 줘.
  • lsof -u $USER는 현재 사용자가 실행한 프로세스가 열어 둔 파일을 모아서 보여 줘.
  • lsof | grep deleted는 파일 이름은 삭제됐지만 프로세스가 아직 열어 둔 파일을 찾을 때 사용해. 파일을 지웠는데도 디스크 공간이 돌아오지 않을 때 특히 유용해.

흔한 장애를 이렇게 좁혀 가

  1. 포트가 이미 사용 중이라면 lsof -i :3000으로 PID를 확인하고, 더는 필요 없는 개발 서버인지 확인한 뒤 정상적으로 종료해.
  2. 볼륨을 마운트 해제할 수 없다면 lsof /Volumes/Disk로 열린 파일을 찾고, 그 파일을 사용하는 앱이나 작업을 먼저 닫아.
  3. df는 디스크가 찼다고 하는데 du 합계는 작다면 lsof | grep deleted로 삭제된 파일을 계속 쥔 프로세스를 찾아. 가능하면 로그를 다시 열게 하거나 정상 재시작해서 공간을 해제해.

운영체제에 맞는 도구를 골라

Linux에서 소켓 상태만 볼 때는 ss가 더 직접적이고, macOS에서는 lsof가 흔한 선택이야. 반복해서 쓰는 조회 명령을 별칭으로 묶어도 좋지만, 결과는 권한에 따라 일부만 보일 수 있다는 점을 기억해.

열려 있음과 사용 중을 구분해

프로세스가 파일 디스크립터를 가지고 있어도 지금 읽거나 쓰는 중이라는 뜻은 아니야. 반대로 아주 짧게 열었다 닫는 파일은 한 번의 스냅샷에서 놓칠 수 있어. 재현 시각을 맞춰 여러 번 보거나 파일 시스템·네트워크 추적 도구와 함께 써.

삭제한 파일이 공간을 계속 차지할 수 있어

Unix에서는 열린 파일을 unlink해도 마지막 파일 디스크립터가 닫힐 때까지 데이터 블록이 남아. 그래서 du 합계는 작아졌는데 df 여유 공간은 돌아오지 않을 수 있어. 해당 프로세스를 무작정 죽이기보다 로그를 다시 여는 기능이나 정상 재시작 경로를 먼저 찾아.

Code

포트 잡고 있는 거 찾기·bash
lsof -i :3000
lsof -nP -iTCP -sTCP:LISTEN | head
alias ports='lsof -nP -iTCP -sTCP:LISTEN' >> ~/.zshrc

External links

Exercise

lsof -nP -iTCP -sTCP:LISTEN으로 현재 TCP 수신 소켓을 보고 각 PID와 명령을 식별해. nc -l 9999로 시험 수신기를 열었다면 lsof -i :9999로 정확한 프로세스를 확인한 뒤 그 시험 작업만 종료해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.