lsof란?
lsof
명령어는 "List Open Files"의 약자로 현재 시스템에서 열려 있는 모든 파일의 리스트를 제공합니다. 전통적인 디스크 기반의 파일 뿐만 아니라, 디렉토리, 라이브러리, 네트워크 파일 시스템의 파일, 그리고 각종 디바이스와 같은 시스템 자원을 확인할 수 있습니다.
lsof
는 각종 프로세스에 의해 사용되고 있는 모든 파일에 대한 상세한 정보를 보여줍니다. 파일 이외에도, 소켓과 파이프 같은 IPC(Inter-process communication) 메커니즘도 파일로 취급합니다.
주요 기능
- 프로세스가 사용 중인 파일 표시: 특정 프로세스가 사용 중인 모든 파일을 확인할 수 있습니다.
- 특정 사용자가 사용 중인 파일 표시: 특정 사용자가 사용 중인 파일의 목록을 확인할 수 있습니다.
- 네트워크 연결 표시: TCP/UDP 소켓을 사용하는 네트워크 연결과 관련된 파일을 포함하여 모든 네트워크 연결을 보여줍니다.
- 파일 시스템 활동 모니터링: 파일 시스템 활동을 감시하고, 어떤 파일이나 디렉토리에 대한 정보를 가져옵니다.
- 도달하기 어려운 파일 확인: 삭제된 파일이지만 여전히 시스템에 의해 사용 중인 경우 이를 확인할 수 있습니다.
사용법
lsof # 모든 열린 파일을 나열합니다.
lsof -u user1 # 특정 사용자 'user1'이 열어둔 모든 파일을 나열합니다.
lsof -u user1 -u user2 # 'user1'과 'user2'가 열어둔 모든 파일을 나열합니다.
lsof -u ^user1 # 'user1'을 제외한 모든 사용자가 열어둔 파일을 나열합니다.
lsof -p 1234 # 프로세스 ID(PID) 1234가 열어둔 파일을 나열합니다.
lsof -p 1234,5678 # PID 1234와 5678이 열어둔 파일을 나열합니다.
lsof -i :22 # 22번 포트를 사용하는 파일(네트워크 연결)을 나열합니다.
lsof -i tcp # TCP 프로토콜을 사용하는 모든 네트워크 연결을 나열합니다.
lsof -i tcp@hostname:port -sTCP:LISTEN # hostname과 port를 사용하여 LISTEN 상태인 TCP 연결을 나열합니다.
lsof +D /home/user1 # '/home/user1' 디렉터리 내에서 열린 모든 파일을 나열합니다.
lsof +L1 # 삭제되었지만 여전히 사용 중인 파일을 나열합니다.
lsof /dev/null # '/dev/null'을 열고 있는 프로세스를 나열합니다.
lsof -i 4 # IPv4 주소를 사용하는 모든 연결을 나열합니다.
lsof -i # 모든 네트워크 연결을 나열합니다.
lsof -d ^mem -a -p PID # PID 프로세스가 사용하고 있는 메모리를 제외한 모든 파일을 나열합니다.
주요 옵션
-u <user>
: 특정 사용자의 열린 파일만 표시합니다. 여기서 <user>
는 사용자 이름이나 사용자 ID가 될 수 있습니다.
-u ^<user>
: 지정된 사용자를 제외한 모든 사용자의 파일을 표시합니다.
-p <PID>
: 특정 프로세스 ID에 대한 파일만 표시합니다.
-i <options>
: 네트워크 연결에 대한 파일을 표시합니다. 여기서 <options>
는 포트 번호, 프로토콜, 상태 등이 될 수 있습니다.
+D <directory>
: 특정 디렉터리 내부의 모든 파일을 표시합니다.
+L1
: 링크 카운트가 0보다 작은 파일을 표시합니다. 즉, 시스템에서 아직 열려 있지만 파일 시스템에서는 삭제된 파일들입니다.
<file>
: 특정 파일을 열고 있는 프로세스를 나열합니다.