BLOG main image
정민군's Blog
miniya devlog

'System'에 해당되는 글 5건

  1. 2007.12.26 lsof 사용하여 시스템 체크
  2. 2007.05.11 JEUS Menual
  3. 2006.10.17 ANT 설치

lsof 사용하여 시스템 체크

System/OS 2007. 12. 26. 09:54 by 정민군

lsof 사용하여 시스템 체크하기

제공 : howtosolaris.com

lsof는 소프트웨어는 시스템내의 모든 열려 있는 파일들을 나열 할수 있다.
특히 네트웍 연결에 대한 프로세서의 추적에 용이하게 쓰인다.

그럼 인스톨 방법부터 사용법에 대해 말하겠다...

먼저 소스나 솔라리스용 패캐지를 다운 로드 한다.
여그는 솔라리스니까 편하게 패캐지를 가져 왔다.
http://sunfreeware.com 에서 소스나 패캐지를 다운 할수 있다.

[ns :/test]#gunzip lsof-4.45-sol7-sparc-32-local.gz

[ns :/test]#pkgadd -d lsof-4.45-sol7-sparc-32-local

다음과 같은 패키지를 사용할 수 있습니다.

1 SMClsof lsof
(sparc) 4.45

처리할 패키지(들)를 선택하십시오.(또는 모든 패키지를
처리하려면'all'을 입력하십시오.) (default: all) [?,??,q]: 1
패키지 예 <SMClsof>(을)를 </test/lsof-4.45-sol7-sparc-32-local>에서 처리 중

lsof
(sparc) 4.45

현 시도는 이미 설치되어 있는 패키지와 같은 구조 및 패키지 버전을
설치하려는 것으로 나타납니다. 이 설치 작업은 기존 패키지를 겹쳐쓰려고
할 것입니다.

Vic Abell
디렉토리 </usr/local>(을)를 패키지의 기본 디렉토리로 사용
## 패키지 정보 처리 중
## 시스템 정보 처리 중
22개 패키지 경로 이름이 이미 제대로 설치되어 있습니다.
## 디스크 공간 요구 검증 중
## 이미 설치되어 있는 패키지와의 충돌 여부를 확인하고 있습니다.
## setuid/setgid 프로그램 점검

다음의 파일은 setuid/setgid 권한과 함께 설치되는 중입니다:
*/usr/local/bin/lsof <setgid sys>

* - setuid/setgid이기도 한 파일 겹쳐쓰기

이 파일들을 setuid/setgid 파일로 설치하겠습니까? y

lsof(을(를 <SMClsof>(으)로 설치

## 1째 (전체: 1) 부분 설치
/usr/local/man/man8/lsof.8
[ 클래스 <none> 검증 ]

<SMClsof>(이)가 성공적으로 설치되었습니다.


자 이제 사용법에 대해 알아 보자 . 참 lsof 명령어는 /usr/local/bin/ 에 있다.

사용법은 간단하다.

lsof [-?abChlnNoOPRstUvV] [-c c] [+|-d s] [+|-D D] [+|-f[cfgGn]]
[-F [f]] [-g [s]] [-i [i]] [-k k] [+|-L [l]] [-m m] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-S [t]] [-T [t]] [-u s] [+|-w] [--] [names]


간단 하지 않나?.....^^; 옵션이 상당히 많군요 ..

옵션을 설명하자면 다음과 같다.

-?|-h : list help
-a : AND selections (OR)
-b : avoid kernel blocks
-c c : list command c
-C : no kernel name cache
+d s : dir s files
-d s : select by FD set
+D D : dir D tree *SLOW?*
-D D : ?|i|b|r|u[path]
-i : select IPv4 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 (+) -- end option scan
+f|-f : +filesystem or -file names
+|-f[cfgGn] : Ct,Fstr,flaGs,Node
-F [f] : select fields; -F? for help -k k kernel symbols (/dev/ksyms)
+|-L [l] : list (+) suppress (-) link counts < l (0 = all; default = 0)
-m m : kernel memory (/dev/kmem)
+|-M : portMap registration (-)
-o o : o 0t offset digits (8)
-p s : select by PID set
-S [t]: t second stat timeout (default 15)
-T qsw: TCP/TPI Q,St,Win info (s)
-g [s]: select by process group ID set and print process group IDs
-i i : select by IPv4 address: [proto][@host|addr][:svc_list|port_list]
+|-r [t] : repeat every t seconds (15); + until no files, - forever
-u s : exclude(^)|select login|UID set s


이제 간단한 사용 법을 몇가지 예로 들어 보겠다.

예1 ) 어떤 프로세스가 어떤 포트를 사용하고 있는가?

# lsof -i | more

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tocsin 124 nobody 0u inet 0x700d7d68 0t0 TCP *:* (IDLE)
rpcbind 130 root 3u inet 0x700d7cf8 0t0 UDP *:sunrpc (Idle)
rpcbind 130 root 4u inet 0x700d7c88 0t0 UDP *:* (Unbound)
rpcbind 130 root 5u inet 0x700d7c18 0t0 UDP *:32771 (Idle)
rpcbind 130 root 6u inet 0x700d7b38 0t0 TCP *:sunrpc (LISTEN)
rpcbind 130 root 7u inet 0x700d7ac8 0t0 TCP *:* (IDLE)
in.named 171 root 20u inet 0x700d6e88 0t0 UDP *:32774 (Idle)
in.named 171 root 21u inet 0x700d6e18 0t0 UDP localhost:domain (Idle)
in.named 171 root 22u inet 0x700d6d38 0t0 UDP ns:domain (Idle)
in.named 171 root 23u inet 0x700d6da8 0t0 TCP localhost:domain (LISTEN)
in.named 171 root 25u inet 0x700d6cc8 0t0 TCP ns:domain (LISTEN)
syslogd 184 root 4u inet 0x700d6be8 0t0 UDP *:syslog (Idle)
httpd 258 root 16u inet 0x700d69b8 0t0 TCP *:80 (LISTEN)
mysqld 300 root 3u inet 0x700d6398 0t0 TCP *:3306 (LISTEN)
mountd 319 root 6u inet 0x700d6788 0t0 UDP *:32776 (Idle)
.
.
.이하 생략


예2) 어떤 프로세스가 어떤파일을 사용하고 있는가 ?

# lsof [어떤 파일]

예3) httpd에 억세스 하고 있는 모든 놈들을 보고 싶다.

# lsof -c httpd

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 258 root cwd VDIR 32,0 2048 2 /
httpd 258 root txt VREG 32,0 1454680 639810 /usr/local/apache/bin/httpd
httpd 258 root txt VREG 32,0 24580 515459 /usr/lib/locale/ko/methods_ko.so
.2
httpd 258 root txt VREG 32,0 75120 515458 /usr/lib/locale/ko/ko.so.2
httpd 258 root txt VREG 32,0 1124692 155648 /usr/lib/libc.so.1
httpd 258 root txt VREG 32,0 837092 155449 /usr/lib/libnsl.so.1
httpd 258 root txt VREG 32,0 17256 217500 /usr/platform/sun4u/lib/libc_psr
.so.1
httpd 258 root txt VREG 32,0 19876 155368 /usr/lib/libmp.so.2
httpd 258 root txt VREG 32,0 41500 155356 /usr/lib/libgen.so.1
httpd 258 root txt VREG 32,0 56988 155386 /usr/lib/libsocket.so.1
httpd 258 root txt VREG 32,0 15084 155346 /usr/lib/libcrypt_i.so.1
httpd 258 root txt VREG 32,0 106368 155408 /usr/lib/libm.so.1

...이하 생략

예4) moon 유저가 뭐하나?

#lsof -u moon

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
csh 11396 moon cwd VDIR 32,0 2048 540326 /export/moon
csh 11396 moon txt VREG 32,0 151976 204913 /usr/bin/csh
csh 11396 moon txt VREG 32,0 1124692 155648 /usr/lib/libc.so.1
csh 11396 moon txt VREG 32,0 17256 217500 /usr/platform/sun4u/lib/libc_psr.so.1
csh 11396 moon txt VREG 32,0 10472 155365 /usr/lib/libmapmalloc.so.1
csh 11396 moon txt VREG 32,0 474964 155436 /usr/lib/libcurses.so.1
csh 11396 moon txt VREG 32,0 4600 155657 /usr/lib/libdl.so.1
csh 11396 moon txt VREG 32,0 183060 155248 /usr/lib/ld.so.1
csh 11396 moon 0r VCHR 13,2 0t0 310463 /devices/pseudo/mm@0:null
csh 11396 moon 1r VCHR 13,2 0t0 310463 /devices/pseudo/mm@0:null
csh 11396 moon 2r VCHR 13,2 0t0 310463 /devices/pseudo/mm@0:null


예5) 누가 내꺼에 찝적거리지? ...^^;

lsof -i@howtosolaris.com
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
in.named 171 root 22u inet 0x700d6d38 0t0 UDP ns:domain (Idle)
in.named 171 root 25u inet 0x700d6cc8 0t0 TCP ns:domain (LISTEN)
httpd 7464 nobody 3u inet 0x700d6a98 0t1194 TCP ns:80->PC:4647 (ESTABLISHED)
httpd 7465 nobody 3u inet 0x700d7978 0t44096 TCP ns:80->211.192.217.135:3779 (ESTABLISHED)
httpd 7467 nobody 3u inet 0x700d6a28 0t970 TCP ns:80->152.99.84.254:39766 (ESTABLISHED)
httpd 7468 nobody 3u inet 0x70b09f30 0t35373 TCP ns:80->roso-samsung5.etri.re.kr:4944 (ESTABLISHED)
httpd 7471 nobody 3u inet 0x70b08100 0t973 TCP ns:80->210.102.97.238:2942 (ESTABLISHED)
httpd 7472 nobody 3u inet 0x70b096e0 0t29089 TCP ns:80->211.192.217.135:3778 (ESTABLISHED)
httpd 7473 nobody 3u inet 0x70b08fe0 0t35370 TCP ns:80->roso-samsung5.etri.re.kr:4947 (ESTABLISHED)
httpd 7474 nobody 3u inet 0x70b094b0 0t76114 TCP ns:80->211.192.217.135:3776 (ESTABLISHED)
httpd 7475 nobody 3u inet 0x70b083a0 0t101489 TCP ns:80->roso-samsung5.etri.re.kr:4945 (ESTABLISHED)
httpd 10125 nobody 3u inet 0x70b09750 0t101492 TCP ns:80->roso-samsung5.etri.re.kr:4943 (ESTABLISHED)
httpd 10252 nobody 3u inet 0x70b08020 0t7026 TCP ns:80->211.192.217.135:3777 (ESTABLISHED)
httpd 10273 nobody 3u inet 0x70b085d0 0t51399 TCP ns:80->roso-samsung5.etri.re.kr:4946 (ESTABLISHED)
in.telnet 11392 root 0u inet 0x70b09670 0t101 TCP ns:telnet->PC:1879 (ESTABLISHED)
in.telnet 11392 root 1u inet 0x70b09670 0t101 TCP ns:telnet->PC:1879 (ESTABLISHED)
in.telnet 11392 root 2u inet 0x70b09670 0t101 TCP ns:telnet->PC:1879 (ESTABLISHED)
httpd 11500 nobody 3u inet 0x70b099f0 0t35370 TCP ns:80->roso-samsung5.etri.re.kr:4948 (ESTABLISHED)
httpd 11594 nobody 3u inet 0x700d7828 0t35369 TCP ns:80->roso-samsung5.etri.re.kr:4949 (ESTABLISHED)
httpd 11604 nobody 3u inet 0x700d7908 0t299226 TCP ns:80->roso-samsung5.etri.re.kr:4941 (ESTABLISHED)
httpd 11616 nobody 3u inet 0x700d77b8 0t996 TCP ns:80->211.60.105.147:2123 (ESTABLISHED)
httpd 11617 nobody 3u inet 0x70b08e90 0t102470 TCP ns:80->roso-samsung5.etri.re.kr:4942 (ESTABLISHED)
httpd 11619 nobody 3u inet 0x700d60f8 0t968 TCP ns:80->211.186.82.191:45002 (ESTABLISHED)
httpd 11620 nobody 3u inet 0x70b08db0 0t914 TCP ns:80->211.196.193.3:45854 (ESTABLISHED)
httpd 11623 nobody 3u inet 0x70b09b40 0t1151 TCP ns:80->61.82.64.19:48975 (ESTABLISHED)
httpd 11624 nobody 3u inet 0x70b08330 0t980 TCP ns:80->roso-samsung5.etri.re.kr:4950 (ESTABLISHED)

JEUS Menual

System/Server 2007. 5. 11. 10:09 by 정민군

ANT 설치

System/Server 2006. 10. 17. 21:21 by 정민군
Ant 다운로드 & 설치하기

Ant는 Apache Software Foundation의 프로젝트 가운데 하나이고, James Duncan Davidson가 Tomcat 소스를 빌드하기 위해서 개발했습니다. make와 유사하지만, ant는 XML 방식을 사용하고, 쉘 스크립트나 특정 플렛폼에서 사용하는 툴 대신에 범용적으로 사용할 수 있습니다.

간단한 Ant 설치하기

1. Ant 배포판을 다운 받고, /usr/local/ant 디렉토리에 압축을 풀어 놓습니다. 아래는 root 사용자로 이 과정을 수행한 예제입니다. Apache-Ant 배포판은 root 사용자의 홈 디렉토리(/root)에 다운로드 받은 상태라고 가정하겠습니다.

# cd /usr/local/
# tar jxf $HOME/apache-ant-1.5.4-bin.tar.bz2
# ln -s /usr/local/apache-ant-1.5.4/ ant


2. ANT_HOME 설정을 위해서 쉘 스크립트를 편집하고, PATH에 ant 실행 파일이 있는 디렉토리를 추가합니다. 이전 장에서 수행한 것처럼 /etc/profile.d 파일에 스크립트를 추가합니다.

ANT_HOME은 /usr/local/ant로
PATH에 ${ANT_HOME}/bin 디렉토리 추가
Note: $HOME을 환경 변수로 사용하는 방식은 리눅스의 표준 방식으로 이해하면 됩니다. echo $HOME 명령어를 실행하면, 해당 환경변수가 의미하는 내용을 콘솔에서 확인할 수 있습니다. 아래 예제를 확인해보십시오.

# echo $HOME
/home/rcleveng


java.sh


# /etc/profile.d/java.sh - Sets Java Environment

if [ -z "$JAVA_HOME" ]; then  
 if [ -e /etc/javaversion ]; then        
   javaver=`cat /etc/javaversion | head -1`  
 fi

 if [ -z $javaver ]; then      
   jdkpath=`ls -1 /usr/java/ | grep "$javaver" | head -1`      
   if [ "X$jdkpath" == "X" ]; then            
     jdkpath=`ls -1 /usr/java/ | head -1`        

   fi  
 else        
   jdkpath=`ls -1 /usr/java/ | head -1`  
 fi    
 export JAVA_HOME=/usr/java/$jdkpath    
 export ANT_HOME=/usr/local/ant
 export PATH=${PATH}:${JAVA_HOME}/bin:${ANT_HOME}/bin
fi


java.csh


# /etc/profile.d/java.csh - Sets Java Environment

if ( ! $?JAVA_HOME ) then    
 if ( -e /etc/javaversion ) then        
   set javaver = `cat /etc/javaversion | head -1 `
 endif if ( $?javaver ) then      
   set jdkpath = `ls -1 /usr/java/ | grep '$javaver' | head -1`      
    if ( $jdkpath == '' ) then            
     set jdkpath = `ls -1 /usr/java/ | head -1`
   endif  
 else        
   set jdkpath = `ls -1 /usr/java/ | head -1`    
 endif

 setenv JAVA_HOME /usr/java/$jdkpath  
 setenv ANT_HOME /usr/local/ant
 setenv PATH ${PATH}:${JAVA_HOME}/bin:{$ANT_HOME}/bin
endif



프로젝트 레이아웃

프로젝트 레이아웃(Project Layout)은 프로젝트 타입에 따라서 변경됩니다. 예를 들면 J2EE 프로젝트는 표준 자바 애플리케이션과 다른 레이아웃을 갖고 있습니다. 자바 애플리케이션에서 사용하는 전형적인 레이아웃은 루트 디렉토리에 하위 구조를 생성합니다. 서브 디렉토리에는 애플리케이션 소스, 클래스 파일, javadoc 파일, 프로젝트에서 사용하는 외부 라이브러리와 테스트를 위한 배포 파일(jar 파일)이 있습니다.

프로젝트 홈 디렉토리
+ -- build.xml (Ant 빌드 파일, ant를 사용하는 경우)
+ -- build.properties (Ant 빌드 파일에서 사용하는 Properties 파일. 선택적)
+ -- LICENSE (라이센스 파일)
+ -- src/ (자바 소스와 리소스)
    + -- org/...

    + -- META-INF/
    + -- META-INF/Manifest.mf (Manifest 파일은 JAR를 사용해서 생성)
+ -- classes/ / (컴파일된 .class 파일)
    + -- org/...
+ -- javadoc/ (Javadoc)
    |
    + index.html
    + org/...
+ -- deploy/ (배포하기 위한 애플리케이션 저장)
+ -- lib/ (프로젝트에서 사용하는 외부 라이브러리)


Hello World 자바 소스 생성하기

프로젝트를 시작하기 전에 프로젝트를 위한 디렉토리를 결정합니다. 여기서는 $HOME/projects/helloworld as the location of my project. Here is the list of steps I performed to set up the directory structure:

# mkdir $HOME/projects
# mkdir $HOME/projects
# mkdir $HOME/projects/helloworld
# mkdir $HOME/projects/helloworld/classes
# mkdir $HOME/projects/helloworld/src/otn
# cd $HOME/projects/helloworld/src/otn
# vi Main.java



Note: VI에서 삽입 모드로 변경하기 위해서는 'i' 키를 누릅니다. 물론 VI 대신에 여러분께서 편하게 사용할 수 있는 편집기를 사용해도 됩니다. 여기에서는 VI를 사용해서 설명하겠습니다.


package otn;

public class Main
{
       public static void main( String args[] )
       {
               System.out.println( "Hello World" );
       }
}



ESC 키를 누르고 'wq'를 입력하면 파일을 저장하고 VI를 종료합니다. 다음 명령을 사용해서 디렉토리 구조를 확인합니다.



# cd $HOME/projects
# find . -print
.
./helloworld
./helloworld/src
./helloworld/src/otn
./helloworld/src/otn/Main.java
./helloworld/classes






쉘에서 빌드 하기

자바 컴파일러(javac)를 사용해서 자바 소스 파일을 컴파일 합니다. C 컴파일러인 gcc에 익숙한 개발자라면, javac도 쉽게 사용할 수 있을 것입니다. javac를 사용할 때, 아래 내용을 반드시 확인해야 합니다.

자바 파일이 있는 소스 위치
클래스 파일이 생성되는 디렉토리
javac의 컴파일 컴파일 대상이되는 .java 파일
아래는 Main.java 파일을 컴파일 하기 위한 javac 명령어 사용 예제 입니다.

# cd $HOME/projects/helloworld
# javac -sourcepath src -d classes src/otn/Main.java
다음과 같이 생성된 파일 확인할 수 있습니다.

# cd $HOME/projects/helloworld/classes
# find . -name *.class -print
./otn/Main.class




Ant 빌드 파일 생성하기

다음과 같이 Ant 빌드 파일(build.xml)을 생성합니다.

빌드 타겟은 'make' 1개 설정
otn/ 서브 디렉토리에 있는 모든 .java 파일을 javac로 컴파일
빌드 소요시간을 알려주는 시간 표시
아래와 같은 build.xml이라고 불리는 $HOME/projects/helloworld 에 있는 파일 생성

<?xml version = '1.0' ?>
<project name = "OTN" default = "make" basedir = ".">
   <target name = "make">
       <tstamp />
       <javac  srcdir="src/" destdir = "classes/">
           <include name="otn/**"/>
       </javac>
   </target>
</project>

아래는 Ant 명령어를 수행한 예제입니다.

# ant
 Buildfile: build.xml
make:
 [javac] Compiling 1 source file to /home/rcleveng/projects/helloworld/classes
BUILD SUCCESSFUL
 Total time: 3 seconds


간단한 자바 애플리케이션을 완성했습니다.
1 2 

카테고리

분류 전체보기 (46)
Technic (5)
Language (16)
Database (8)
System (5)
Algorithm (1)
Design (1)
Tool (3)
Framework (2)
Network (1)
Utility (1)
SmartPhone (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

달력

«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

글 보관함