달력

4

« 2024/4 »

  • 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
2018. 6. 20. 09:28

호이안 밥집 리스트 Enjoy/etc2018. 6. 20. 09:28

호이안



포슈아

오전 10 ~ 오후 9

길찾기

반세오 분짜, 깨끗



미쓰리 (Miss Ly Cafe 22)

오전 11 ~ 22시 브레이크 15-17

길찾기

프라이드완탄, 새우볶음밥, 깨끗



모닝글로리

길찾기

분짜 등등. 에어컨자리 요청, 깨끗



포비엣46

오전10 ~ 오후 10

길찾기

쌀국수, 한국인많음 에어컨 깨끗, 아기의자



반미프엉

오전 6.5 ~ 오후 9.5

길찾기

반미, 소고기 질김, 돼지 비계많고, 꼭 닭으로...



비스마켓 (vy's market)

오전 8 ~ 오후 10, 브레이크 오후3~5

길찾기

넓고 깨끗한편, 반쎄오 등등



라이스 드럼

오전 8 ~ 오후 11

길찾기

완탕튀김... 2층 뷰 좋음, 깨끗



블루드래곤

오전 8 ~ 오후 10

길찾기

쌀국수 스프링롤



베일웰 (베일우물)

오전 10 ~ 오후 10

길찾기

라이스페이퍼 반쎄오



cong 분짜

오전 10.5 ~ 오후 9.5

길찾기

분짜



홈호이안 

오후 1 ~ 오후 11

길찾기

두부요리, 에어컨 깨끗.



피반미

오전 8 ~ 오후 8

길찾기

반미



콩카폐

오전 7 ~ 오후 11.5

길찾기

코코넛커피



에스프레소 스테이션

오전7.5 ~ 오후 5

길찾기

코코넛커피






:
Posted by 라면스프
2016. 5. 20. 16:30

Visual Basic 6 명령줄에서 빌드하기 Enjoy/etc2016. 5. 20. 16:30


Visual Basic 6 컴파일 하기!!!!!

비주얼베이직6  외부에서 컴파일 할때 사용하기.

CMD 창에서 실행할때 사용되는 명령어 확인

까먹지말고 정리정리!!!



참고사이트 : https://msdn.microsoft.com/en-us/library/aa231236(v=vs.60).aspx



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


[컴파일 명령어 및 옵션]


도움말보기




vb6.exe [[{/run | /r}] | [/runexit] | [{/make | /m}] 프로젝트이름] [/out 로그파일명] [/outdir 로그파일경로] [/d 상수=값{[:constN=valueN]}][/mdi | /sdi][{/cmd 인수 | /c 인수}]


[옵션]


/run 또는 /r 프로젝트

:[프로젝트 속성] 대화상자의 [만들기] 탭의 [명령줄 인수] 필드에 저장된 인수를 사용하여, VisualBasic이 프로젝트 이름을 컴파일하고 실행합니다.


/runexit 프로젝트이름

:VisualBasic이 프로젝트 이름을 컴파일하고 실행합니다. 프로젝트가 디자인모드로 되돌아 오면 VisualBasic이 종료됩니다.


/make 또는 /m 프로젝트

:프로젝트 파일 안에 저장된 기존 설정을 사용하여, VisualBasic이 프로젝트 이름을 컴파일하고 실행 가능한 파일을 만듭니다.


/out 파일이름

:/m 또는 /runexit로 만들 때 오류를 파일로 받아들일 수 있게 지정합니다. /out을 사용하지 않으면 오류가 메시지 상자에 표시됩니다.


/outdir 경로

:/make를 사용할 때 만들어지는 모든 출력파일이 놓여질 디렉토리경로를 지정합니다.


/d 또는 /D 상수=값...

:VisualBasic이 /make로 EXE나 ActiveX 구성 요소를 만들 때 조건부 컴파일 상수로 사용할 값을 지정합니다. 상수가 여러 개일 때는 콜론으로 구분하십시오.


/cmd 또는 /c 인수

:[프로젝트 속성] 대화 상자의 [만들기] 탭의 [명령줄 인수]필드에 인수를 지정합니다. 이 때 이 옵션은 명령줄 맨끝에 위치해야 합니다.


/mdi 또는 /sdi

:VisualBasic 환경을 단일 문서 인터페이스(SDI)나 다중 문서 인터페이스(MDI)로 전환합니다. 이 설정을 바꾸기 전까지는 현재의 모드를 유지합니다.


* 위의 스위치에서 프로젝트 이름 위치에 그룹 이름을 사용할 수 있습니다.



EX) TEST.vbp 프로젝트를 make 하는 명령어. out 메시지는 test_out.log 로 출력할 때


     "C:\Program Files (x86)\Microsoft Visual Studio\VB98\vb6.exe" /make "D:\VBProject\TEST\TEST.vbp" /out "D:\VBProject\TEST\outlog\test_out.log"

     



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




Working with Command Line Switches


Command line switches provide a way to control how Visual Basic executes. Using command line switches, you can start an instance of Visual Basic and run a specified project, make an executable file or dynamic-link library, or specify a string to be passed to the Command$ function.

For example, to run the project MyProj.vbp and then automatically exit, start Visual Basic with the following command line:


c:\Program Files\Microsoft Visual Studio\VB\vb6.exe /runexit MyProj.vbp


The following table summarizes the Visual Basic command line switches.


Switch Description


/cmd cmdstring Specifies a command string to be passed to the Command$ function. When used, it must be the last switch on the command line.

/d compileconst Specifies one or more conditional compilation constants to use with the /make or /makedll switch.

/make projectname Makes the specified project into an executable file.

/makedll projectname Makes the specified project into a dynamic-link library.

/mdi Starts Visual Basic using the multiple document interface (MDI) programming environment.

/out filename Outputs errors to a file when used with the /make or /makedll switch.

/run projectname Runs the specified project.

/runexit projectname Runs the specified project and then automatically exits.

/sdi Starts Visual Basic using the single document interface (SDI) programming environment.

/? Displays a list of valid command line switches.


For More Information   See "Command Line Arguments."




:
Posted by 라면스프
2013. 3. 22. 18:52

grep 옵션 Enjoy/etc2013. 3. 22. 18:52

출처 : http://radiocom.kunsan.ac.kr/lecture/unix_cmd/grep.html


grep


지정한 파일에서 정규 표현식으로 나타낸 단어를 찾아 그 단어가 있는 라인을 출력함


하나 또는 그 이상의 파일에서 찾고 싶은 어떤 문자들을 검색하여 그 문자를 포함하는 라인들을 찾고, 찾은 라인 모두를 인쇄한다. grep 명령의 기본 구문은 다음과 같다.

grep 문자열 파일명

grep 문자열 *

grep [-chinvw] 'pattern' file_name [file_names]

-ccount 옵션은 파일 이름 다음에 패턴이 들어 있는 라인의 수를 표시
-hhide 옵션은 파일이름을 출력하지 않음
-iignore옵션은 대소문자 구분하지 않고 찾음
-nline number 옵션은 출력하는 각 라인에 라인번호를 붙임
-vinverse 옵션은 패턴이 없는 라인만 출력
-wword 옵션은 패턴 자체가 완전한 단얼로 독립되었을 경우만 글자로 인식함

여기서 ‘문자열’는 사용자가 찾으려는 단어 또는 구를 나타내고 ‘파일명’은 검색 대상 파일이다. ‘문자열’은 하나 또는 여러 문자를 의미한다. 단일 문자도 단어나 문장과 같이 하나의 문자열이다. 문자열에는 “빈칸”, 구두점과 보이지 않는 (제어) 문자들이 포함될 수 있다.

파일명은 지정하면 해당 파일에서만 찾지만, 파일명을 *와 같은 메타문자를 사용하면 현재 디렉토리의 모든 파일을 대상으로 하므로 디렉토리내의 모든 파일내에서 해당 문자열을 찾게된다.

grep, egrep, fgrep의 차이를 간단히 요약하여 정리하면 다음과 같다.

fgrep정규 표현식을 사용하지 않음
grep정규 표현식을 사용함
egrep정규 표현식과 확장 표현식을 사용

【예제】
    % grep s01287 /etc/passwd
    s01287:x:1028:103:choi eun sook:/export/home0/class12/s01287:/bin/csh
    %
grep은 다른 명령어들과 함께 “필터”로 자주 사용된다. grep은 사용자가 명령의 수행결과에서 불필요한 정보를 제거할 수 있도록 한다. grep을 필터로 사용하려면, 반드시 명령의 수행 결과를 grep을 통해 파이프(|) 해야 한다. 다음 예제는 파일 이름이 “.ps”로 끝나는 파일 중에서 5월에 생성된 것들을 나타낸다.

ls -l *.ps ¦ grep May

또한 여러 단어로 구성된 패턴을 찾으려면, 단일(‘ ’) 또는 이중(“ ”) 인용부호를 사용하여 해당 문자열을 묶어 준다.

grep "JoonIk Joe" phonebook

grep을 사용하여 파일 그룹에서 특정 문자열을 찾을 수 있다. grep이 여러 파일에서 일치하는 패턴을 찾은 경우, 먼저 해당 파일 이름과 콜론을 인쇄한 후 그 패턴과 일치하는 줄을 인쇄한다.

grep ar *

파일에서 특정 문자열을 포함하고 있지 않은 모든 줄을 찾으려면, grep에서 -v 옵션을 사용한다. 다음 예제는 현 디랙토리에 있는 파일 중에서 문자 e를 포함되지 않은 줄을 찾는 방법이다.

grep -v e *

정규 표현식을 사용하여 패턴으로 정의된 대상을 찾을 때 grep 명령을 사용할 수도 있다. 정규 표현식은 문자 및 숫자들과 grep에 특수한 의미를 갖는 문자로 구성된다. 메타문자인 특수 문자들은 시스템에서도 특수한 의미를 가지므로 인용부호나 이스케이프 문자를 사용해야 한다. 명령어 프롬프트 상태에서 grep 정규 표현식을 사용할 때마다 인용부호 또는 백슬래시(\)로 메타문자들(& ! . * $ ? 및 \)을 묶어 주어야 한다.

    % grep '^b' list    ☜  파일 list에서 “b”로 시작하는 줄을 찾는다.
    % grep 'b$' list    ☜  파일 list에서 마지막 문자가 ‘b’로 끝나는 줄을 찾음
    % grep '^b$' list   ☜  파일 list에서 “b”만 있는 줄을 찾음
    % grep 'an. ' list  ☜  세 자리 문자 중 처음 두 문자가 “an”으로 시작되는 것
    % grep 'qu*‘ list  ☜ 문자 “qu”가 포함된 모든 단어를 찾음
    % grep 'nn*' list   ☜ 문자 “n”을 포함하는 모든 단어를 찾음
    % grep 'nnn*' list  ☜ 문자 “nn”을 포함하는 모든 단어를 찾음
    % grep .* list      ☜ 어떤 문자가 나타나지 않거나 여러 번 나타난 경우를 찾음

정규 표현식에서 메타문자(& ! . * ? $ 및 \) 앞에 백슬래시(\)를 나타내면 grep으로 하여금 그것의 특수 의미를 무시하도록 한다.

예를 들어

    % grep ^\.       ☜ 마침표로 시작되는 줄을 찾음 
    % grep '\$'      ☜ "$" 문자가 포함된 줄을 찾음 

다음은 grep 탐색 패턴을 만드는데 자주 쓰이는 정규 표현식 기호이다

1) 일반 정규 표현식

기호의미사용 예설명
^라인의 첫 글자^aa자로 시작하는 라인
$라인의 끝 글자a$a자로 끝나는 라인
.한 글자a...ba와 b 사이에 3 글자가 있는 단어
** 기호 바로 이전의 글자나 정규 표현식이 
0회 이상 반복
abc*c가 0번 이상 반복
ab, abc, abcc, abccc 등
[ ]한글자를 대체할 글자의 목록을 []에 나열, "¦"를 여러 개 쓴 것과 같은 의미

"-" 기호와 함께 쓰면 문자의 범위를 지정할 수 있음

[abc]dad, bd, cd를 뜻함, a,b,c 중 어떤 한 글자라도 반드시 있는 단어

"[a-z]"는 a부터 z까지 중 하나, "[1-9]"는 1부터 9까지 중의 하나를 뜻함

[^]한글자를 대체하지 못할 글자의 목록을 [^ ]에 나열

"-" 기호와 함께 쓰면 문자의 범위를 지정할 수 있음

[^abc]dad, bd, cd는 포함하지 않고 ed, fd 등을 포함

[^a-z]는 알파벳 소문자로 시작하지 않는 모든 문자를 나타냄

2) 확장 정규 표현식

기호의미사용 예설명
++ 기호 바로 이전의 글자나 정규 표현식이
1회 이상 반복
abc+c가 1회 이상 반복 : abc, abcc, abccc 등
?? 기호 바로 이전의 글자나 정규 표현식이
없거나 1회만 존재
abc?c가 없거나 한번만 존재 : ab, abc
()부분 정규 표현식의 시작과 끝을 표시a(bc)*
a(bc)+
a(bc)?
bc가 0회 이상 반복 : a, abc, abcbc 등
bc가 1회 이상 반복 : abc, abcbc 등
bc가 있거나 없거나 : a, abc
¦¦로 구분된 단어들 중 최소 하나가 존재a(b¦c)b 또는 c가 최소 하나 존재 : ab, ac, abc, acb
{m,n}{} 기호 바로 이전의 글자나 정규 표현식이
m개 이상 n개 이하 반복
a{1,3}b'ab', 'aab', 'aaab'를 포함하지만,
'b'나 'aaaab'는 포함하지 않음

효율적인 검색을 위해 grep 명령어를 변형한 2개의 명령어가 제공된다.

그중 하나는 fgrep(fixed grep 또는 fast grep) 명령어로 이 명령어는 정규 표현식이 아닌 단순한 문자열만을 인수로 사용한다.

또 하나의 명령어인 egrep(extended grep) 명령어는 fgrep와는 반대로 grep보다 더 다양한 정규 펴현식 연산자를 사용할 수 있다. 일반적으로 grep 명령어가 제일 사용하기 편리하다.

【예제】
    % cat aa
    jinpo	202.31.146.123
    radio	202.31.146.122
    knusun1	202.30.55.11
    knu2000	202.30.55.15
    % grep 11 aa
    radio	202.31.146.122
    knusun1	202.30.55.11

fgrep 명령은 grep와 비슷하지만, 다중 표적 탐색에 쓸 수 있으나, 패턴 탐색을 위한 정규 표현식은 허용되지 않고, grep보다 빠르다. fgrep에서 다중 표적을 줄 때는 각 표적이 분리된 라인으로 하여야 되고, 다중 표적 설정 시 인용부호로 묶어야 한다.

【예제】
    # fgrep "jinpo
    > knusun1" aa
    jinpo	202.31.146.123
    knusun1	202.30.55.11

egrep는 grep 명령 패밀리 중 가장 강력하다. fgrep처럼 다중 표적 탐색을 할 수 있고, 표적 설정에 정규 표현식을 쓸 수 있으며, 보다 완전하고 강력한 정규 표현식을 제공한다.

egrep 명령은 문자 반복에 +, 0이나 ?을 사용할 수 있고, egrep는 다중 표적을 fgrep처럼 분리된 라인에 넣거나, 수직 바나 파이프 기호(¦)로 구분한다. 파이프 기호와 표적 사이에는 빈칸이 없어야 한다.

【예제】
    # egrep "jinpo
    > radio" aa
    jinpo	202.31.146.123
    radio	202.31.146.122
    # egrep "jinpo¦radio" aa
    jinpo	202.31.146.123
    radio	202.31.146.122
    # 
현재 디렉토리 내의 모든 파일을 점검하여 지정한 문자열을 찾을 수 도 있다.

【예제】

grep abc * ☜ *은 모든 파일을 의미함
fgrep abc * ☜ *은 모든 파일을 의미함
【예제】
$ grep Adm /etc/group /etc/passwd
/etc/passwd:adm:x:4:4:Admin:/var/adm:
/etc/passwd:lp:x:71:8:Line Printer Admin:/usr/spool/lp:
/etc/passwd:uucp:x:5:5:uucp Admin:/usr/lib/uucp:
/etc/passwd:nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico
/etc/passwd:listen:x:37:4:Network Admin:/usr/net/nls:

$ grep -n Adm /etc/group /etc/passwd  ☜  줄번호도 표기
/etc/passwd:5:adm:x:4:4:Admin:/var/adm:
/etc/passwd:6:lp:x:71:8:Line Printer Admin:/usr/spool/lp:
/etc/passwd:7:uucp:x:5:5:uucp Admin:/usr/lib/uucp:
/etc/passwd:8:nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico
/etc/passwd:10:listen:x:37:4:Network Admin:/usr/net/nls:

$ grep -h Adm /etc/group /etc/passwd  ☜ 파일명을 출력하지 않음
adm:x:4:4:Admin:/var/adm:
lp:x:71:8:Line Printer Admin:/usr/spool/lp:
uucp:x:5:5:uucp Admin:/usr/lib/uucp:
nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico
listen:x:37:4:Network Admin:/usr/net/nls:

$ grep -c Adm /etc/group /etc/passwd  ☜  검색어가 있는 라인의 개수를 출력
/etc/group:0
/etc/passwd:5

$ grep -i Adm /etc/group /etc/passwd  ☜ 대소문자 구분없이 검색어를 찾음
/etc/group:sys::3:root,bin,adm
/etc/group:adm::4:root,daemon
/etc/group:tty::7:root,adm
/etc/group:lp::8:root,adm
/etc/group:sysadmin::14:
/etc/passwd:adm:x:4:4:Admin:/var/adm:
/etc/passwd:lp:x:71:8:Line Printer Admin:/usr/spool/lp:
/etc/passwd:uucp:x:5:5:uucp Admin:/usr/lib/uucp:
/etc/passwd:nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico
/etc/passwd:listen:x:37:4:Network Admin:/usr/net/nls:
$ 
【예제】
$ grep 'Network' /etc/passwd
listen:x:37:4:Network Admin:/usr/net/nls:

$ grep 'uucp' /etc/passwd
uucp:x:5:5:uucp Admin:/usr/lib/uucp:
nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico

$ egrep '(Network¦uucp)' /etc/passwd
uucp:x:5:5:uucp Admin:/usr/lib/uucp:
nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico             
listen:x:37:4:Network Admin:/usr/net/nls:
$
【예제】
$ grep '$' /etc/init.d/ufs_quota  ☜ $는 줄 끝을 의미

#!/sbin/sh
#
# Copyright (c) 1993, 1997 by Sun Microsystems, Inc.
# All rights reserved.
#
#ident  "@(#)ufs_quota  1.2     97/12/08 SMI"

case "$1" in
'start')
        /usr/sbin/quotacheck -a
        /usr/sbin/quotaon -a
        ;;

'stop')
        /usr/sbin/quotaoff -a
        ;;

*)
        echo "Usage: $0 { start ¦ stop }"
        exit 1
        ;;
esac
exit 0
$ fgrep '$' /etc/init.d/ufs_quota ☜ $은 문자 $을 의미함 case "$1" in echo "Usage: $0 { start ¦ stop }" $

grep정규 표현식을 사용하여 파일에서 문자열을 찾음
egrep정규 표현식과 확장 정규 표현식을 사용하여 파일에서 여러 개의 문자열을 찾을때 편리
fgrep정규 표현식을 사용하지 않기 때문에 메타문자 따위도 파일에서 찾을 수 있음
pgrep지정한 프로세스를 찾음 (cf: ps -A)

:
Posted by 라면스프
2013. 1. 29. 15:43

SVN 권한 설정 Enjoy/etc2013. 1. 29. 15:43


출처 : http://ummae.tistory.com/197



SVN 권한 설정


svnserve.conf

[general]
anon-access=none
auth-access = write
password-db = passwd
authz-db = authz
realm = Kanji_Proj

요로코롬 짧아진다. 그럼 각각의 의미를 알아 보자.

[general]
anon-access=none           #인증되지않은(즉 계정이 없는) 사용자에 대해 접근을 거부한다.
auth-access = write          #인증된 사용자에 대해 쓰기 권한을 준다.
password-db = passwd     # 인증된 사용자에 대한 계정 정보(아이디/패스) 정보가 기록된 파일명을 의미한다.(기본값 passwd) 
authz-db = authz              # 인증된 사용자에 대해 저장소에 대한 권한 설정이 기록된 파일명(기본값)
#realm = Kanji_Proj             #현재 파일에 해당되는 저장소의 영역에 대해 설정하는 것인데 여기서는 주석처리로 하고 넘어가자.(ㅌㅌ)

즉, 인증된 사용자에게 저장소의 접근권한을 일체 주지 않고, 인증된 사용자에게만 접근을 허용하는 그런 의미를 갖는 svnserve.conf파일이 되겠다. 

다음으로 passwd 파일을 살펴보자.

passwd 

[users]
# harry = harryssecret
# sally = sallyssecret

aaa = a
bbb = b
ccc = c

= 를 기준으로 왼쪽이 아이디 오른족이 비밀번호가 된다. 
id: aaa, pw: a
id: bbb, pw: b 이런식이다.

마지막으로 authz

authz

[groups]
# harry_and_sally = harry,sally
gABC = aaa, bbb, ccc

# [/foo/bar]
# harry = rw
# * =

# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r

[/]
@gABC = r

[ABC:/]
* = r
@gABC  = rw

authz 파일의 의미를 살펴보자

[groups]
# harry_and_sally = harry,sally   # 사용자를 그룹단위로 묶을 수 있다.
gABC = aaa, bbb, ccc               # 즉, 사용자 aaa, bbb, ccc를 묶어서 gABC라는 그룹으로 관리.

# [/foo/bar]
# harry = rw
# * =

# [repository:/baz/fuz]             #repository저장소의 /baz/fuz위치에 대한 권한
# @harry_and_sally = rw            #@<-의 의미는 그룹을 뜻한다. harry_and_sally 그룹에 읽기/쓰기권한을 준다.
# * = r                                     # * 는 모든 사용자를 의미한다. 모든 사용자에게 읽기 권한을 준다.            

[ABC:/]                                 #ABC:/저장소
* = r                                       #모든 사용자에게 읽기 권한을 준다.
@gABC  = rw                          #gABC그룹에게 읽기/쓰기 권한을 준다.


주의 1. authz 파일에 보면 *(와일드카드)가 모든 사용자를 의미한다고 했는데, 만약 svnserve.conf 파일에 anon-access=none (인증된 사용자에 대한 권한접근을 거부) 설정이 안되 있으면 말 그대로 아이디가 있건 없고 모든 접속한 사용자에 대한 권한이 되 버린다. 하지만 anon-access=none 이 설정되 되어 있다면 아이디/비번을(계정) 을 갖고 있는 사용자들에 대한 권한 설정이 될 것이다.

:
Posted by 라면스프
2013. 1. 21. 11:06

SVN(Subversion) 명령어 사용 방법 Enjoy/etc2013. 1. 21. 11:06

출처 : http://blog.naver.com/sjh77ch/62179981



SVN(Subversion)은 형상관리를 위한 도구이다. 다시 말하면 소프트웨어 개발의 버전 관리 시스템이다.

 

SVN에서 많이 사용되는 명령어는 다음과 같다.

 

checkout 또는 co - 저장소(repository)에서 로컬 작업공간으로 소스를 받아오는 것.

$ svn checkout 저장소URL [PATH...]

: 지정된 로컬경로에 저장소의 소스가 복사된다. 경로가 지정안되면 저장소URL의 맨마지막 디렉토리명이 저장될 디렉토리로 사용되어진다. -r 옵션으로 리비전을 지정한 경우엔 해당 리비전의 소스를 가져온다.

예제) svn checkout -r 99 http://repository/src src

설명) 저장소에서 리비전 번호 99의 src경로내의 소스를 가져온다.

 

update 또는 up - 저장소(repository)의 최신 내용으로 로컬 소스를 갱신 한다.

$ svn update [PATH...]

: 기본적으로 최신 리비전을 반영한다. 그러나 -r 옵션으로 리비전을 지정한 경우엔 그 리비전으로 맞춘다.

 

commit 또는 ci - 로컬에서 수정된 내용을 저장소에 적용시킨다.

$ svn commit [PATH...]

: 기본적으로 이 명령을 내리면 수정 사항을 코멘트할 수 있게 로그 편집기가 실행된다. lock된 파일이나 디렉토리는 commit성공후 자동적으로 unlock된다.

 

lock - 저장소의 파일이나 디렉토리를 잠근다.

$ svn lock TARGET

: lock이 걸린 파일이나 디렉토리는 다른 사용자가 변경하여 commit할 수 없다. 해당 경로의 작업이 너무 방대하여 그 동안 다른 사용자가 수정하지 못하도록 할때 유용.

 

unlock - 저장소의 잠근 파일이나 디렉토리를 풀어준다.

$ svn unlock TARGET

: lock의 반대. 기본적으로 lock을 건 사용자가 풀어줘야 한다.

 

add - 새 파일이나 디렉토리를 추가한다.

$ svn add PATH...

: add 명령은 지정된 PATH의 새로운 파일이나 디렉토리를 버전관리 대상에 등록할 뿐이므로, add후 commit 명령을 수행해야만 실제로 저장소에 해당 파일이 추가된다.

 

delete 또는 del, remove, rm - 파일이나 디렉토리를 제거한다.

$ svn delete PATH...(URL)

: delete 명령은 add와 반대로 해당 PATH의 파일이나 디렉토리을 버전관리 대상에서 삭제한다. 역시 commit 명령을 수행해야만 실제로 저장소에서 해당 목록이 제거된다. URL로 지정했을 경우 해당 목록은 즉시 저장소에서 제거된다.

 

 

copy 또는 cp - 로컬 사본이나 저장소 내용을 복사한다. 브랜치(branch)를 만들기 위해 사용.

$ svn copy SRC  DST

: SRC가 로컬경로이고 DST도 로컬경로일 경우, 로컬복사되고 commit시 저장소에 복사 목록이 추가 저장된다. SRC가 로컬경로이고 DST가 저장소URL일 경우, URL에 복사되고 즉시 commit됨. SRC가 저장소URL이고 DST가 로컬경로일 경우, 로컬로 checkout하고 commit시 저장소에 해당 사본이 추가.

SRC가 저장소URL이고 DST도 저장소URL일 경우, 저장소 내에 브랜치(branch)를 만듬.

 

move 또는 mv, rename, ren - 파일이나 디렉토리의 이름을 바꾸거나 이동시킨다. 이 명령은 copy후 delete와 같다.

$ svn move SRC  DST

: SRC가 로컬경로이고 DST도 로컬경로일 경우, 로컬로 rename 또는 move되고 commit시 저장소에 반영된다. SRC가 저장소URL이고 DST도 저장소URL일 경우, 저장소에서 rename,move가 바로 commit됨.

 

info - 해당 파일에 대한 정보를 출력한다.

$ svn info TARGET

: TARGET의 저장소 URL경로나 마지막 수정 일자등에 대한 정보를 보여준다.

 

log - 해당 경로나 파일의 로그( 리비전에 따라 변경된 내역)를 볼수 있다.

$ svn log [PATH]

: 지정된 로컬 PATH에 대한 로그를 출력한다. -r 옵션을 지정하면 출력할 리비젼 범위등을 정할 수 있다.

예제) svn log -r 30:100 test.c

설명) 리비전 번호 30~100 내에서 test.c에 대한 로그를 출력한다.

 

status 또는 stat, st - 로컬 경로의 파일이나 디렉토리의 상태를 보여준다.

$ svn status [PATH]

: 해당 파일이 수정, 추가되었는지 등의 정보를 보여준다. -u 옵션을 주면 저장소의 최신 리비젼이 얼마인지 알려준다.

 

diff 또는 di - 서로 다른 리비젼 간에 차이점을 출력해준다.

$ svn diff [-r N:MTARGET

: 지정된 파일이나 경로에 대해 이전 리비젼하고 차이점을 보여준다. -r 을 지정하면 리비젼 N과 M사이의 차이점을 출력해준다.

예제) svn -r 30:45 test

설명) test 경로내에서 리비젼 번호 30과 45의 차이점을 출력해준다.

 

merge - 두 source 사이에 변경 내용을 작업 경로에 적용해준다.

1. $ svn merge URL1[@NURL2[@M] [PATH]

2. $ svn merge [-r N:MSOURCE [PATH]

: 1. URL1[리비젼 N]과 URL2[리비젼 M]을 비교하여, 변경 내용을 작업경로에 적용한다.

  2. SOURCE의 리비젼 N과 M을 비교하여, 해당 작업경로에 적용한다.

merge는 branch로 분리된 source에 대해 각각의 변경 내용을 현재의 작업에 병합하고자 할때 유용하다.

 

blame 또는 praise, annotate, ann - 지정한 파일이나 URL의 내용 수정내역을 각 라인별로 보여준다.

$ svn blame TARGET

: 해당 파일의 각 라인에 대해 리비젼과 작성자를 나타내 준다. 누가 언제 어떤행을 수정했는지 알수 있음.

 

import - 파일과 디렉토리를 저장소에 추가한다.

$ svn import [PATHURL

 

: URL에 지정된 PATH의 하위 디렉토리는 재귀적으로 추가되며, 필요시 상위 디렉토리가 자동으로 생성된다.

 

export - 저장소에서 순수하게 프로그램 소스만 가져온다.

$ svn export URL [PATH]

: export는 버전관리를 위한 부속 파일들은 제외하고 순수한 소스만 받아오기 때문에, 주로 source release 용도로 사용되게된다. -r 옵션을 지정해서 해당 리비젼의 소스를 받아올 수 있다.

:
Posted by 라면스프
2013. 1. 14. 16:44

[C] HTTP POST로 파일 업로드하는 코드 Enjoy/etc2013. 1. 14. 16:44

출처 : http://visu4l.tistory.com/396



[C] HTTP POST로 파일 업로드하는 코드


Java나 C++ objective-c는 http 용 기본 라이브러리가 있어서 편하지만


C용은 직접 만들어 써야한다. 이미 제작해서 라이브러리는 배포하는곳도 있지만 간단한 파일을 보내는데


어마어마한 라이브러리는 포함시킬필요는 없다.


그래서 C 언어로 간한히 POST 업로드하는 코드를 만들어 놨다.


body를 만드는 부분이 중요하다. 그렇기 때문에 상세히 분석후 수정하여 사용하자.



예문

:
Posted by 라면스프
2012. 11. 29. 14:59

svn 폴더별 권한 설정 Enjoy/etc2012. 11. 29. 14:59

출처 : http://breaklee.blog.me/60167899027


SVN 서버에서 특정 폴더 별로 계정권한을 부여할 수 있다.

예 ) 디자이너(이미지, 데이터 파일)작업물과 Source 와의 접근 차단을 위해.


폴더 구성

/repo/source/design/*

/repo/source/source/*


designer 는  design 폴더에만 접근을 할 수 있고 개발자는 source 폴더에만 접근을 할 수 있다고 가정 하자.


우선 conf/passwd 파일에 각 인원 별 계정을 추가한다.

designer 계정 :  happy

개발자 계정 : smile 


conf/authz 파일이 있는데 우선 svn 서버가 이파일을 사용하도록 설정을 해줘야 한다.

conf/svnserve.conf 파일을 열어보면  ### authz-db = authz 이것이 주석 처리 되어 있는데 주석을 풀고 저장하면

authz 에 설정된 권한을 이용할 수 있다. (파일을 열어보자 )


여러 유저를 다 쓰기 귀찮으면 아래와 같이 그룹을 정할 수 있다.


[groups]

dev=auser,buser,cuser,duser

design=zuser,kuser,suser 


authz 파일안에 아래와 같은 format 으로 설정이 가능하다.


[경로명]

유저 or @그룹 = 권한


위의 예시대로 설정을 해보자.


[/repo/source/design]

* = 

@design = rw

reader = r


[/repo/source/source]

* = 

@dev = rw



'* = ' 의 의미는 전체에 대해서 권한을 삭제한다는 의미

r : 읽기권한 부여

w : 쓰기 권한 부여

rw : 읽기 쓰기 권한 부여












출처 : http://tastegod.co.kr/202



*  세팅

svn-authz 파일

[groups]
group_inner = abc, bcd .....
# 특정 프로젝트만 쓰면 되는 사용자들을 별도 그룹으로 했다
group_kats_pss = byc, abc .....

# 아래 두줄 : 모든 놈이 읽고 쓴다. 요 줄들은 주석처리했다
# [/]
# * = rw

# 내부직원그룹은 모든거에 대해 읽고 쓴다. 
[/]
@group_inner = rw

# lg 리파지토리의 /abc/pss 경로에 대해 특정 그룹의 사람들이 다 읽고 쓴다. 이 부분 경로 설정하는거 잘 몰라서 해맸음. 매뉴얼 쏵 훑으면 이 내용도 있을거 같은데... 부분적으로만 보다 보니...
[lg:/abc/pss]
@group_kats_pss = rw


* Manual

http://svnbook.red-bean.com/

구글에서 검색 (검색어 : svn manual ) 해도 요 놈이 제일 위에 나온다. 
SVN 사이트의 DOCUMENTATION 페이지 (    ) 에도 요 놈이 링크 걸려있다

나 같은 경우 AUTH 와 같은 단어로 검색해서 필요한 부분만 찾아볼 것이므로
SINGLE PAGE EDITION 
http://svnbook.red-bean.com/en/1.7/svn-book.html )
을 클릭해서 보았다.

그룹에 그룹을 속하게 할 수 있는 등의 내용도 있다...


* 블로그 글들도 좋다

http://ummae.tistory.com/197

http://breaklee.blog.me/60167899027

요런 내용도 있다.

[/repo/source/design]

* = 

@design = rw

reader = r


[/repo/source/source]

* = 

@dev = rw


'* = ' 의 의미는 전체에 대해서 권한을 삭제한다는 의미



:
Posted by 라면스프
2012. 11. 23. 09:48

OS별 CPU, memory, kernel bit 를 확인 방법 Enjoy/etc2012. 11. 23. 09:48

출처 : http://www.cubrid.com/zbxe/47077


  1. CPU 확인 방법
    1. AIX : lsdev -Cc processor
    2. HP-UX : ioscan -fnC processor
    3. Solaris : psrinfo -v
    4. LINUX : cat /proc/cpuinfo
  2. 메모리 확인 방법
    1. AIX : bootinfo -r
    2. HP-UX : grep -i Physical /var/adm/syslog/syslog.log
    3. Solaris : prtconf
    4. LINUX : free
  3. kernel bits 확인 방법
    1. AIX : bootinfo -K
    2. HP-UX : getconf KERNEL_BITS
    3. isainfo -kv
    4. LINUX : getconf WORD_BIT

[HP]
cd /usr/contrib/bin
[shcmweb1:/usr/contrib/bin]
[shcmweb1:/usr/contrib/bin]machinfo
CPU info:
  1 Intel(R)  Itanium(R)  Processor 9340 (1.6 GHz, 20 MB)
          4.79 GT/s QPI, CPU version E0
          4 logical processors (4 per socket)

Memory: 16283 MB (15.9 GB)

Firmware info:
   Firmware revision:  01.90
   FP SWA driver revision: 1.18
   IPMI is supported on this system.
   BMC firmware revision: 1.53

Platform info:
   Model:                  "ia64 hp Integrity rx2800 i2"
   Machine ID number:      5509adca-f963-11e1-bb7a-05581a03fc66
   Machine serial number:  SGH230A2AK

OS info:
   Nodename:  shcmweb1
   Release:   HP-UX B.11.31
   Version:   U (unlimited-user license)
   Machine:   ia64
   ID Number: 1426697674
   vmunix _release_version:               
@(#) $Revision: vmunix:    B.11.31_LR FLAVOR=perf 
[shcmweb1:/usr/contrib/bin]


[DB]
서버버전 확인 select * from v$version;
bit확인  select platform_name from v$database;

:
Posted by 라면스프
2012. 10. 9. 14:45

tomcat catalina.out 처리 Enjoy/etc2012. 10. 9. 14:45

오래되면 catalina.out  로그파일 대용량이 된다~!

catalina.out 로그파일 쌓이는걸 막아야겠다~!

tomcat 로그는 catalina.out  대신 catalina.YYYY-MM-DD.log 파일을 보면 될듯...


수정하기

$TOMCAT_HOME/bin/catalina.sh


  touch "$CATALINA_OUT"

  if [ "$1" = "-security" ] ; then

    if [ $have_tty -eq 1 ]; then

      echo "Using Security Manager"

    fi

    shift

    "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \

      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \

      -Djava.security.manager \

      -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \

      -Dcatalina.base="$CATALINA_BASE" \

      -Dcatalina.home="$CATALINA_HOME" \

      -Djava.io.tmpdir="$CATALINA_TMPDIR" \

      org.apache.catalina.startup.Bootstrap "$@" start \

      #>> "$CATALINA_OUT" 2>&1 & 주석처리

      >> /dev/null 2>&1 & 라인추가

  else

    "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \

      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \

      -Dcatalina.base="$CATALINA_BASE" \

      -Dcatalina.home="$CATALINA_HOME" \

      -Djava.io.tmpdir="$CATALINA_TMPDIR" \

      org.apache.catalina.startup.Bootstrap "$@" start \

      #>> "$CATALINA_OUT" 2>&1 & 주석처리

      >> /dev/null 2>&1 & 라인추가

  fi



위와 같이 처리 하면 catalina.out  파일 사이즈가 늘어나지 않는다~! 



그외 방법들


펌 : http://tenny.egloos.com/1226439


우선, 톰켓 로그 설정법은

이런 곳 http://tomcat.apache.org/tomcat-5.5-doc/logging.html

그리고 또 이런 곳에 잘 나와있다. http://minaret.biz/tips/tomcatLogging.html

하지만, 이런 곳에는 http://tomcat.apache.org/faq/logging.html

톰켓은 기본적으로 catalina.out 파일을 rotate하지 않는다고 한다.
톰켓 입장에서는 당신이 로깅패키지를 쓰면 되기 때문에 문제가 없다고 하는데,,, 글쎄다...
어떻게든 로그가 계속 쌓이는 것은 막아야하지 않겠는가... ( 정말 쉬운 방법이 있으면 가르침을 주시면 참 고마울 것 같다)

System.out and System.err both print to catalina.out. But you can suppress this via the swallowOutput property and sent to different log files. 
catalina.out does not rotate. But it should not be an issue because nothing should be printing to standard output since you are using a logging package, right? a thread about rotation of catalina.out



방법1. cronolog 로테이트 로깅 프로그램 사용

http://marc.info/?l=tomcat-user&m=105645816302666&w=2 

방법2. log4j 사용

http://minaret.biz/tips/tomcatLogging.html


첫 번째 방법은 패키지 설치가 귀찮아서 안해봤고, 두 번째 방법을 해보니, 로깅은 되는데, catalina.out은 계속 쌓이는 듯 하다. 뭔가 설정을 잘못한 것일 수도 있지만, 분석을 해봐도 뜻대로 catalina.out에 로깅이 중단되지는 않았다.

해보지는 않았지만, pipe 처리를 해서 rotate를 완전 다른 프로세스에게 넘기는 첫번째 방법이 더 쉬워보이기는 한다. 하지만 이 역시, 톰켓을 kill할 때, 가끔 cronolog가 혼자 살아있다는 bug report 가 있기는 하다.


이제 귀찮고 해서, shell script를 만들고 crontab에 넣어 버렸더니, 잘되기는 한다.

rotateTomcatLog.sh

#!/bin/sh

LOG_DIR=/tomcat/log/dir
DATE=`/bin/date +%Y-%m-%d`

/bin/nice /bin/cp  $LOG_DIR/catalina.out $LOG_DIR/catalina.$DATE.out
/bin/nice /bin/cat /dev/null > $LOG_DIR/catalina.out
rm -Rf $LOG_DIR/*.log


#
# delete out-of-date catalina.log
#

DELETE_DATE=`/bin/date +%Y-%m-%d --date '20 day ago'`
#DELETE_DATE`/bin/date +Y-%m-%d --date '1 month ago'`

echo "$LOG_DIR/catalina.$DELETE_DATE.out"

for file in $LOG_DIR/*
do
        if [[ "$file" < "$LOG_DIR/catalina.$DELETE_DATE.out" ]]
        then
                rm -f $file
        fi
done

# end of file

위 스크립트는 cataline.out 하루에 한 번씩 rotate하고, backup 파일은 20일 동안 보관한다.
뭐 취향에 맞게 바꿔써도 무방할 것 같지만, 괜하게 log를 copy하는 부하가 맘에 걸린다.

/etc/logrotate.d/ 밑의 설정처럼 rotate도 하면서 backup 파일 보관 기간까지 설정하면서,
날짜와 크기 제한까지 같이 두는 설정이 있으면 좋겠다. 
(log4j는 날짜로 로테이트하면서, 크기 제한까지 두지는 못하는 것 같다.)




:
Posted by 라면스프
2012. 3. 9. 15:26

[TOMCAT] Tomcat Performance Tuning Enjoy/etc2012. 3. 9. 15:26

출처 : http://www.solutionhacker.com/tomcat-performance-tuning/


Most companies I have worked for use Tomcat as Servlet Container. It is de facto standard just like how Apache been used as Web Server. However, most of us just drag our war file to the webapp folder and use Tomcat with all the settings as default out of the box. It works fine in development environment but may not in production. This article will give you advice in several areas:

  1. Production Tomcat Architecture
  2. Tuning tomcat for performance
  3. Resolving problems which affect availability

 Production Tomcat Architecture

In production Tomcat relies on a number of resources which can impact its overall performance. Understanding the overall system architecture is key to tuning performance and troubleshooting problems.

  1. Hardware: CPU(s), memory, network IO and file IO
  2. OS: SMP (symmetric multiprocessing) and thread support
  3. JVM: version, tuning memory usage, and tuning GC
  4. Tomcat: version (example, Tomcat 6 supports NIO)
  5. Application: Application design can have the largest impact on overall performance
  6. Database: concurrent db connection is allowed (pooling and object caching)
  7. Web Server: Apache can sit in front of Tomcat and serves the static content. It also can do load balancing across multiple Tomcat instances.
  8. Network: Network delays.
  9. Remote Client: How fast is the communication protocol? Content can be compressed. 

Performance Tuning

How to measure and test performance

  • Request latency is key b/c it reflects the responsiveness of your site for visitors.
  • Test environment should match production as closely as possible.
  • The data volume is important to simulate in database side.
  • Test HTTP requests with different request parameters (test corner cases)
  • Use load test to simulate the traffics (ex. JMeter)
  • Final tests should be over longer periods like days because JVM performance changes over time and can actually improve if using HotSpot. Memory leaks, db temporary unavailable, etc can only be found when running longer tests.

JVM version, memory usage and GC

  • Sun Java 1.3 and later releases inlcude HotSpot profiling optimizer customized for long running server application.
  • Tomcat will freeze processing of all requests while the JVM is performingGC. On a poorly tuned JVM this can last 10′s of seconds. Most GC’s should take < 1 second and never exceed 10 seconds
  • Tune the -Xms (min) and -Xmx (max) java stack memory (set them to the same value can improve GC performance)
  • Make sure the java process always keeps the memory it uses resident in physical memory and not swapped out to virtual memory.
  • Use -Xincgc to enable incremental garbage collection
  • Try reducing -Xss thread stack memory usage

Tomcat version and configuration

  • Tomcat 6 supports NIO.
  • Set “reloadable” false – remove unnecessary detection overhead
  • Set “liveDeploy” to false – liveDeploy controls whether your webapps directory is periodically checked for new war files. This is done using background thread.
  • Set “debug” to 0
  • Set “swallowOutput” to true – This makes sure all output to stdout or stderr for a web application gets directed to the web application log rather than the console or catalina.out. This make it easier to troubleshoot problems.
  • Connector configuration – minProcessor, maxProcessor, acceptCount, enableLookups. Don’t set the acceptCount too high b/c this sets the number of pending requests awaiting processing. It is better deny few requests than overload Tomcat and cause problems for all requests. Set “enableLookups” to false b/c DNS lookups can add significant delays.

Database connection pool

  • We use connection pool provided by Spring instead
  • Using middleware to persist and cache objects from your database can significantly improve performance b/c of fewer db calls, less thrashing of the JVM for creation and subsequent GC of object craeted for resultset.

Application design and profiling

  • If the data used to generate a dynamic page rarely changes, modify it to a static page which you regenerate periodically.
  • Cache dynamic page
  • Use tool like JProble to profle your web applications during development phase
  • Look for possible thread synchronization bottlenecks
  • Date and Time thread synchronization bottleneck 

Troubleshooting

Collecting and analyzing log data

Common problems

  • Broken pipe – For HTTP Connector indicates that the remote client aborted the request. For web server JK Connector indicates that the web server process or thread was terminated. These are normal and rarely due to a problem with Tomcat. However, if you have long request, the connectionTimeout may close the connection before you send your response back.
  • Tomcat freezes or pauses with no request being processed – usually due to a long pause of JVM GC. A long pause can cause a cascading effect and high load once Tomcat starts handling requests again. Don’t set the “acceptCount” too high and use java -verbose:gc startup argument to collect GC data.
  • Out of Memory Exception – look into application code to fix the leak (profile tool can help). Increase available memory on the system via -Xmx. Restart tomcat!
  • Database connection failure – connection used up when traffic is spike.
  • Random connection close exception - when you close your connection twice. First close(), the connection returns to the pool. It may be picked up by another thread. Now, second close() may close a connection that is being used by other thread. Don’t close connection twice, use JDBC Template from Spring to avoid this problem. 

Reference

  1. JavaWorld GC Article
  2. Sun HotSpot Performance Document
  3. Tomcat Performance Slides

  

:
Posted by 라면스프