Operating System/Linux

[Linux] lsof 사용법 (옵션 정리) - 시스템 자원 확인하기

근육곰돌이 2019. 11. 25. 19:25
728x90

1. lsof (list open files)란?

lsof 는 lisopen files 의 약자로 시스템에서 열린 파일 목록을 알려주고 사용하는 프로세스, 디바이스 정보, 파일의 종류등 상세한 정보를 출력합니다. 

리눅스와 유닉스는 추상화된 파일 시스템(VFS - Virtual File System)을 사용하므로 일반 파일, 디렉터리, 네트워크 소켓, 라이브러리, 심볼릭 링크 등도 모두 파일로 처리되며 lsof 에서 상세한 정보를 확인할 수 있다.

 

2. 출력 컬럼의 의미

# lsof
COMMAND     PID     USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init          1     root  cwd       DIR                8,2     4096          2 /
init          1     root  rtd       DIR                8,2     4096          2 /
init          1     root  txt       REG                8,2   150352     917793 /sbin/init
init          1     root  mem       REG                8,2    66432    1320216 /lib64/libnss_files-2.12.so
init          1     root  mem       REG                8,2  1930416    1310748 /lib64/libc-2.12.so
init          1     root  mem       REG                8,2    93352    1310900 /lib64/libgcc_s-4.4.7-20120601.so.1
init          1     root  mem       REG                8,2    47760    1310933 /lib64/librt-2.12.so
init          1     root  mem       REG                8,2   146592    1310786 /lib64/libpthread-2.12.so
init          1     root  mem       REG                8,2   268240    1320591 /lib64/libdbus-1.so.3.4.0
init          1     root  mem       REG                8,2    39896    1310944 /lib64/libnih-dbus.so.1.0.0
init          1     root  mem       REG                8,2   106016    1310946 /lib64/libnih.so.1.0.0
init          1     root  mem       REG                8,2   161776    1310727 /lib64/ld-2.12.so
init          1     root    0u      CHR                1,3      0t0       4025 /dev/null
init          1     root    1u      CHR                1,3      0t0       4025 /dev/null
init          1     root    2u      CHR                1,3      0t0       4025 /dev/null
init          1     root    3r     FIFO                0,8      0t0       7696 pipe
init          1     root    4w     FIFO                0,8      0t0       7696 pipe
init          1     root    5r      DIR               0,10        0          1 inotify
init          1     root    6r      DIR               0,10        0          1 inotify

...
  1. COMMAND : 실행한 명령어
  2. PID : process id
  3. USER : 실행한 사용자
  4. FD: File Descriptor, 파일의 종류. 
    1. cwd: current working directory
    2. rtd: root directory
    3. mem : memory-mapped file
    4. txt: program text (code and data);
  5. TYPE: 파일 종류
    1. DIR: 디렉터리
    2. CHR:  character special file
    3. REG: regular file
    4. unix: 유닉스 도메인 소켓 (MySQL 등이 사용하는 소켓으로 로컬 프로세스에서만 사용 가능하며 TCP/UDP 보다 속도가 매우 빠름)
  6. DEVICE : 장치 번호
  7. SIZE/OFF: 파일의 크기나 오프셋
  8. NODE: 노드 번호
  9. NAME:  파일명

 

 

3. 옵션 정리

--help : 도움말을 출력한다.
~]# lsof --help
lsof: illegal option character: -
lsof: -e not followed by a file system path: "lp"
lsof 4.82
 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 usage: [-?abhlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]
 [-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
  -l list UID numbers      -n no host names           -N select NFS files
  -o list file offset      -O avoid 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
  +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]] repeat every t seconds (15);  + until no files, - forever.
       An optional suffix to t is m; m must separate t from  and
       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 /var/log/httpd/access_log

 

-i : 4(IPv4), 또는 6(IPV6) 를 지정하여 특정 IP 의 버전만 출력한다.
 ~]# lsof -i 4
COMMAND     PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
snmpd       736     root    8u  IPv4 1638516      0t0  UDP *:snmp

 

-c : 특정 명령어를 사용하고 있는 정보를 출력한다.
# lsof -c ssh
COMMAND   PID     USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
sshd     1404     root  cwd    DIR                8,2     4096       2 /
sshd     1404     root  rtd    DIR                8,2     4096       2 /
sshd     1404     root  txt    REG                8,2   575192 2370392 /usr/sbin/sshd
sshd     1404     root  mem    REG                8,2    66432 1320216 /lib64/libnss_files-2.12.so
sshd     1404     root  mem    REG                8,2    47760 1310933 /lib64/librt-2.12.so
sshd     1404     root  mem    REG                8,2   247160 1311122 /lib64/libnspr4.so
sshd     1404     root  mem    REG                8,2    17096 1320606 /lib64/libplds4.so
sshd     1404     root  mem    REG                8,2    21288 1320605 /lib64/libplc4.so
sshd     1404     root  mem    REG                8,2   198752 2369363 /usr/lib64/libnssutil3.so
sshd     1404     root  mem    REG                8,2   146592 1310786 /lib64/libpthread-2.12.so
sshd     1404     root  mem    REG                8,2    12592 1310836 /lib64/libkeyutils.so.1.3
sshd     1404     root  mem    REG                8,2    46368 1320612 /lib64/libkrb5support.so.0.1

 

-d : 현재 사용중인 File Descriptor 기준으로 정보를 출력한다.
# lsof -d 0
COMMAND     PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
init          1     root    0u   CHR                1,3      0t0 4025 /dev/null
agetty      465     root    0u   CHR               4,64      0t0 5978 /dev/ttyS0
lsof        476     root    0u   CHR              136,1      0t0    4 /dev/pts/1
udevd       582     root    0u   CHR                1,3      0t0 4025 /dev/null
udevd       974     root    0u   CHR                1,3      0t0 4025 /dev/null
rsyslogd   1264     root    0u  unix 0xffff8800374ab740      0t0 9485 /dev/log

 

+D : 특정 디렉토리의 열린 파일 정보를 출력한다.
# lsof +D /dev
COMMAND     PID     USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
init          1     root    0u   CHR                1,3      0t0    4025 /dev/null
init          1     root    1u   CHR                1,3      0t0    4025 /dev/null
init          1     root    2u   CHR                1,3      0t0    4025 /dev/null
udevd       582     root    0u   CHR                1,3      0t0    4025 /dev/null
udevd       582     root    1u   CHR                1,3      0t0    4025 /dev/null
udevd       582     root    2u   CHR                1,3      0t0    4025 /dev/null

 

-F : 출력될 정보에서 원하는 필드의 정보만 출력한다.  (help: lsof -F? : 도움말)

옵션 - 도움말

~]# lsof -F?
lsof: ID    field description
 a    access: r = read; w = write; u = read/write
 c    command name
 d    device character code
 D    major/minor device number as 0x
 f    file descriptor
 G    file flaGs
 i    inode number
 k    link count
 l    lock: r/R = read; w/W = write; u = read/write
 L    login name
 m    marker between repeated output
 n    comment, name, Internet addresses
 o    file offset as 0t or 0x
 p    process ID (PID)
 g    process group ID (PGID)
 P    protocol name
 r    raw device number as 0x
 R    paRent PID
 s    file size
 S    stream module and device names
 t    file type
 T    TCP/TPI info
 u    user ID (UID)
 0    (zero) use NUL field terminator instead of NL

 

사용예제

~]# lsof -F c
p1
cinit
p2
ckthreadd
p3
cmigration/0
p4
cksoftirqd/0
p5
cstopper/0
p6
cwatchdog/0

 

-g : 특정 그룹ID로 정보를 출력한다.

~]# lsof -g 1
COMMAND PID PGID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
init      1    1 root  cwd    DIR                8,2     4096       2 /
init      1    1 root  rtd    DIR                8,2     4096       2 /
init      1    1 root  txt    REG                8,2   150352  917793 /sbin/init

...

 

-i : 특정 프로토콜과 포트 정보를 출력한다.

[일반 프로토콜만]

~]# lsof -i TCP
COMMAND     PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
snmpd       736     root    9u  IPv4 1638517      0t0  TCP localhost:3333 (LISTEN)

 

[포트 지정 시]

~]# lsof -i TCP:3333
COMMAND     PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
snmpd       736     root    9u  IPv4 1638517      0t0  TCP localhost:3333 (LISTEN)

 

-N : NFS에 연결되어 있는 파일 정보를 출력한다.
$ lsof -N

 

-l : 계정이름이 아닌 UID(숫자)로 변경되어 출력한다.
$ lsof -l

COMMAND     PID   TID     USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init          1              0  cwd       DIR                8,1     4096          2 /
init          1              0  rtd       DIR                8,1     4096          2 /
init          1              0  txt       REG                8,1   265848   15990827 /sbin/init

 

-n : 호스트 이름되신 IP로 정보를 출력한다.
$ lsof -i TCP:3350 -n
COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
xrdp-sesm  9000 root    6u  IPv4 2009413      0t0  TCP 127.0.0.1:3350 (LISTEN)
xrdp-sess  9774 root    6u  IPv4 2009413      0t0  TCP 127.0.0.1:3350 (LISTEN)
sh         9775 test    6u  IPv4 2009413      0t0  TCP 127.0.0.1:3350 (LISTEN)
Xvnc       9776 test    6u  IPv4 2009413      0t0  TCP 127.0.0.1:3350 (LISTEN)
xrdp-chan  9790 root    6u  IPv4 2009413      0t0  TCP 127.0.0.1:3350 (LISTEN)

 

-p : 특정 PID가 참조하고 있는 프로그램 파일, 라이브러리를 출력한다.
~]# lsof -p 1415
COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
xinetd  1415 root  cwd    DIR                8,2     4096       2 /
xinetd  1415 root  rtd    DIR                8,2     4096       2 /
xinetd  1415 root  txt    REG                8,2   174456 2369949 /usr/sbin/xinetd
xinetd  1415 root  mem    REG                8,2    66432 1320216 /lib64/libnss_files-2.12.so
xinetd  1415 root  mem    REG                8,2    12768 1320594 /lib64/libfreebl3.so
xinetd  1415 root  mem    REG                8,2    23088 1310811 /lib64/libdl-2.12.so
xinetd  1415 root  mem    REG                8,2  1930416 1310748 /lib64/libc-2.12.so
xinetd  1415 root  mem    REG                8,2    43928 1320595 /lib64/libcrypt-2.12.so
xinetd  1415 root  mem    REG                8,2   600048 1310880 /lib64/libm-2.12.so
xinetd  1415 root  mem    REG                8,2   116904 1320617 /lib64/libnsl-2.12.so
xinetd  1415 root  mem    REG                8,2    40792 1310829 /lib64/libwrap.so.0.7.6
xinetd  1415 root  mem    REG                8,2   124640 1320588 /lib64/libselinux.so.1
xinetd  1415 root  mem    REG                8,2   161776 1310727 /lib64/ld-2.12.so
xinetd  1415 root    0r   CHR                1,3      0t0    4025 /dev/null
xinetd  1415 root    1r   CHR                1,3      0t0    4025 /dev/null
xinetd  1415 root    2r   CHR                1,3      0t0    4025 /dev/null

 

-r : 주기적으로 정보를 출력한다. (기본 15초)
[root@SNAC-PEA ~]# lsof -p 1415 -r
COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
xinetd  1415 root  cwd    DIR                8,2     4096       2 /
xinetd  1415 root  rtd    DIR                8,2     4096       2 /
xinetd  1415 root  txt    REG                8,2   174456 2369949 /usr/sbin/xinetd
xinetd  1415 root  mem    REG                8,2    66432 1320216 /lib64/libnss_files-2.12.so
xinetd  1415 root  mem    REG                8,2    12768 1320594 /lib64/libfreebl3.so
xinetd  1415 root  mem    REG                8,2    23088 1310811 /lib64/libdl-2.12.so
xinetd  1415 root  mem    REG                8,2  1930416 1310748 /lib64/libc-2.12.so
xinetd  1415 root  mem    REG                8,2    43928 1320595 /lib64/libcrypt-2.12.so
xinetd  1415 root  mem    REG                8,2   600048 1310880 /lib64/libm-2.12.so
xinetd  1415 root  mem    REG                8,2   116904 1320617 /lib64/libnsl-2.12.so
xinetd  1415 root  mem    REG                8,2    40792 1310829 /lib64/libwrap.so.0.7.6
xinetd  1415 root  mem    REG                8,2   124640 1320588 /lib64/libselinux.so.1
xinetd  1415 root  mem    REG                8,2   161776 1310727 /lib64/ld-2.12.so
xinetd  1415 root    0r   CHR                1,3      0t0    4025 /dev/null
xinetd  1415 root    1r   CHR                1,3      0t0    4025 /dev/null
xinetd  1415 root    2r   CHR                1,3      0t0    4025 /dev/null
xinetd  1415 root    3r  FIFO                0,8      0t0    9994 pipe
xinetd  1415 root    4w  FIFO                0,8      0t0    9994 pipe
=======


COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
xinetd  1415 root  cwd    DIR                8,2     4096       2 /
xinetd  1415 root  rtd    DIR                8,2     4096       2 /
xinetd  1415 root  txt    REG                8,2   174456 2369949 /usr/sbin/xinetd
xinetd  1415 root  mem    REG                8,2    66432 1320216 /lib64/libnss_files-2.12.so
xinetd  1415 root  mem    REG                8,2    12768 1320594 /lib64/libfreebl3.so
xinetd  1415 root  mem    REG                8,2    23088 1310811 /lib64/libdl-2.12.so
xinetd  1415 root  mem    REG                8,2  1930416 1310748 /lib64/libc-2.12.so
xinetd  1415 root  mem    REG                8,2    43928 1320595 /lib64/libcrypt-2.12.so
xinetd  1415 root  mem    REG                8,2   600048 1310880 /lib64/libm-2.12.so
xinetd  1415 root  mem    REG                8,2   116904 1320617 /lib64/libnsl-2.12.so
xinetd  1415 root  mem    REG                8,2    40792 1310829 /lib64/libwrap.so.0.7.6
xinetd  1415 root  mem    REG                8,2   124640 1320588 /lib64/libselinux.so.1
xinetd  1415 root  mem    REG                8,2   161776 1310727 /lib64/ld-2.12.so
xinetd  1415 root    0r   CHR                1,3      0t0    4025 /dev/null
xinetd  1415 root    1r   CHR                1,3      0t0    4025 /dev/null
xinetd  1415 root    2r   CHR                1,3      0t0    4025 /dev/null
xinetd  1415 root    3r  FIFO                0,8      0t0    9994 pipe
xinetd  1415 root    4w  FIFO                0,8      0t0    9994 pipe

 

-t : 동작하고 있는 프로세서들의 PID만 출력한다.
$ lsof -t
1
2
3
5
7
8
9

 

-T : TCP 프로토콜로 통신하는 소켓만 출력한다.
~]# lsof -T
COMMAND     PID     USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init          1     root  cwd       DIR                8,2     4096          2 /
init          1     root  rtd       DIR                8,2     4096          2 /
init          1     root  txt       REG                8,2   150352     917793 /sbin/init
init          1     root  mem       REG                8,2    66432    1320216 /lib64/libnss_files-2.12.so
init          1     root  mem       REG                8,2  1930416    1310748 /lib64/libc-2.12.so
init          1     root  mem       REG                8,2    93352    1310900 /lib64/libgcc_s-4.4.7-20120601.so.1
init          1     root  mem       REG                8,2    47760    1310933 /lib64/librt-2.12.so
init          1     root  mem       REG                8,2   146592    1310786 /lib64/libpthread-2.12.so
init          1     root  mem       REG                8,2   268240    1320591 /lib64/libdbus-1.so.3.4.0
init          1     root  mem       REG                8,2    39896    1310944 /lib64/libnih-dbus.so.1.0.0
init          1     root  mem       REG                8,2   106016    1310946 /lib64/libnih.so.1.0.0
init          1     root  mem       REG                8,2   161776    1310727 /lib64/ld-2.12.so
init          1     root    0u      CHR                1,3      0t0       4025 /dev/null
init          1     root    1u      CHR                1,3      0t0       4025 /dev/null
init          1     root    2u      CHR                1,3      0t0       4025 /dev/null

 

-u: 특정 계정으로 열린 파일을 출력한다.
$ lsof -u test
COMMAND     PID USER   FD      TYPE             DEVICE SIZE/OFF      NODE NAME
sh         9775 test  cwd       DIR                8,1     4096   3416348 /home/test
sh         9775 test  rtd       DIR                8,1     4096         2 /
sh         9775 test  txt       REG                8,1   121272   6815764 /bin/dash

 

-U : UDP 프로토콜로 통신하는 소켓만 출력한다.
~]# lsof -U
COMMAND     PID     USER   FD   TYPE             DEVICE SIZE/OFF    NODE NAME
init          1     root    7u  unix 0xffff8800375233c0      0t0    7697 @/com/ubuntu/upstart
init          1     root    8u  unix 0xffff8800374ab040      0t0   11037 socket
init          1     root    9u  unix 0xffff880037cd4440      0t0    9794 socket
udevd       582     root    4u  unix 0xffff880037523740      0t0    8324 @/org/kernel/udev/udevd
udevd       582     root    8u  unix 0xffff880037eee800      0t0    8338 socket
udevd       582     root    9u  unix 0xffff880037eee480      0t0    8339 socket

 

-v : lsof 정보를 출력한다.
~]# lsof -v
lsof version information:
    revision: 4.82
    latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
    latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
    latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
    constructed: Thu Jul 23 17:38:32 UTC 2015
    constructed by and on: mockbuild@c6b8.bsys.dev.centos.org
    compiler: cc
    compiler version: 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
    compiler flags: -DLINUXV=26016 -DGLIBCV=212 -DHASIPv6 -DHASSELINUX -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DHAS_STRFTIME -DLSOF_VSTR="2.6.16" -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fno-strict-aliasing
    loader flags: -L./lib -llsof  -lselinux

 

 

 

 

 

 

 

반응형