리눅스 명령어 lsof 사용법 및 3가지 옵션

리눅스 명령어 lsof는 시스템의 상태를 모니터링하거나 디버깅을 할 때, 파일과 프로세스 간의 관계를 확인할 때 사용합니다. 이번 글에서는 lsof 명령어가 무엇인지, 어떤 상황에서 사용하는지, 그리고 자주 사용되는 옵션들과 주의사항에 대해 설명하겠습니다.

리눅스 명령어 lsof란?

lsof는 “list open files”의 약자로, 현재 열려 있는 파일을 나열해주는 명령어입니다. 리눅스에서는 모든 것이 파일로 취급됩니다. 즉, 디렉터리, 네트워크 연결, 장치 등도 파일로 간주되므로, lsof는 단순히 파일뿐만 아니라 시스템에서 사용 중인 다양한 리소스를 확인할 수 있게 해줍니다.

특히, 다음과 같은 상황에서 유용하게 사용할 수 있습니다:

  • 특정 프로세스가 어느 파일을 열고 있는지 확인할 때
  • 파일이 어떤 프로세스에 의해 사용 중인지 알 수 없을 때
  • 네트워크 포트와 연결된 프로세스를 확인할 때
  • 삭제된 파일을 여전히 사용 중인 프로세스를 찾을 때

이러한 기능 덕분에 시스템 모니터링 및 디버깅 도구로서 많이 사용됩니다.

기본 사용법

lsof 명령어의 기본 형식은 매우 간단합니다. 터미널에서 다음과 같이 입력하면 됩니다.

lsof
ShellScript

이 명령어는 현재 열려 있는 모든 파일과 관련된 정보를 출력합니다. 하지만 일반적인 시스템에서는 수많은 파일이 열려 있기 때문에, 보통 특정 조건을 추가하여 필요한 정보만 필터링하는 것이 효율적입니다.

자주 사용하는 옵션

특정 프로세스의 열린 파일 확인하기 (-p 옵션)

특정 프로세스 ID(PID)에 의해 열려 있는 파일을 확인하려면 -p 옵션을 사용합니다. 예를 들어, PID가 1234인 프로세스의 열린 파일을 확인하고 싶다면 다음과 같이 입력합니다.

lsof -p 1234
ShellScript

이 명령어는 해당 프로세스가 열고 있는 모든 파일을 출력합니다. 아래 그림에서는 bash가 실행중인 PID 3152를 대상으로 -p 옵션을 적용한 결과입니다.

그림 1. 리눅스 명령어 lsof: -p 옵션을 적용하여 PID 3152가 열고 있는 모든 파일 출력

특정 파일을 열고 있는 프로세스 찾기

어떤 프로세스가 특정 파일을 열고 있는지 알고 싶을 때는 파일 경로를 직접 지정하면 됩니다. 예를 들어, /var/log/syslog 파일을 열고 있는 프로세스를 찾으려면 다음과 같이 입력합니다.

lsof /var/log/syslog
ShellScript

이 명령어는 해당 파일을 사용 중인 모든 프로세스를 보여줍니다.

그림 2. 리눅스 명령어 lsof: 특정 파일을 열고 있는 프로세스 찾기

특정 포트를 사용하는 프로세스 확인하기 (-i 옵션)

네트워크 관련 문제를 해결할 때 특정 포트를 열고 있는 프로세스를 찾는 것이 중요합니다. 예를 들어, 80번 포트를 열고 있는 프로세스를 찾으려면 다음과 같이 입력합니다.

lsof -i :80
ShellScript

이 명령어는 해당 포트를 사용 중인 프로세스와 관련된 정보를 출력합니다. 네트워크 디버깅이나 보안 점검 시 매우 유용한 옵션입니다.

그림 3. 리눅스 명령어 lsof: 특정 포트를 사용하는 프로세스 확인

삭제된 파일 찾기

리눅스에서는 파일이 삭제되었더라도 해당 파일을 열고 있는 프로세스가 있으면 파일이 완전히 삭제되지 않습니다. lsof를 사용하여 삭제된 파일을 확인하려면 다음과 같은 명령어를 사용할 수 있습니다:

lsof | grep deleted
ShellScript

이 명령어는 시스템에서 삭제되었지만 여전히 사용 중인 파일을 찾아줍니다. 이 경우 디스크 공간이 제대로 해제되지 않을 수 있으므로 주의가 필요합니다.

사용자별 열린 파일 확인하기 (-u 옵션)

특정 사용자가 열고 있는 파일만 확인하고 싶다면 -u 옵션을 사용할 수 있습니다. 예를 들어, 사용자 ‘ito’가 열고 있는 파일을 보려면 다음과 같이 입력합니다.

lsof -u ito
ShellScript

이 명령어는 해당 사용자가 열고 있는 모든 파일을 나열합니다.

그림 4. 리눅스 명령어 lsof: 특정 사용자별 열린 파일 확인

유용한 활용 방법

lsof 명령어는 시스템 모니터링과 네트워크 디버깅뿐만 아니라, 파일 시스템 문제 해결에도 매우 유용합니다. 예를 들어, 파일 시스템이 마운트 해제가 되지 않거나, 특정 파일이 삭제되지 않는 문제를 해결할 때도 사용할 수 있습니다.

또한, lsof를 주기적으로 사용하여 시스템 상태를 모니터링하면 예상치 못한 문제를 미리 발견할 수 있습니다. 네트워크 포트를 주기적으로 확인하거나, 삭제된 파일이 제대로 해제되고 있는지 체크하는 것이 그 예입니다.

주의사항

권한 문제

lsof 명령어는 시스템 파일 및 프로세스를 확인하기 때문에, 특정 파일이나 프로세스에 접근하려면 관리자 권한이 필요할 수 있습니다. 필요한 경우 sudo를 붙여서 사용해야 합니다.

sudo lsof
ShellScript

대용량 출력

시스템에 열려 있는 파일이 많을 경우, lsof의 출력이 매우 많을 수 있습니다. 따라서, 출력 결과를 필요에 따라 필터링하거나, grep과 같은 도구를 함께 사용하여 원하는 정보만 출력하는 것이 좋습니다.

그림 5. 리눅스 명령어 lsof를 grep 명령어와 함께 사용해서 필터링

정리

lsof는 리눅스에서 시스템 자원과 프로세스를 모니터링하고 디버깅할 때 매우 유용한 명령어입니다. 현재 열려 있는 파일을 확인하거나, 네트워크 포트를 사용하는 프로세스를 찾는 등 다양한 상황에서 활용될 수 있습니다. 기본적으로 열려 있는 파일을 나열하지만, 다양한 옵션을 통해 필요한 정보를 효율적으로 필터링할 수 있습니다. 시스템 관리나 네트워크 문제를 해결할 때 필수적으로 알아야 할 명령어이므로, 주기적으로 사용하면서 익숙해지면 더욱 다양한 문제를 해결할 수 있을 것입니다.

이제 lsof를 활용하여 리눅스 시스템을 더욱 깊이 이해하고, 문제 발생 시 빠르게 대처할 수 있도록 해보세요.

참고자료

관련 포스트

Leave a Comment