본문 바로가기

리눅스

lsof 명령어

반응형

lsof(list open file) 명령어

lsof(List Open Files)는 리눅스와 유닉스 기반 시스템에서 현재 열린 파일과 네트워크 소켓에 대한 정보를 보여주는 명령어입니다. 이 정보는 프로세스가 어떤 파일을 열어 있는지, 어떤 네트워크 연결을 맺고 있는지 등을 확인하는 데 유용합니다.

lsof 패키지 설치

  • CentOS
yum install -y lsof
  • Ubuntu
apt-get install -y lsof

lsof 명령어의 기본 구문

lsof [옵션]

주요 옵션

  • -i : 네트워크 소켓 정보를 보여줍니다.
  • -u user : 특정 사용자가 열고 있는 파일을 보여줍니다.
  • -c command : 특정 명령(command)를 실행 중인 프로세스가 열고 있는 파일을 보여줍니다.
  • -t : 출력을 프로세스 ID(PID) 목록으로만 표시합니다.
  • -p PID : 특정 프로세스 ID(PID)가 열고 있는 파일을 보여줍니다.
  • -g : 프로세스 그룹에 속한 파일을 보여줍니다.

사용 예시

기본 사용법

  • 기본적으로 lsof 명령어를 실행하면 시스템에서 열린 모든 파일의 목록을 출력합니다.
lsof

lsof1

특정 사용자 확인

  • 특정 사용자가 열고 있는 파일을 확인하려면 -u 옵션을 사용합니다.
lsof -u vagrant
$ lsof -u vagrant
COMMAND    PID    USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
systemd  23013 vagrant  cwd       DIR              253,0     4096          2 /
systemd  23013 vagrant  rtd       DIR              253,0     4096          2 /
systemd  23013 vagrant  txt       REG              253,0  1849992    1594212 /usr/lib/systemd/systemd
...

특정 포트 확인

  • 특정 포트를 사용하고 있는 프로세스를 확인하려면 -i 옵션을 사용합니다.
lsof -i :port

네트워크 연결 확인

  • 현재 네트워크 연결 상태를 확인하려면 -i 옵션을 사용합니다.
lsof -i 4
$ lsof -i 4
COMMAND     PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd-r   622 systemd-resolve   13u  IPv4  24218      0t0  UDP localhost:domain
systemd-r   622 systemd-resolve   14u  IPv4  24219      0t0  TCP localhost:domain (LISTEN)
nmbd        643            root    4u  IPv4  27515      0t0  UDP kube-control1:netbios-ns
nmbd        643            root   13u  IPv4  24945      0t0  UDP *:netbios-ns
nmbd        643            root   14u  IPv4  24946      0t0  UDP *:netbios-dgm
nmbd        643            root   15u  IPv4  24957      0t0  UDP kube-control1:netbios-ns
nmbd        643            root   16u  IPv4  24958      0t0  UDP 192.168.0.255:netbios-ns
nmbd        643            root   17u  IPv4  24959      0t0  UDP kube-control1:netbios-dgm
nmbd        643            root   18u  IPv4  24960      0t0  UDP 192.168.0.255:netbios-dgm
nmbd        643            root   21u  IPv4  27516      0t0  UDP 172.17.255.255:netbios-ns
nmbd        643            root   22u  IPv4  27517      0t0  UDP kube-control1:netbios-dgm
nmbd        643            root   23u  IPv4  27518      0t0  UDP 172.17.255.255:netbios-dgm
snmpd       646     Debian-snmp    6u  IPv4  24810      0t0  UDP *:snmp
sshd        691            root    3u  IPv4  25657      0t0  TCP *:ssh (LISTEN)
in.tftpd    692            root    4u  IPv4  24855      0t0  UDP *:tftp
smbd        721            root   46u  IPv4  25122      0t0  TCP *:microsoft-ds (LISTEN)
smbd        721            root   47u  IPv4  25123      0t0  TCP *:netbios-ssn (LISTEN)
  • 특정 프로토콜(TCP 또는 UDP)의 네트워크 연결을 확인할 수도 있습니다.
lsof -i tcp
lsof -i udp
728x90

특정 포트 확인

lsof -i TCP:22
$ lsof -i TCP:22
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd      691    root    3u  IPv4  25657      0t0  TCP *:ssh (LISTEN)
sshd      691    root    4u  IPv6  25659      0t0  TCP *:ssh (LISTEN)
sshd    23010    root    4u  IPv4 520042      0t0  TCP kube-control1:ssh->121.168.247.231:49947 (ESTABLISHED)
sshd    23099 vagrant    4u  IPv4 520042      0t0  TCP kube-control1:ssh->121.168.247.231:49947 (ESTABLISHED)
sshd    23289    root    4u  IPv4 527252      0t0  TCP kube-control1:ssh->20.232.30.249:37592 (ESTABLISHED)
sshd    23290    sshd    4u  IPv4 527252      0t0  TCP kube-control1:ssh->20.232.30.249:37592 (ESTABLISHED)
sshd    23291    root    4u  IPv4 528814      0t0  TCP kube-control1:ssh->207.159.173.225:43090 (ESTABLISHED)
sshd    23292    sshd    4u  IPv4 528814      0t0  TCP kube-control1:ssh->207.159.173.225:43090 (ESTABLISHED)

특정 파일 확인

  • 특정 파일을 열고 있는 프로세스를 확인하려면 파일 경로를 지정합니다.
lsof /path/to/file

특정 프로세스 ID (PID) 확인

  • 특정 PID가 열고 있는 파일을 확인하려면 -p 옵션을 사용합니다.
lsof -p PID

특정 명령어로 열린 파일 확인

  • 특정 명령어가 열고 있는 파일을 확인하려면 -c 옵션을 사용합니다.
lsof -c systemd-resolv
$ lsof -c systemd-resolv
COMMAND   PID            USER   FD      TYPE             DEVICE SIZE/OFF    NODE NAME
systemd-r 622 systemd-resolve  cwd       DIR              253,0     4096       2 /
systemd-r 622 systemd-resolve  rtd       DIR              253,0     4096       2 /
systemd-r 622 systemd-resolve  txt       REG              253,0   489904 1594239 /usr/lib/systemd/systemd-resolved
systemd-r 622 systemd-resolve  mem       REG              253,0    27072 1579287 /usr/lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
systemd-r 622 systemd-resolve  mem       REG              253,0    47688 1579323 /usr/lib/x86_64-linux-gnu/libffi.so.8.1.0
systemd-r 622 systemd-resolve  mem       REG              253,0   613064 1573408 /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.10.4
systemd-r 622 systemd-resolve  mem       REG              253,0   133200 1579267 /usr/lib/x86_64-linux-gnu/libaudit.so.1.0.0
systemd-r 622 systemd-resolve  mem       REG              253,0   526896 1579342 /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.1
systemd-r 622 systemd-resolve  mem       REG              253,0   289800 1579361 /usr/lib/x86_64-linux-gnu/libhogweed.so.6.4
...

프로세스 그룹에 속한 파일 표시

lsof -g PGID

파일 시스템 확인

  • 특정 파일 시스템에서 열린 파일을 확인하려면 +D 옵션을 사용합니다. 이 옵션은 지정된 디렉토리와 그 하위 디렉토리에서 열린 모든 파일을 찾습니다.
lsof +D /home

시간 기준 정렬

  • -t 옵션을 사용하여 시간 기준으로 출력을 정렬할 수 있습니다.
lsof -t

lsof 사용법

$ lsof -h
lsof 4.93.2
 latest revision: https://github.com/lsof-org/lsof
 latest FAQ: https://github.com/lsof-org/lsof/blob/master/00FAQ
 latest (non-formatted) man page: https://github.com/lsof-org/lsof/blob/master/Lsof.8
 usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-E] [+|-e s] [+|-f[gG]]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
 [+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Defaults in parentheses; comma-separated set (s) items; dash-separated ranges.
  -?|-h list help          -a AND selections (OR)     -b avoid kernel blocks
  -c c  cmd c ^c /c/[bix]  +c w  COMMAND width (9)    +d s  dir s files
  -d s  select by FD set   +D D  dir D tree *SLOW?*   +|-e s  exempt s *RISKY*
  -i select IPv[46] files  -K [i] list|(i)gn tasKs    -l list UID numbers
  -n no host names         -N select NFS files        -o list file offset
  -O no overhead *RISKY*   -P no port names           -R list paRent PID
  -s list file size        -t terse listing           -T disable TCP/TPI info
  -U select Unix socket    -v list version info       -V verbose search
  +|-w  Warnings (+)       -X skip TCP&UDP* files     -Z Z  context [Z]
  -- end option scan
  -E display endpoint info              +E display endpoint info and files
  +f|-f  +filesystem or -file names     +|-f[gG] flaGs
  -F [f] select fields; -F? for help
  +|-L [l] list (+) suppress (-) link counts < l (0 = all; default = 0)
                                        +m [m] use|create mount supplement
  +|-M   portMap registration (-)       -o o   o 0t offset digits (8)
  -p s   exclude(^)|select PIDs         -S [t] t second stat timeout (15)
  -T qs TCP/TPI Q,St (s) info
  -g [s] exclude(^)|select and print process group IDs
  -i i   select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]
  +|-r [t[m<fmt>]] repeat every t seconds (15);  + until no files, - forever.
       An optional suffix to t is m<fmt>; m must separate t from <fmt> and
      <fmt> is an strftime(3) format for the marker line.
  -s p:s  exclude(^)|select protocol (p = TCP|UDP) states by name(s).
  -u s   exclude(^)|select login|UID set s
  -x [fl] cross over +d|+D File systems or symbolic Links
  names  select named files or files on named file systems
Anyone can list all files; /dev warnings disabled; kernel ID check disabled.

 

lsof 명령어를 통해 현재 시스템에서 열린 파일과 네트워크 연결에 대한 상세한 정보를 확인할 수 있으며 시스템 문제 해결 및 성능 최적화에 도움이 됩니다.

 

참고URL

- lsof 명령어 설치 및 사용법 : https://hbase.tistory.com/64

728x90
반응형