-
리눅스 lsof 란?리눅스 2017. 1. 5. 09:40
lsof
- 유닉스나 리눅스에서 대상 프로세스의 프로세스 ID[PID]를 알고 있어야 하고, root 계정 또는 모니터링 대상 프로세스를 가동한 정보를 조회할 수 있다.
- 파일지시자가 제공해주는 키값을 사용하고 있는 목록을 제공해줌
모든 열린 파일 출력
옵션 없이 lsof 를 실행하면 모든 열린 파일 정보를 출력한다.
lsof
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init
1
root cwd DIR
253
,
0
4096
2
/
init
1
root rtd DIR
253
,
0
4096
2
/
init
1
root txt REG
253
,
0
150352
3932
/sbin/init
init
1
root mem REG
253
,
0
65928
784927
/lib64/libnss_files-
2.12
.so
init
1
root DEL REG
253
,
0
784911
/lib64/libc-
2.12
.so
init
1
root DEL REG
253
,
0
785325
/lib64/libgcc_s-
4.4
.
7
-
20120601
.so.
1
.#prelink#.YDRQV5
init
1
root DEL REG
253
,
0
784939
/lib64/librt-
2.12
.so
init
1
root DEL REG
253
,
0
784935
/lib64/libpthread-
2.12
.so.#prelink#.0jHMuJ
init
1
root DEL REG
253
,
0
785344
/lib64/libdbus-
1
.so.
3.4
.
0
.#prelink#.HCYJdq
init
1
root mem REG
253
,
0
39896
785047
/lib64/libnih-dbus.so.
1.0
.
0
init
1
root mem REG
253
,
0
101920
785049
/lib64/libnih.so.
1.0
.
0
init
1
root DEL REG
253
,
0
784904
/lib64/ld-
2.12
.so
init
1
root 0u CHR
1
,
3
0t0
4160
/dev/
null
init
1
root 1u CHR
1
,
3
0t0
4160
/dev/
null
init
1
root 2u CHR
1
,
3
0t0
4160
/dev/
null
init
1
root 3r FIFO
0
,
8
0t0
8845
pipe
init
1
root 4w FIFO
0
,
8
0t0
8845
pipe
init
1
root 5r DIR
0
,
10
0
1
inotify
init
1
root 6r DIR
0
,
10
0
1
inotify
init
1
root 7u unix
0xffff880037504680
0t0
8846
socket
컬럼별 의미는 다음과 같다.
- COMMAND : 실행한 명령어
- PID : process id
- USER : 실행한 사용자
- FD: File Descriptor, 파일의 종류.
- cwd: current working directory
- rtd: root directory
- mem : memory-mapped file
- txt: program text (code and data);
- TYPE: 파일 종류
- DIR: 디렉터리
- CHR: character special file
- REG: regular file
- unix: 유닉스 도메인 소켓 (MySQL 등이 사용하는 소켓으로 로컬 프로세스에서만 사용 가능하며 TCP/UDP 보다 속도가 매우 빠름)
- DEVICE : 장치 번호
- SIZE/OFF: 파일의 크기나 오프셋
- NODE: 노드 번호
- NAME: 파일명
특정 사용자의 열린 파일 출력
-u 옵션으로 사용자를 지정할 수 있다.
lsof -u lesstif
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd
7320
lesstif cwd DIR
253
,
0
4096
2
/
sshd
7320
lesstif rtd DIR
253
,
0
4096
2
/
sshd
7320
lesstif txt REG
253
,
0
546680
931362
/usr/sbin/sshd
sshd
7320
lesstif DEL REG
0
,
4
22174
/dev/zero
sshd
7320
lesstif mem REG
253
,
0
18592
785075
/lib64/security/pam_limits.so
sshd
7320
lesstif mem REG
253
,
0
10224
785073
/lib64/security/pam_keyinit.so
sshd
7320
lesstif mem REG
253
,
0
10240
785078
/lib64/security/pam_loginuid.so
sshd
7320
lesstif mem REG
253
,
0
18664
785090
/lib64/security/pam_selinux.so
sshd
7320
lesstif mem REG
253
,
0
41088
925568
/usr/lib64/libcrack.so.
2.8
.
1
sshd
7320
lesstif mem REG
253
,
0
14432
785059
/lib64/security/pam_cracklib.so
특정 포트를 사용하는 프로세스 정보 보기
개인적으로 가장 많이 쓰는 명령어이다. -i 옵션뒤에 프로토콜과 포트를 명시해 주면 된다. 다음은 TCP 22번 포트(ssh)를 쓰는 프로세스의 정보를 출력한다.
lsof -i TCP:
22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd
1550
root 3u IPv4
13931
0t0 TCP *:ssh (LISTEN)
sshd
1550
root 4u IPv6
13933
0t0 TCP *:ssh (LISTEN)
sshd
1895
root 3r IPv4
15005
0t0 TCP
192.168
.
152.131
:ssh->
192.168
.
152.1
:
55859
(ESTABLISHED)
sshd
7316
root 3r IPv4
22126
0t0 TCP
192.168
.
152.131
:ssh->
192.168
.
152.1
:
57127
(ESTABLISHED)
sshd
7320
lesstif 3u IPv4
22126
0t0 TCP
192.168
.
152.131
:ssh->
192.168
.
152.1
:
57127
(ESTABLISHED)
sshd
7474
root 3r IPv4
22763
0t0 TCP
192.168
.
152.131
:ssh->
192.168
.
152.1
:
57197
(ESTABLISHED)
특정 명령어가 사용하는 포트
apache httpd 같은 경우 fork 하여 여러 개의 프로세스가 뜨게 된다. -c 옵션과 httpd 를 주면 httpd 가 오픈한 파일 정보를 출력한다.
lsof -c httpd
특정 파일을 사용하는 프로세스 보기
특정 파일을 사용하고 있는 프로세스의 자세한 정보를 볼 수 있다. 옵션 없이 파일의 경로를 지정하면 된다.
lsof /var/log/httpd/access_log
특정 디렉터리내 열린 파일 보기
특정 디렉터리 하위의 열린 파일을 표시하고 싶은 경우가 있다. +D 옵션 뒤에 디렉터리 경로를 명시하면 된다. 아래는 /tmp 디렉터리 밑에 열린 파일을 표시한다.
lsof +D /tmp
포트 범위 지정
TCP 포트 22 번 에서 80번 까지 출력
lsof -i TCP:
22
-
80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
master
1349
root 12u IPv4
12888
0t0 TCP localhost:smtp (LISTEN)
master
1349
root 13u IPv6
12890
0t0 TCP localhost:smtp (LISTEN)
sshd
1550
root 3u IPv4
13931
0t0 TCP *:ssh (LISTEN)
sshd
1550
root 4u IPv6
13933
0t0 TCP *:ssh (LISTEN)
sshd
1895
root 3r IPv4
15005
0t0 TCP
192.168
.
152.131
:ssh->
192.168
.
152.1
:
55859
(ESTABLISHED)
sshd
7316
root 3r IPv4
22126
0t0 TCP
192.168
.
152.131
:ssh->
192.168
.
152.1
:
57127
(ESTABLISHED)
sshd
7320
lesstif 3u IPv4
22126
0t0 TCP
192.168
.
152.131
:ssh->
192.168
.
152.1
:
57127
(ESTABLISHED)
httpd
7400
root 4u IPv6
22492
0t0 TCP *:http (LISTEN)
httpd
7402
apache 4u IPv6
22492
0t0 TCP *:http (LISTEN)
httpd
7403
apache 4u IPv6
22492
0t0 TCP *:http (LISTEN)
httpd
7404
apache 4u IPv6
22492
0t0 TCP *:http (LISTEN)
httpd
7405
apache 4u IPv6
22492
0t0 TCP *:http (LISTEN)
httpd
7406
apache 4u IPv6
22492
0t0 TCP *:http (LISTEN)
httpd
7407
apache 4u IPv6
22492
0t0 TCP *:http (LISTEN)
httpd
7408
apache 4u IPv6
22492
0t0 TCP *:http (LISTEN)
httpd
7409
apache 4u IPv6
22492
0t0 TCP *:http (LISTEN)
sshd
7474
root 3r IPv4
22763
0t0 TCP
192.168
.
152.131
:ssh->
192.168
.
152.1
:
57197
(ESTABLISHED)
IPv4 또는 IPv6 포트만 표시
-i 옵션 뒤에 4(IPv4), 또는 6(IPV6) 를 지정하여 특정 IP 의 버전만 확인할 수 있다./
lsof -i
4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind
1068
rpc 6u IPv4
11858
0t0 UDP *:sunrpc
rpcbind
1068
rpc 7u IPv4
11860
0t0 UDP *:
819
rpcbind
1068
rpc 8u IPv4
11861
0t0 TCP *:sunrpc (LISTEN)
rpc.statd
1086
rpcuser 5r IPv4
11949
0t0 UDP *:
838
rpc.statd
1086
rpcuser 8u IPv4
11955
0t0 UDP *:
47492
rpc.statd
1086
rpcuser 9u IPv4
11959
0t0 TCP *:
38374
(LISTEN)
cupsd
1159
root 7u IPv4
12195
0t0 TCP localhost:ipp (LISTEN)
특정 사용자 제외
사용자 지정 옵션인 -u 에 ^를 추가하면 특정 사용자는 제외할 수 있다. 다음은 lesstif 와 root 사용자가 열은 파일은 제외하고 정보를 출력한다.
lsof -u^lesstif -u ^root
열린 모든 네트워크 포트 표시
모든 네트워크 포트를 표시한다. -i 뒤에 프로토콜을 명시하면 해당 프로토콜 관련 포트만 표시한다.
## 모든 포트
lsof
-i
## TCP 만
lsof
-i TCP
## UDP 만
lsof
-i UDP
특정 프로세스가 오픈한 파일 표시
특정 프로세스가 오픈한 파일만 표시한다. -p(소문자) 옵션뒤에 PID 를 주면 된다.
lsof -p
123
특정 사용자가 오픈한 모든 프로세스 중지
-t 옵션은 자세한 정보를 출력하지 않고 pid 정보만 출력한다. 다음 명령은 lesstif 사용자로 구동한 프로세스의 id 를 리턴한다.
lsof -t -u lesstif
13324
이를 응용하여 kill 명령어에 pid 만 전달할 수 있으므로 아래와 같이 사용하면 lesstif 사용자의 모든 프로세스를 중지하게 된다.
kill -KILL `lsof -t -u lesstif`
출처 : https://www.lesstif.com/pages/viewpage.action?pageId=20776078
'리눅스' 카테고리의 다른 글
리눅스 ulimit (0) 2017.01.05 리눅스 jstack thread_dump 보기시 에러 (0) 2017.01.05 리눅스 Apache 동시 접속자 수 확인 명령어 (0) 2016.12.26 리눅스 톰캣 버전 확인하는 방법 (0) 2016.11.11 리눅스 톰캣 아파치 연동! (0) 2015.04.11