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을 결합할 수 있다.

출처 - http://blog.naver.com/nforce7050/140139510510 

'System > Linux' 카테고리의 다른 글

TCP-Wrapper  (0) 2011.10.31
/etc/profile 예시  (0) 2011.10.05
top 명령어  (0) 2011.09.27
ngrep 다운로드 및 사용법 (옵션)  (1) 2011.09.23
clock, date, rdate, ntpdate  (0) 2011.08.22
Posted by linuxism
,

top 명령어

System/Linux 2011. 9. 27. 08:54

top : cpu를 집중적으로 사용하는 프로세스를 중심으로 최신 정보를 계속 줍니다.

        시스템 상태와 대부분의 프로세스들을 refresh 해서 연속적으로 화면에 보여줍니다.

 

 전체 화면

# top

 

 

 프로세스 정보

 

 

1) 1행 : 시스템의 가동 시간과 평균 부하의 숫자를 출력

 

top - 10:41:26 up 3:35, 2 users, load average: 0.00, 0.01, 0.05

 

-> 현재시간(10:41:26)과 uptime 값(up ), 현재 로그인된 사용자 수(2 users), 시스템의 최근 1분, 5분, 15분에 대한 각각의 평균 부하율(load average): 0.00, 0.01, 0.05)를 나타냅니다.

* load average : 작업의 대기시간을 말합니다. 값이 1이 나왔다면 1분동안 평균 1개 정도의 프로세서가 대기상태에 있다는 것입니다. 서버마다 차이가 있긴 하지만 5 정도면 서버가 부하를 받는 다고 생각합니다. 과부하는 10 ~ 15이상이면 과부하라고 봅니다

* uptime : 시스템의 평균 부하율 정보를 확인할 수 있습니다.

   - # uptime

  

   - 현재시간(11:22:51), 재부팅 없이 운영중임(up ),  로그인한 시간(4:17), 현재 시스템에 접속한 사용자(2 users), 1분, 5분, 15분간의 시스템 평균 부하율(load average: 0.00, 0.01, 0.05) 정보를 출력

 

 

2) 2행 : 현재 실행중인 프로세스들의 상황

 

Tasks:  69 total,   1 running,  68 sleeping,   0 stopped,   0 zombie

 

-> 전체 실행된 현재 프로세스의 수는 (69 total), 실행중인 프로세스 ( 1 running), 유휴상태의 프로세스(68 sleeping), 정지 된 프로세스( 0 stopped), 좀비 프로세스(0 zombie)들의 상황을 알려줍니다.

 

 

3) 3행 : CPU의 사용에 대한 상황 (이 정보를 통해 CPU의 사용현황을 파악하여 CPU의 추가적인 보강 계획이나 업그레이드 등의 계획을 세울수 있습니다)

 

Cpu(s):  0.3%us,  0.3%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

 

-> 사용자가 사용중인 CPU의 사용율(1.3% us), 시스템이 사용하는 CPU의 사용율(0.3% sy), NICE 정책에 의해 사용되는 CPU의 사용율( 0.0% ni), 사용되지 않는 CPU의 미사용율(96.3% id), 입출력 대기상태의 사용율(1.9% wa)등의 상황에 대해 알려줍니다.

 

 

4) 4행 : 메모리의 사용에 대한 상황 (이 정보를 통해 메모리의 사용 현황에 대해 파악하고 메모리의 부족 현상 등을 분석하여 추가적인 메모리의 확장에 대해 고려할수 있습니다.)

 

Mem:   1025700k total,   340708k used,   684992k free,    43968k buffers

 

-> 전체 물리적인 메모리(1025700k total), 사용중인 메모리(340708k used), 사용되지 않는 여유 메모리(684992k free), 버퍼된 메모리의 양(43968k buffers)등의 상황에 대해 알려줍니다.

 

 

5) 마지막행 : 스왑메모리의 사용에 대한 상황(스왑 메모리의 사용이 증가할 경우에는 물리적 메모리의 확장을 고려)

 

Swap:   407548k total,        0k used,   407548k free,   137860k cached

 

-> 전체 스왑 메모리(407548k total), 사용중인 스왑 메모리( 0kused), 남아있는 스왑메모리(407548k free), 캐싱메모리(137860k cached)등의 상황에 대해 알려줍니다.

 

 필드 설명

 

 

* PID : 프로세스 ID (PID)

* USER : 프로세스를 실행시킨 사용자 ID 

* PRI : 프로세스의 우선순위 (priority)

* NI : NICE 값. 일의 nice value값이다. 마이너스를 가지는 nice value는 우선순위가 높다.

* VIRT : 가상 메모리의 사용량(SWAP+RES)

* RES : 현재 페이지가 상주하고 있는 크기(Resident Size)

* SHR : 분할된 페이지, 프로세스에 의해 사용된 메모리를 나눈 메모리의 총합.

* S : 프로세스의 상태

* %CPU : 프로세스가 사용하는 CPU의 사용율

* %MEM : 프로세스가 사용하는 메모리의 사용율

* TIME+ : 프로세스가 시작하여 사용한 총 CPU 시간

* COMMAND : 실행된 명령어


출처 - http://blog.naver.com/xerosda?Redirect=Log&logNo=30110389852

====================================================================================

TOP 명령어를 필요할때 사용하기는 했지만 TOP 유틸리티에 여러 기능이 있는지 몰랐습니다.

아래 내용을 보면서 여러 기능을 익히길 바랍니다.


* top

- 리눅스 시스템의 운용상황을 실시간으로 전반적인 상황을 모니터링할 때 사용됩니다. 윈도우로 비교하자면 작업 관리자 기능이라고 생각하시면 됩니다.

기본적으로 top은 5초에 한번씩 실시간으로 refresh 합니다. 따라서 시스템에서 사용되고 있는 여러 시스템 리소스를 한눈에 확인을 할 수 있습니다.




리눅스에서 top 명령어를 사용하면 위와 같은 결과를 확인하실 수 있습니다.

여기서 보여주는 항목에 대해서 먼저 확인하고 사용 방법에 대해서 이야기 하겠습니다.


** "h" 입력 - 옵션 확인



** top 실행화면 확인



위 내용은 uptime과 같이 현재 시간, uptime 시간, 접속 유저 수, load average (1분, 5분, 15분)의 값을 보여 준다.




위 내용은 프로세스의 종합적인 상황을 보여준다.

task : 전체 실행된 프로세스 수

running : 현재 실행되고 있는 프로세스 수

sleeping : 유휴상태에 있는 프로세스 수 

stopped : 종료된 프로세스 수 

zombie : 좀비 프로세스 수




CPU 사용 및 실행상태를 보여준다.


0.0%us : 사용자가 실행시킨 프로세스의 CPU 사용률

0.0%sy : 시스템자체에서 사용하는 CPU 사용률

0.0%ni : nice 정책에 의해 사용되고 있는 CPU 사용률.

100.0%id : 사용되지 않는 CPU 사용률

0.0%wa : 입출력 대기상태의 CPU 사용률

0.0%hi : IRQ에 사용된 CPU

0.0%si : soft IRQs에 사용된 CPU

0.0%st : steal 값 (다른 instances 실행에 주어진 time 값)




free에서 확인할 수 있는 시스템 메모리 사용량




위 화면은 top을 실행한 top 화면에서 26가지의 프로세스에 대한 정보들 입니다. 위는 기본적으로 선택된 12가지에 대한 내용입니다.


PID : 해당 프로세스의 유입한 프로세스 번호

USER : 프로세스를 실행시킨 유저 정보

PR : 프로세스의 우선 순위

NI : 프로세스의 NICE 값

VIRT : 해당 프로세스가 사용한 가상 메모리 정보

RES : 해당 프로세스의 물리적은 Memory 사용량

SHR : 해당 프로세스에 의해 사용된 공유 메모리의 총량

S : 해당 프로세스의 상태 값

[ D = 중단할 수 없는 sleep 상태]

[ R = 실행중인 프로세스 ]

[ S = 휴면 상태 ]

[ T = Trace 되거나 스톱된 프로세스 ]

[ Z = 좀비 프로세스 ]

%CPU : 해당 프로세스의 CPU 사용률

%MEM : 해당 프로세의 Memory 사용률

TMIE+ : TMIE 항목값과 같지만 100분의 1초 단위를 반영하는 CPU 사용 시간 값을 나타냄

PPID : 해당 프로세스의 부모 프로세스의 PID 값

RUSER :  해당 프로세스의 실제 소유자

UID : 해당 프로세스의 EUID(effective user id)

COMMAND : 프로세스명 실행 명령 (Command name / line)


** 기타 옵션 사용법


1) top -c

- 위 옵션은 프로세스의 전체 경로를 표기하여 시스템에서 사용되고 있는 프로세스 보다 정확한 정보를 얻기 위해 사용된다.


2) top -c -d 2

- 위 옵션은 2초 간격으로 Refresh 를 한다.



3) top 실행 후 "SHIFT+P"

- 각 프로세스들의 CPU 사용률이 높은 순서대로 정렬하여 보여 준다.


4) top 실행 후 "SHIFT+M"

- 각 프로세스들의 Memory 사용량이 가장 많은 순서대로 프로세스들을 확인해보는 방법이다.


5) top 실행 후 "SHIFT+T"

- 실행시간이 가장 오래된 순서대로 정렬하여 보여주는 방법이다.


6) top 실행 후 "u" 입력 후 "유저이름 입력"

특정 유저가 실행시킨 process 확인한다.


7) top 실행 후 "k" 입력 후 "PID 입력"

특정 프로세스를 종료할 때 사용한다.



top 유틸리티는 많은 내용을 가지고 있지만 많이 사용되는 부분에 대해서 정리를 했습니다.

추가 내용은 아래 링크를 확인 바랍니다.

http://linux.about.com/od/commands/l/blcmdl1_top.htm

출처 - http://blog.naver.com/jamesy?Redirect=Log&logNo=60141358686 

'System > Linux' 카테고리의 다른 글

/etc/profile 예시  (0) 2011.10.05
lsof , fuser, pgrep 명령어  (0) 2011.09.30
ngrep 다운로드 및 사용법 (옵션)  (1) 2011.09.23
clock, date, rdate, ntpdate  (0) 2011.08.22
linux - grep, egrep, fgrep  (0) 2011.08.05
Posted by linuxism
,
터보C정복 저장 임인건 wrote:
프로그래머 10계명

도스시절 한글라이브러리인 한라 프로를 만드신 임인건님께서 쓰신 글입니다.
프로그래밍을 공부하시는 분들께 큰 도움이 되리라 생각합니다.

시작부터 경지에 이르기까지…


1. 정보를 모음에 소홀히 하지 말고 설명서를 읽음에 게을리 하지 말지어

다. 오늘 필요 없는 정보는 내일 필요하리라. 가장 가치 있고도 저렴한

지식은 책 속에 있느니라. 서점과 동료의 책꽂이에 무엇이 꽂혀 있는지

때때로 살피어라. 무심코 흘렸던 종이 한 장이 너의 근심을 풀어 주었

으리라. 설명서는 충분히, 꼼꼼히 읽을지어다. 모든 의문은 설명서를

안 보는 데서 생기니라. 그렇더라도 모두 다 읽을 필요는 없느니라.


2. 너의 PC가 안전하다고 믿지 말지어다. 5분 후에 정전이 되고 내일 너의

하드가 맛이 가리라. 그러하니 너의 소중한 소스 코드는 정기적으로 여

러 군데에 단계별로 백업해 두어라.


3. 변하는 수를 다룰 때에는 늘 조심할지어다. 정수가 절대로 그 한계를

넘지 않으리라 가정하는 것은 어리석음이라. 127, -128, 255, 32767,

-32768, 65535, 이 숫자들을 너의 골수에 새기어라. 0.0은 0이 아니니

실수는 원래부터 결코 정밀하지 않느니라. 부호 없는 것과 있는 것을

어울리거나 정수끼리 나눌 때에는 늘 조심하여라.


4. 무슨 일을 반복시킬 때에는 처음과 끝에 유의할지어다. 너의 컴퓨터는

1보다는 0을 좋아 하니라. 배열의 첨자가 그 범위를 넘지 않을지 손 댈

때마다 따져 보아라. 수식에 1을 더하거나 뺄 때에는 늘 긴장하라. 너

의 프로그램은 단지 한 번 덜해서 틀리고 한 번 더해서 다운되느니라.


5. 항상 모든 경우의 수를 고려하고 섣불리 생략하지 말지어다. 절대로 일

어나지 않을 일은 반드시 일어나고, 가장 드물게 일어날 일이 가장 너

를괴롭히리라. 그러하니 언제나 논리에 구멍이 없는지 꼼꼼히 따져 보

고, if를 쓸 때에는 else부터 생각하라.


6. 함수 안에서 매개 변수값은 결코 믿지 말지어다. 지금 그 매개 변수가

결코 가질 수 없다는 값을 내일부터는 가지리라. 그러하니 매개 변수값

이 올바름을 항상 검사할지어다. 그렇더라도 처리 속도가 문제가 되는

경우는 예외이니라.


7. 오류를 알려 주는 기능은 있는 대로 모두 활용할지어다. 컴파일러의 경

고는 모두 켜 두어라. 경고는 곧 오류이니라. 오류를 알리는 함수의 결

과를 확인하지 않는 우를 범하지 말지어다. 모든 파일 입출력과 모든

메모리 할당은 조만간 실패할 것이라.


8. 한 번의 수정과 재컴파일만으로 연관된 모든 것이 저절로, 강제로 바뀌

도록 할지어다. 어떠한 것을 수정했을 때에 연관된 것이 따라서 변하지

않는다면 그것이 곧 벌레이니라. 컴파일러로 하여금 매개 변수 리스트

를 완전하게 검사하도록 하고, 언젠가 손대야 하거나 따라서 변해야 하

는 수치는 전부 매크로로 치환하며, 형 정의를 적극 활용하여라.


9. 사용자가 알아서 잘 써 주리라고 희망하지 말지어다. 너의 프로그램은

항상 바보와 미친놈만이 쓰느니라. 사용 설명서를 쓸 때에는 결코 빠뜨

리지 말아라. 빠뜨린 만큼 사용자는 너를 괴롭힐 것이니라.


10.매사에 겸손하고 항상 남을 생각할지어다. 가장 완벽한 프로그램일수록

가장 완벽하게 숨은 벌레가 있느니라. 네가 이 세상 최고의 프로그래머

라고 떠들며 자만할 때, 옆집 곳간에서는 훨씬 더 뛰어난 것을 묵묵히

만들고 있느니라. 아무렴 프로그래밍은 혼자 잘나서 할 게 아니니, 너

로 인해 다른 사람들도 더불어 잘 되면 그얼마나 좋은 것이냐.

이 모든 것을 깨닫고 지키려 애쓰는 자는, 있어도 없어도 되어도 아니

되어도 늘 평온하리라.있나니 너희는 모든 프로그램에 대해서 위의 프로시줘를 따를 지니라.

'Development > C' 카테고리의 다른 글

C언어 표준  (1) 2012.02.11
심볼 테이블 (Symbol Table)  (0) 2012.01.31
심볼 테이블  (0) 2011.07.31
C 언어 컴파일 과정  (0) 2011.02.20
toolchain 이란  (0) 2011.02.12
Posted by linuxism
,