2012. 12. 24. 15:51

lsof , fuser, pgrep 명령어 정리

1. lsof 란?

일반적으로 시스템에서 동작하고 있는 모든 프로세스에 의해서 열리어진 파일들에 
관한 정보를 보여주는 시스템 관리 명령어


2.1. lsof 파일명

지정한 파일을 엑세스 하고 있는 프로세스의 정보를 보여준다.

# lsof /usr/sbin/proftpd 
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
proftpd 647 nobody txt REG 8,2 433516 209221 /usr/sbin/proftpd

 

2.2. lsof /tmp

지정한 디렉토리를 엑세스 하고 있는 프로세스의 정보를 보여준다.

# lsof /tmp
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
libhttpd. 27187 root 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27318 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27319 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27320 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27321 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)

 

2.3. lsof -i

모든 네트워크 연결되어 있는 프로세스와 파일을 정보를 보여준다.

# lsof -i
sshd 586 root 3u IPv4 1877 TCP *:ssh (LISTEN)
xinetd 600 root 5u IPv4 1943 TCP *:pop3 (LISTEN)
sendmail 619 root 4u IPv4 1962 TCP *:smtp (LISTEN)
proftpd 647 nobody 0u IPv4 315947 TCP *:ftp (LISTEN)
mysqld 708 mysql 3u IPv4 2652 TCP *:mysql (LISTEN)


ex)lsof -iTCP ; lsof -iUDP
tcp 나 혹은 UDP를 걸러서 볼때 사용한다.

 

2.4. lsof -c 데몬명

지정한 데몬과 연결되어 있는 프로세스와 파일을 정보를 보여준다.

# lsof -c proftpd
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
proftpd 647 nobody cwd DIR 8,3 4096 2 /
proftpd 647 nobody rtd DIR 8,3 4096 2 /
proftpd 647 nobody txt REG 8,2 433516 209221 /usr/sbin/proftpd
proftpd 647 nobody mem REG 8,3 106424 15973 /lib/ld-2.3.2.so
proftpd 647 nobody mem REG 8,3 23404 15994 /lib/libcrypt-2.3.2.so
proftpd 647 nobody mem REG 8,3 30488 17917 /lib/libpam.so.0.75
proftpd 647 nobody mem REG 8,3 1571340 95813 /lib/tls/libc-2.3.2.so
proftpd 647 nobody mem REG 8,3 14888 15996 /lib/libdl-2.3.2.so
proftpd 647 nobody mem REG 8,3 8612 17914 /lib/liblaus.so.1.0.0
proftpd 647 nobody mem REG 8,3 51908 16016 /lib/libnss_files-2.3.2.so
proftpd 647 nobody 0u IPv4 315947 TCP *:ftp (LISTEN)
proftpd 647 nobody 4r REG 8,3 3509 82811 /etc/passwd
proftpd 647 nobody 5r REG 8,3 1241 83170 /etc/group


2.5. lsof -p 프로세스ID

지정한 프로세스와 관련된 프로세스와 파일의 정보를 보여준다.

# lsof -p 1
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,3 4096 2 /
init 1 root rtd DIR 8,3 4096 2 /
init 1 root txt REG 8,3 27036 16204 /sbin/init
init 1 root mem REG 8,3 1571340 95813 /lib/tls/libc-2.3.2.so
init 1 root mem REG 8,3 106424 15973 /lib/ld-2.3.2.so
init 1 root 10u FIFO 8,3 71415 /dev/initctl


3. 해킹 추적

3.1. 시나리오

#lsof -i -> 기본 포트연것을 확인한다.
#lsof -p -> 프로세스를 분석한다.
#lsof /home/홈페이지 디렉토리 -> 특정디렉토리에 있는 프로세스 검사
#lsof /tmp -> 임시파일 관련 프로세스 분석
#lsof /dev -> 정규 해킹 디렉토리 분석


 

fuser  정리

#fuser 21/tcp                        ----> 포트/tcp,udp :  열린포트 pid 찾기

21/tcp:                931          

 

# fuser -cu /var 
하면 현재 /var라는 디렉토리를 사용하고 있는 유저나 데몬의 process가 열거된다... 
그 열거된 pid를 보고 어떤 데몬이 사용하고 있고 어떤 유저가 사용하고 있는지 알 수 있다.

 

# fuser -ck /var 
하면 /var라는 디렉토리를 사용하고 있는 유저나 데몬의 process id 를 모두 'kill -9' 와 같은 행동을 하게 된다.

이 명령어는 주의해서 사용하길 잘못 명령어 먹였다가 서버 리셋 해야된다.ㅋㅋ

 

fuser : 특정 파일이나 파일시스템, 포트등에서 사용중인 프로세스를 확인할 때 사용.

 

옵션정리
-a : 사용되지 있지않은 파일까지도 표시
-k : 지정된 파일과 관련된 모든 프로세스들을 KILL
-i : 프로세스를 KILL시키기 전에 사용자에게 확인
-l : 사용가능한 signal을 출력
-m : 지정한 파일이나 디렉토리가 마운트된 파일시스템에서 실행되고 있는 프로세스의 PID 출력
-n space : 지정된 공간(file, udp or tcp)내에서 검색
-s : 결과를 간략히 출력
-signal : 지정된 프로세스에 기본 signal인 SIGKILL 외에 지정된 signal을 보냄
-u : 프로세스 ID(PID)의 소유자를 보여준다.
-v : 자세한 출력모드 (프로세스의 User, PID, ACCESS, COMMAND를 보여줌)

 

1. 특정 파일을 사용하고 있는 프로세스(pid)확인
fuser /var/log/messages

 

2. 특정 파일을 사용하고 있는 프로세스(pid) 및 user 확인
fuser -u /var/log/messages

 

3. 특정 프로토콜, 포트를 사용중인 프로세스 확인
fuser -vn tcp ftp
fuser -vn tcp 1111

 

4. -k옵션을 사용하여 프로세스 kill
fuser -vn tcp ssh
fuser -kn tcp ssh
fuser -vn tcp ssh

 

 

pgrep 정리

 

[ pgrep으로 실행중인 프로세스 찾기 ]
 
♧ pgrep을 사용하여 가장 기본적인 형태로, 이름을(또는 일부) 검색.

 

▶ 기본적인 사용 예제:

# pgrep init

1

2689
 프로세스 ID를 보여줌
 
# pgrep -l init

1          init

2689   xinit
 -l 옵션 : 프로세스 이름을 보여줌
 
# pgrep -lu apache

2551    sshd

2552    bash

2803    vim
 -u 옵션 : 유저와 관련된 프로세스 찾기
 

 

▶ ps 와 pgrep 결합 사용 예:

/* sshd 및 실행에 대한 검색의 ps(간단하게) */

# ps -p `pgrep sshd`


  PID     TTY      STAT   TIME    COMMAND

  626    ?           Ss        0:00     /usr/sbin/sshd -D

 4000   ?          Ss        0:00     sshd: devanix [priv]

 4110   ?          S           0:01     sshd: devanix@pts/1

 

/* sshd 및 실행에 대한 검색의 ps(전체) */

# ps -fp $(pgrep sshd)


UID         PID      PPID   C    STIME  TTY      STAT   TIME    CMD

root         626      1         0     Aug12   ?           Ss       0:00     /usr/sbin/sshd -D

root         4000    626    0    01:59     ?           Ss       0:00     sshd: devanix [priv]

devanix   4110   4000  0    01:59     ?           S         0:01     sshd: devanix@pts/1

 


 

/* firefox 검색, 우선순위 향상 */

# sudo renice -5 $(pgrep firefox)

20522:  old  priority 0, new priority -5

20527:  old  priority 0, new priority -5
 

☞ 이러한 방법으로 입력한 프로세스 ID와 pgrep을 결합할 수 있다.




[출처] lsof , fuser, pgrep 명령어 정리|작성자 삽질맨