[Linux] lsof 사용법 (옵션 정리) - 시스템 자원 확인하기
1. lsof (list open files)란?
lsof 는 list open 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 ... |
|
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 -F c |
-g : 특정 그룹ID로 정보를 출력한다. |
~]# lsof -g 1 ... |
-i : 특정 프로토콜과 포트 정보를 출력한다. |
[일반 프로토콜만] ~]# lsof -i TCP
[포트 지정 시] ~]# lsof -i TCP:3333 |
-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 |