Linux

[리눅스] lsof 명령어 완벽 가이드 사용법(네트워크 연결 상태 확인)

인생아 2024. 10. 18. 12:25
반응형

lsofList Open Files의 약자로, 리눅스에서 현재 시스템에서 열려 있는 모든 파일을 확인할 수 있는 강력한 도구입니다. 리눅스에서 모든 것은 파일로 취급되기 때문에, lsof 명령어는 파일뿐만 아니라 네트워크 소켓, 파이프, 디렉토리 등도 확인할 수 있습니다. 이를 통해 특정 프로세스가 어떤 파일을 열고 있는지, 네트워크 연결 상태를 진단할 수 있어 시스템 관리, 네트워크 모니터링, 디버깅 등의 작업에 유용합니다.

lsof 명령어의 주요 기능

  • 열려 있는 파일 확인: 특정 프로세스나 사용자가 현재 열고 있는 파일들을 확인할 수 있습니다.
  • 네트워크 연결 상태 확인: 열려 있는 네트워크 소켓 정보를 제공하여 TCP/UDP 포트 상태를 파악할 수 있습니다.
  • 특정 파일을 열고 있는 프로세스 찾기: 특정 파일을 열고 있는 프로세스를 찾아서 파일 잠금 문제를 해결할 수 있습니다.
  • 디버깅과 시스템 분석: 시스템에서 파일 및 프로세스 간의 상호작용을 분석하여 디버깅에 사용할 수 있습니다.

lsof 명령어의 기본 사용법

기본적으로 lsof 명령어만 입력하면 현재 시스템에서 열려 있는 모든 파일 목록을 출력합니다.

user@linux:~$ lsof
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd     1  root  cwd    DIR  253,0     4096    2 /
systemd     1  root  rtd    DIR  253,0     4096    2 /
systemd     1  root  txt    REG  253,0  1638400 1338 /usr/lib/systemd/systemd
bash     1234  user  cwd    DIR  253,0     4096  100 /home/user
bash     1234  user  txt    REG  253,0    89512 1060 /bin/bash

위의 결과는 시스템에서 열려 있는 파일들과 관련된 프로세스 정보를 보여줍니다. 각 열(column)은 프로세스 이름(COMMAND), 프로세스 ID(PID), 사용자(USER), 파일 디스크립터(FD), 파일 유형(TYPE), 파일 크기 및 오프셋(SIZE/OFF), 노드 번호(NODE), 파일 이름(NAME)을 나타냅니다.

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

특정 파일을 열고 있는 프로세스를 찾고 싶다면 lsof <파일 경로>를 사용합니다.

user@linux:~$ lsof /var/log/syslog
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 501 root    1w   REG  253,0    12345 1060 /var/log/syslog

위의 예시는 /var/log/syslog 파일을 열고 있는 프로세스가 rsyslogd이며, 파일 디스크립터 1w(쓰기 모드)로 열려 있음을 보여줍니다.

특정 포트를 사용하는 프로세스 찾기

네트워크 포트와 관련된 프로세스를 찾을 때도 lsof는 유용합니다. 예를 들어, 80번 포트를 사용하고 있는 프로세스를 찾으려면 다음과 같이 실행합니다.

user@linux:~$ lsof -i :80
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx    2034  root   12u  IPv4  34567      0t0  TCP *:http (LISTEN)

위의 결과는 80번 포트를 사용 중인 nginx 프로세스 정보를 보여줍니다.

특정 사용자에 의해 열린 파일 확인

특정 사용자가 열고 있는 파일들을 확인하려면 -u 옵션을 사용하여 사용자 이름을 지정합니다.

user@linux:~$ lsof -u user
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash     1234  user  cwd    DIR  253,0     4096  100 /home/user
bash     1234  user  txt    REG  253,0    89512 1060 /bin/bash

위 예시는 user라는 사용자가 현재 열고 있는 파일 목록을 보여줍니다.

lsof와 네트워크 연결 상태

lsof는 네트워크 연결 상태를 확인하는 데도 매우 유용합니다. -i 옵션을 사용하면 현재 열려 있는 네트워크 소켓을 모두 확인할 수 있습니다.

user@linux:~$ lsof -i
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1024 root    3u  IPv4  12345      0t0  TCP *:ssh (LISTEN)
sshd    1024 root    4u  IPv6  12346      0t0  TCP *:ssh (LISTEN)
nginx   2034 root    12u IPv4  34567      0t0  TCP *:http (LISTEN)

이 명령어는 시스템에서 활성화된 네트워크 연결 정보를 제공합니다.

lsof의 추가 유용한 옵션

  • -c <프로세스 이름>: 특정 프로세스 이름으로 열려 있는 파일 확인.
  • -p <PID>: 특정 프로세스 ID가 열고 있는 파일 확인.
  • -t: 파일을 열고 있는 프로세스 ID만 출력.
  • +d <디렉토리>: 지정한 디렉토리에서 열린 파일 확인.

lsof 명령어의 실행 결과 필드 설명

  • COMMAND: 파일을 연 프로세스의 이름.
  • PID: 프로세스 ID.
  • USER: 프로세스를 실행한 사용자.
  • FD: 파일 디스크립터. cwd는 현재 작업 디렉토리, txt는 실행 파일, mem은 메모리 매핑된 파일, 0u는 읽기 및 쓰기 모드로 열린 파일을 의미.
  • TYPE: 파일 유형. DIR은 디렉토리, REG는 일반 파일, CHR은 문자 장치 파일.
  • NAME: 파일 경로 또는 네트워크 주소.

참고사이트

반응형