이 가이드에서는 리눅스에서 lsof 명령어를 사용해 현재 열려 있는 파일, 소켓, 파이프 목록을 확인하는 방법을 자세히 설명합니다.
lsof란 무엇인가?
lsof(List Open Files)는 매우 강력한 리눅스 명령줄 도구입니다. 거의 모든 리눅스 배포판에 기본으로 포함되어 있으며, 시스템에서 열려 있는 파일, 소켓, 파이프 목록을 한눈에 보여줍니다.
기본 사용법
가장 기본적인 사용법은 터미널에 명령어 이름만 입력하고 엔터 키를 누르는 것입니다.
# lsof
이 명령은 꽤 긴 목록을 출력합니다. 따라서 less 명령어와 함께 사용하면 훨씬 편리합니다.
# lsof | less

클릭하면 확대됩니다.
less와 조합하면 출력 결과를 위아래로 자유롭게 스크롤할 수 있어 가독성이 크게 향상됩니다. 물론 lsof는 단순히 전체 목록만 보여주는 도구가 아닙니다. 문제를 진단하고 해결해야 하는 상황에서는 그야말로 구세주 같은 역할을 합니다.
특정 프로세스가 연 파일 확인하기
특정 프로세스가 열어둔 모든 파일 목록을 조회할 수 있습니다. 먼저 ps -ef 명령으로 프로세스 ID(PID)를 확인한 뒤, -p 옵션과 함께 실행합니다.
# ps -ef
# lsof -p 30646
-p는 프로세스 ID를 의미하며, 30646은 예시 값이므로 실제 환경에서는 본인의 프로세스 ID로 바꿔 입력하면 됩니다.

클릭하면 확대됩니다.
디렉터리 및 명령어 기준 검색
시스템의 특정 경로에서 열려 있는 파일이나 소켓을 검색할 수도 있습니다. 예를 들어 /mnt 디렉터리와 관련된 모든 파일을 보고 싶다면 다음과 같이 실행합니다.
# lsof /mnt
또한 특정 명령어(프로그램)가 연 파일들을 찾으려면 -c(command) 옵션을 사용합니다. 아래 예시는 mysql이 연 파일들을 보여줍니다.
# lsof -c mysql

클릭하면 확대됩니다.
네트워크 연결 확인하기
리눅스는 포트, 소켓, 디바이스까지 모두 파일로 취급합니다. 따라서 특정 프로토콜이나 포트를 사용 중인 모든 연결을 조회할 수 있습니다.
예를 들어, 현재 내 서버로 들어온 모든 SSH 연결을 확인하려면 22번 포트를 지정합니다.
# lsof -i :22
시스템의 모든 TCP 연결을 보고 싶다면 다음과 같이 실행하세요.
# lsof -i TCP

클릭하면 확대됩니다.
마무리
lsof는 이 외에도 다양한 유용한 옵션을 갖춘 똑똑한 명령어입니다. man 페이지(man lsof)를 참고하면 더 많은 활용법을 익힐 수 있으니, 시스템 문제 해결 능력을 한 단계 끌어올리고 싶다면 꼭 살펴보시길 권장합니다.