열린 파일부터 소켓과 장치까지 추적해
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는 파일 이름은 삭제됐지만 프로세스가 아직 열어 둔 파일을 찾을 때 사용해. 파일을 지웠는데도 디스크 공간이 돌아오지 않을 때 특히 유용해.
흔한 장애를 이렇게 좁혀 가
- 포트가 이미 사용 중이라면
lsof -i :3000으로 PID를 확인하고, 더는 필요 없는 개발 서버인지 확인한 뒤 정상적으로 종료해. - 볼륨을 마운트 해제할 수 없다면
lsof /Volumes/Disk로 열린 파일을 찾고, 그 파일을 사용하는 앱이나 작업을 먼저 닫아. df는 디스크가 찼다고 하는데du합계는 작다면lsof | grep deleted로 삭제된 파일을 계속 쥔 프로세스를 찾아. 가능하면 로그를 다시 열게 하거나 정상 재시작해서 공간을 해제해.
운영체제에 맞는 도구를 골라
Linux에서 소켓 상태만 볼 때는 ss가 더 직접적이고, macOS에서는 lsof가 흔한 선택이야. 반복해서 쓰는 조회 명령을 별칭으로 묶어도 좋지만, 결과는 권한에 따라 일부만 보일 수 있다는 점을 기억해.
열려 있음과 사용 중을 구분해
프로세스가 파일 디스크립터를 가지고 있어도 지금 읽거나 쓰는 중이라는 뜻은 아니야. 반대로 아주 짧게 열었다 닫는 파일은 한 번의 스냅샷에서 놓칠 수 있어. 재현 시각을 맞춰 여러 번 보거나 파일 시스템·네트워크 추적 도구와 함께 써.
삭제한 파일이 공간을 계속 차지할 수 있어
Unix에서는 열린 파일을 unlink해도 마지막 파일 디스크립터가 닫힐 때까지 데이터 블록이 남아. 그래서 du 합계는 작아졌는데 df 여유 공간은 돌아오지 않을 수 있어. 해당 프로세스를 무작정 죽이기보다 로그를 다시 여는 기능이나 정상 재시작 경로를 먼저 찾아.