'분류 전체보기'에 해당되는 글 26건

  1. 2016.11.24 VM virtualBOX에 ubuntu 14.0.4 설치
  2. 2016.07.28 This is Automake 1.15, but the definition used by this AM_INIT_AUTOMAKE comes from Automake 1.6.3.
  3. 2015.04.03 엑셀 (2010) 파일 두개 이상의 엑셀 파일 실핼시 새창에서 열기
  4. 2014.02.27 tgz 압축/푸는 법
  5. 2014.02.27 .svn 파일 삭제하는법
  6. 2013.03.15 Linux에서 getch() 구현
  7. 2013.03.15 Linux에서 _kbhit() 구현
  8. 2013.03.14 ^M 문자
  9. 2013.03.14 vi 편집기 사용법
  10. 2010.11.16 review/preview

VM virtualBOX에 ubuntu 14.0.4 설치

카테고리 없음 2016. 11. 24. 17:01

VM virtualBOX에 ubuntu 14.0.4 설치


0. 이미지 설치하기

언어를 한글로 선택했다가 오류가 깨져서 나와서 다시 설치

영어 선택

지역 북미

언어 영어

키배열 영어

samba 설치

openssl 설치

-----------------------------

서버설치 후 외부에서 SSH로 접속하기 


1. 버추얼 박스 프로그램에서

버추얼 박스 내 파일->환경설정->네트워크->호스트 전용 네트워크에서

'VirtualBox Host-Only Ethernet Adapter' 선택

어댑터 정보에서 IPv4 주소 정보 저장( ex: 192.168.56.1)


2. 가상이미지에서

가상이미지의 설정->네트워크->어댑터 1 선택

다음에 연결 : NAT

 고급->포트포워딩선택

포트포워딩에 들어갈 정보는

호스트의 경우 'VirtualBox Host-Only Ethernet Adapter' 의 정보를 사용하고

게스트의 경우 이미지(ubuntu) 내부에서 사용되는 eth0 정보를 사용한다 

포트 20~23까지 개방 추천

ex)

  호스트IP : 192.168.56.1

  호스트포트 : 22

  게스트IP : 10.0.2.15

  게스트포트 : 22 


-----------------------------


개발서버 환경 구성

1. root 계정 활성

# sudo passwd root


2. root 계정에 접속 후 설치 순서


이곳에 저장된 저장소에서 사용할 패키지의 정보를 얻습니다. 

# apt-get update


설치된 패키지 업그래이드 : 설치되어 있는 패키지를 모두 새버전으로 업그래이드 합니다.

# apt-get upgrade


의존성검사하며 설치하기

# apt-get dist-upgrade


3. 개별 SW package 자동 설치


# apt-get install build-essential


# apt-get install libncurses5-dev


# apt-get install libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386 lib32z1 lib32ncurses5 lib32bz2-1.0 
libstdc++6:i386


# apt-get install autoconf pkg-config libtool m4


# apt-get install byacc flex bison


# apt-get install ibgc-dev


4. 개별 SW package 수동 설치

내가 필요했던 파일

 - automake-1.13.4

 - zlib-1.2.8


설치 방법

개별 src 폴더에서 

# ./configure --prefix=/usr

# make

# make install


5. toolchain 설치
/opt/ 에 컴파일러를 복사

6. PATH 설정
/etc/profile
export LANG="en_US.UTF-8"
export PATH=$PATH:/opt/buildroot-gcc483_arm/usr/bin/
export EDITOR=/usr/bin/vim


7. 문제점

1) ftp 접속했을때 포트문제로 리스트가 보이지 않는 오류가 발생한다 -> sftp 를 사용

2) 외부에서 virtulbox가 있는 컴퓨터의 ubuntu의 접근... 고민중



:

This is Automake 1.15, but the definition used by this AM_INIT_AUTOMAKE comes from Automake 1.6.3.

Unix/Linux 2016. 7. 28. 11:48

최근 유분투 운영체계에서는 automake 1.1x  버젼이 설치되어 사용되는 데 그 하위에 버젼 같은 경우는 설치도 잘 안된다.


하지만 automake의 경우 하위 버젼과 호환이 되지 않는 문제가 있어

하위 버젼으로 만들었던 소스가 컴파일되지 않을때 아래와 같은 문제가 발생한다.


warning: autoconf input should be named 'configure.ac', not 'configure.in'

configure.in:3: warning: AM_INIT_AUTOMAKE: two- and three-arguments forms are deprecated.  For more info, see:

configure.in:3: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation

configure.in:3: error: version mismatch.  This is Automake 1.15,

configure.in:3: but the definition used by this AM_INIT_AUTOMAKE

configure.in:3: comes from Automake 1.6.3.  You should recreate

configure.in:3: aclocal.m4 with aclocal and run automake again.


문제가 발생하는 폴더에서

# automake --add-missing

# autoreconf 



'Unix/Linux' 카테고리의 다른 글

.bashrc가 자동으로 실행되지 않을 때.  (0) 2020.04.28
linux log level 설정  (0) 2018.11.13
tgz 압축/푸는 법  (0) 2014.02.27
.svn 파일 삭제하는법  (0) 2014.02.27
Linux에서 getch() 구현  (0) 2013.03.15
:

엑셀 (2010) 파일 두개 이상의 엑셀 파일 실핼시 새창에서 열기

알고 있으면 편한것 2015. 4. 3. 11:46

 MS Office 2010 이전 버젼에서 엑셀 창을 두개 이상 띄우는 방법

1. 먼저 액셀  실행 파일 (EXCEL.EXE) 이 어디에 있는 지 확인

1) C:\Program Files\Microsoft Office\Office14 에 있을 경우 (32bit)

Excel2010_multi_window.reg


2) C:\Program Files (x86)\Microsoft Office\Office14  에 있을 경우 (64bit)

Excel2010_multi_window_64.reg

2. 두개의 파일중 자신의 컴퓨터에 맞는 파일을 다운로드 한후 실행.

3. 레지스트리 경고창이 나오는데 "예" 버튼 클릭.

4. 결과 확인  (다른 두개의 엑셀 파일을 실행)



:

tgz 압축/푸는 법

Unix/Linux 2014. 2. 27. 18:33

압축 할때

tar cvzpf abc.tgz /home


압축 풀때

tar -xzvf abc.tgz

:

.svn 파일 삭제하는법

Unix/Linux 2014. 2. 27. 18:32

하위 폴더에 있는 것까지 삭제


 find . -name .svn -print0 | xargs -0 rm -rf


:

Linux에서 getch() 구현

Unix/Linux 2013. 3. 15. 16:18

#include <stdio.h>
#include <termio.h>

 int getch(void)
    {
        int ch;
        struct termios buf, save;
        tcgetattr(0,&save);
        buf = save;
        buf.c_lflag &= ~(ICANON|ECHO);
        buf.c_cc[VMIN] = 1;
        buf.c_cc[VTIME] = 0;
        tcsetattr(0, TCSAFLUSH, &buf);
        ch = getchar();
        tcsetattr(0, TCSAFLUSH, &save);
        return ch;
    }

 

'Unix/Linux' 카테고리의 다른 글

tgz 압축/푸는 법  (0) 2014.02.27
.svn 파일 삭제하는법  (0) 2014.02.27
Linux에서 _kbhit() 구현  (0) 2013.03.15
^M 문자  (0) 2013.03.14
vi 편집기 사용법  (0) 2013.03.14
:

Linux에서 _kbhit() 구현

Unix/Linux 2013. 3. 15. 16:16
Name : Linux에서 _kbhit() 구현
Compiler : gcc 4.1.2
Enviroment : Cent OS 5.5 (2.6.18)
Compile command : (default)
---------------------------------------------------------------------------

#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>

int kbhit(void)
{
  struct termios oldt, newt;
  int ch;
  int oldf;

  tcgetattr(STDIN_FILENO, &oldt);
  newt = oldt;
  newt.c_lflag &= ~(ICANON | ECHO);
  tcsetattr(STDIN_FILENO, TCSANOW, &newt);
  oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
  fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);

  ch = getchar();

  tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
  fcntl(STDIN_FILENO, F_SETFL, oldf);

  if(ch != EOF)
  {
    ungetc(ch, stdin);
    return 1;
  }

  return 0;
}

int main(void)
{
  while(!kbhit())
    puts("Press a key!");
  printf("You pressed '%c'!\n", getchar());
  return 0;
}

 

'Unix/Linux' 카테고리의 다른 글

tgz 압축/푸는 법  (0) 2014.02.27
.svn 파일 삭제하는법  (0) 2014.02.27
Linux에서 getch() 구현  (0) 2013.03.15
^M 문자  (0) 2013.03.14
vi 편집기 사용법  (0) 2013.03.14
:

^M 문자

Unix/Linux 2013. 3. 14. 16:08

윈도우에서 작업한 text 문서를 리눅스등에서 열경우에 ^M가 따라온다.

 

1. vi 에서 파일모드 수정

:set fileformat=unix (후 저장 하면 없어짐)

:set fileformat=dos (후 저장하면 다시 생김)

 

2. tr 명령사용

cat sourcefile |tr -d ^M >outfile

 

^M 은 Ctrl+v Ctrl+M

'Unix/Linux' 카테고리의 다른 글

tgz 압축/푸는 법  (0) 2014.02.27
.svn 파일 삭제하는법  (0) 2014.02.27
Linux에서 getch() 구현  (0) 2013.03.15
Linux에서 _kbhit() 구현  (0) 2013.03.15
vi 편집기 사용법  (0) 2013.03.14
:

vi 편집기 사용법

Unix/Linux 2013. 3. 14. 15:54

탭 간격 같은 환경 변수를 설정하기 위해서는

# vi ~/.exrc

에 설정값들을 저장해 놓는다.

ex) set tabstop=4
     set ai   

 


(1) 사용법
   vi [option] [filename]
(2) option
   -c  : -c옵션은 시작하면서 어떠한 명령을 실행한다.
   -r  : 손상된 파일을 복구할 때 쓴다. 파일을 편집하던 중 갑작스런 사고 등으로 인해 시스템이 다운되었을 경우 대개 이 명령으로 복구 할 수 있다.
   +n  : 파일을 열면서 n번째 줄로 커서를 이동시킨다.
   +   : 파일을 열면서 마지막 줄에 커서를 이동시킨다.
   -wn : 기본적인 윈도우 크기를 n라인으로 한다.(기본값은 20라인)
(3) 사용예
   1) vi                 
       => 빈문서로 시작한다.
   2) vi index.html      
       => 주어진 파일(index.html) 이름으로 편집을 시작한다. 만약 파일이 존재하지 않으면 새로  만들게 된다.
   3) vi +15 index.html   
       => index.html 파일을 열면서 커서를 15번째 줄로 보낸다.
   4) vi -c 15 index.html 
       => -c옵션은 시작하면서 어떠한 명령을 실행하라는 뜻이다. 따라서, -c 15 라고 쓰면 +15 옵션과 동일한 결과를 얻는다.
   5) view index.html     
       => index.html파일을 읽기 전용으로 파일을 연다. 참고로 저장할 때 ':wq!'형식으로 ! 표를 붙이면 읽기전용이라도 저장된다
   6) vi + index.html     
       => index.html파일을 열면서 커서의 위치를 마지막라인에 둔다.
   7) vi +/posein /etc/passwd
    => /etc/passwd 라는 파일을 열면서 posein이라는 문자열이 있는 위치에 커서를 둔다.

3. vi 종료하기
(1) 설명: 모드에 대한 설명이 아래에 나오지만 미리 종료에 대해 설명하면 일단 [ESC]키를 눌러  명령모드로 전환한 후, 필요에 맞게 다음 중 하나의 키워드를 사용하면 된다.
(2) 명령
   :wq => 파일을 저장한 후 종료한다. 같은 명령으로는 ZZ 또는 :x 가 있다.
   :q! => 편집하여 변경된 내용을 저장하지 않고 강제 종료한다.
   :q  => 편집중인 내용이 없는 경우, vi를 종료한다.
   :w  => 편집중인 파일 내용을 저장한다. vi는 종료하지 않는다.

4. vi편집기의 모드
(1) 설명: vi편집기에는 크게 2가지모드로 구분된다. 첫번째는 명령모드(command mode)이고, 두번째는 입력모드(input mode)또는 편집모드라고 한다. 또 명령모드는 다시 일반명령모드와 ex명령모드로 구분된다. 명령모드상태에서 입력명령(i,I,a,A,o,O)을 실행하면 입력모드로 전환된다. 입력모드에서 타이핑한 문자들이 문서에 삽입된다. 여기에서 다시 [ESC]키를 누르면 명령모드로 돌아온다. 명령 모드에서 ':'를 입력하면 화면 아래쪽에 ':'라는 프롬프트가 나타나게 되는 데 이것이 ex명령모드이다.
참고)입력모드 키워드가 위 나열한 것외에 (c,C,s,S,R)등이 있다.

(2) 모드
   1) 명령모드 : vi라고 입력한뒤 처음 접하는 모드
    ㄱ. 커서 이동 명령
       h           : 왼쪽으로 이동
       j           : 아래로 이동
       k           : 위로 이동
       l           : 오른쪽으로 이동
       w           : 다음 단어의 처음으로 이동
       -           : 앞 라인의 첫문자로 이동
       ^           : 라인의 첫 문자로 이동
       $           : 라인의 맨 끝으로 이동
       +           : 다음 라인의 첫문자로 이동
       0(zero)     : 첫번째 열로 이동
       G           : 제일 끝줄로 이동
       nG          : n번째 행으로 이동
       gg          : 파일의 처음으로 이동
       (           : 문장의 처음으로 이동
       )           : 다음 문장의 처음으로 이동
       {           : 문단(paragraph)의 처음으로 이동
       }           : 다음 문단의 처음으로 이동
       H           : 화면의 첫 라인으로 이동
       M           : 화면의 중간으로 이동
       L           : 화면의 끝라인으로 이동
       ctrl+b(back)    : 한 화면 위로 이동
       ctrl+f(forward) : 한 화면 아래로 이동
       ctrl+u(up)      : 반 화면 위로 이동
       ctrl+d(down)    : 반 화면 아래로 이동
       e           : 한 단어 뒤로 이동
       b           : 한 단어 앞으로 이동
       :0(zero)     : 줄의 제일 처음으로 이동
       :$           : 줄의 제일 끝으로 이동
    ㄴ. 편집상태로 진입 : 입력모드로 전환하는 키워드이고 하단에 'INSERT' 등과 같은 문자열이
                         표시된다.
       i   : 현재 커서 위치에 삽입
       a   : 현재 커서 위치 다음에 삽입
       o   : 현재 커서가 위치한 줄의 아랫줄에 삽입
       I   : 현재 커서가 위치한 줄의 제일 앞에 삽입
       A   : 현재 커서가 위치한 줄의 제일 뒤에 삽입
       O   : 현재 커서가 위치한 줄 위에 삽입
       ESC : 명령모드로 재전환
    ㄷ. 복사하기와 붙이기
       Y     : 현재 커서가 위치한 줄을 버퍼에 복사한다.
       yy    : Y와 같다.
       yw    : 현재 커서가 위치한 단어를 버퍼에 복사한다.
       'n'Y  : 현재 커서가 위치한 줄에서 아래로 n개 만큼의 줄을 버퍼에 복사한다.
       'n'yy : nY와 같다.
       'n'yw : 현재 커서가 위치한 단어로 부터 뒤로 n개의 단어를 버퍼에 복사한다.
       yh    : 커서의 왼쪽 문자를 복사한다.
       yl    : 커서가 위치한 문자를 복사한다.
       yB    : 커서의 왼쪽 비공백 단어를 복사한다.
       yW    : 커서의 오른쪽 비공백 단어를 복사한다.
       y0    : 커서 왼쪽부터 라인의 처음까지 복사한다.
       p     : 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 아래에 붙인다.
       P     : 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 위에 붙인다.
    ㄹ. 지우기
       x     : 현재 커서 위치의 문자를 지운다.(dh와 동일)
       X     : 커서 왼쪽의 문자를 지운다.(dl과 동일)
       dd    : 현재 커서가 위치한 줄을 지운다. (단어 뒤의 스페이스 포함)
       'n'dd : 현재 커서가 위치한 줄에서 아래로 n개 만큼의 줄을 지운다.
       dw    : 현재 커서가 위치한 단어를 지운다.
       db    : 현재 커서의 왼쪽 단어를 지운다.
       'n'dw : 현재 커서가 위치한 단어로 부터 뒤로 n개 만큼의 단어를 지운다.
       dB    : 현재 커서 왼쪽 비공백 단어를 지운다.
       dW    : 현재 커서 오른쪽 비공백 단어를 지운다.
       d$    : 현재 커서가 있는 라인부터 끝까지 지운다.(D와 동일)
       - d0  : 커서 왼쪽부터 라인의 처음까지 지운다.
    ㅁ. 바꾸기
       r    : 현재 위치의 문자를 바꾼다.
       R    : 현재 커서 위치부터 원하는 만큼 다른 문자로 바꾼다.
       cb   : 현재 커서 왼쪽 단어를 바꾼다.
       cw   : 현재 위치의 단어를 바꾼다.
       cc   : 현재 커서가 위치한 줄을 바꾼다.
       c$   : 커서부터 라인의 끝까지 바꾼다.(C와 동일)
       c0   : 커서 왼쪽부터 라인의 처음까지 바꾼다.
       C    : 현재 커서가 위치한 곳으로부터 줄의 끝까지 바꾼다.
      'n'cw : 현재 위치로부터 'n'개의 단어를 바꾼다.
      'n'cc : 현재 위치로부터 'n'개의 줄을 바꾼다.
    ㅂ. 기타
       ctrl+g   : 현재 편집하고 있는 파일의 정보를 보여준다.
       shift+v  : 블록을 지정한다.
       u        : 방금 한 명령을 취소한다.
       U        : 현재 커서가 위치한 줄에 대한 편집 명령을 취소한다.
       .        : 방금한 명령을 되풀이 한다.
       'n'.     : 방금한 명령을 n번만큼 되풀이 한다.
       J        : 현재 줄과 다음 줄을 합한다.
       ZZ       :현재 내용을 저장하고 끝낸다.
       /exp     : 'exp'와 같은 내용을 현재 위치 다음부터 찾는다.
       ?exp     : 'exp'와 같은 내용을 현재 위치부터 위쪽으로 찾는다.
       n        : 앞에서 찾은 내용을 현재 위치 다음부터 찾는다.
       N        : 앞에서 찾은 내용을 반대 방향으로 계속 찾는다.
       >>       : 현재 커서 위치 줄을 오른쪽으로 한 열씩 이동한다.
       <<       : 현재 커서 위치 줄을 왼쪽으로 한 열씩 이동한다.
       ~        : 현재 커서가 위치한 문자의 대소문자를 서로 변환한다.
       ctrl+l   : 화면 다시 그린다.
       !        : vi편집중에 shell명령을 내린다.
   3) ex명령모드 : ex란 초기 유닉스에서부터 쓰이던 line editor이다. vi는 자체 명령어외에
                  ex편집기 명령어를 지원한다. 명령모드에서 ':'누르면 화면 아래쪽에 ':'라는
                  프롬프트가 나타나면서 ex명령모드로 들어간다.
    ㄱ. 명령
       :w              => 현재 내용을 저장한다.
       :w filename     => 현재 내용을 지정된 파일 이름으로 저장한다.
       :w!             => 강제로 덮어쓰기를 한다.
       :q              => 그냥 종료한다. 약간이라도 변경사항이 있으면 종료안된다.
       :wq             => 현재 내용을 저장하고 종료한다.
       :wq filename    => filename 으로 저장하고 종료한다. 새이름으로 저장할 때 쓴다.
       :q!             => 현재 내용을 저장하지 않고 종료한다.
       :e filename     => 새로운 파일을 편집한다.
       :r filename     => 현재 커서 위치 다음에 파일을 읽어 삽입한다.
       :14 r filename  => 14행 이후에 파일을 읽어 삽입한다.
       :10             => 10번째 줄로 커서를 이동시킨다.
       :10, 20d        => 10번째 행에서 20번째 행까지지운다.

     (참고) 줄 번호를 쓸 때 '.'는 현재 줄을, '$'는 끝줄을 의미하므로 ':3,$d'는 3번째행에서
           끝행까지 지운다는 의미가 된다. 또 첫줄부터 현재 커서가 위치한 줄까지를 지우려면
           ':1,.d'라고 쓰면 된다.

    ㄴ. 문자열의 치환
      :s/문자열/새문자열       => 커서가 위치하고 있는 줄의 첫번째 해당문자열을 새문자열로
                                 치환한다.
     :s/문자열/새문자열/g     => 커서가 위치하고 있는 줄의 모든 해당문자열을 새 문자열로 치
                                 환한다.
      :1,$ s/문자열/새문자열/g => 파일 전체에 대해 해당문자열을 새문자열로 치환한다.
                                :%s/문자열/새문자열/g 와 같다.

5. vi편집기의 환경설정
(1) 설명 : vi환경설정을 위해서는 명령모드에서 :set을 사용한다.
(2) 사용법
   1)설정
     set [환경변수][=값]
   2) 해제
     set no환경변수
(3) 환경변수
   1) ignorecase : 문자열을 검색할 때 대소문자에 관계없이 검색한다.
   2) number     : 행의 앞에 행번호를 붙여준다. 약자로 'nu'라고 해도 된다.
   3) autoindent : 라인변경시 커서의 위치를 바로 위라인의 수준과 같이 해준다. 프로그램작성시에 용이하다. 약자로 'ai'라고 해도 된다.
   4) showmatch  : '}'또는 ')'를 입력하였을 경우 짝이되는 '{','('를 찾아 커서가 1초동안 머무르다 돌아온다. 이 기능은 C등의 프로그램을 작성할 때 편리하다. 약자로 'sm'이라고 해도 된다.
   5) showmode   : 화면 아래쪽에 현재 모드를 표시한다. 즉 편집모드인 경우에 'INSERT'등의 값으로 표시해준다. 기본값으로 설정되어 있다.
   6) tabstop    : 탭의크기를 표시한다. '=n'를 붙이면 탭의크기를 n값에 따라 부여할 수 있다.
(4) 사용예
   1) :set 
       => 여러가지 환경 변수를 설정한다. set all하면 현재 설정되어 있는 환경변수를 보여준다.
   2) :set nu
       => 행의 앞에 행번호를 표시한다. ':set number'와 같다.
   3) :set nonu
       => 행의 앞에 붙은 행번호 표시를 없앤다.
   4) :set ai
       => [Enter]키를 입력하면 행을 바꾸었을 경우 위 줄과 같은 열에 커서를 위치시킨다.
   5) :set noai
       => 'ai'설정을 해제한다. ':set noautoindent'와 같다.
   6) :set ignorecase
       => 명령모드에서 문자열을 검색시에 대소문자를 구분하지 않는다. 즉 '/linux'라고 입력하면
         linux, Linux, LINUX 등의 모든 문자열을 찾아준다.
   7) :set noignorecase
       => 검색시에 대소문자를 구분하도록 한다.
   8) :set tabstop
       => 현재 설정된 탭의 크기(기본값은 4)를 보여준다.
   9) :set tabstop=8
       =>탭의 크기를 10으로 바꾼다.
   10) :set noshowmode
       => 리눅스에서는 기본적으로 모드를 표시해준다. 즉 입력모드인 경우에는 화면하단에INSERT 등을 표시해준다. 위와 같이 명령을 내리면 모드전환을 해도 표시해주지 않는다.
(5) 관련파일 : .exrc
   1) 설명: set명령을 사용자의 홈 디렉토리의 .exrc(또는 .vimrc)안에 써 놓으면 vi가 시작될 때  디폴트로 설정되어 시작하게 된다.
   2) 사용법
     set [환경변수] [값]
   3) 사용예
     [posein@www posein]$ cat .exrc
     set nu
     set ai
       => vi편집기 실행할 때마다 각 행 앞에 행번호를 붙여주고 autoindent를 적용한다. ':'는 적지 않는다.

'Unix/Linux' 카테고리의 다른 글

tgz 압축/푸는 법  (0) 2014.02.27
.svn 파일 삭제하는법  (0) 2014.02.27
Linux에서 getch() 구현  (0) 2013.03.15
Linux에서 _kbhit() 구현  (0) 2013.03.15
^M 문자  (0) 2013.03.14
:

review/preview

실습/데이터베이스 2010. 11. 16. 12:27
: