[스크립트] 배치 파일 작성법

도스에는 명령어를 일괄적으로 처리하기위한 배치파일이라는 것이 있습니다.
대부분의 사람들은 배치파일이 도스환경을 쉽게 만든다는 사실을 과소평가하는데, 컴퓨터를 좀
더 쉽게 사용하고 싶다면 배치파일을 꼭 짚고 넘어가는것이 좋습니다.

▶배치파일이란 ?


컴퓨터의 동작 상태를 살펴 보면 항상 사용자와의 상호작용에 의하여 작업이이루어진다는것을
알 수 있습니다. 도스라는 운영체제도 사용자가 명령을 입력하면 그 명령에 대해 도스가 분석하
여 사용자가 원하는 실행 결과를 제공합니다.
따라서 사용자는 항상 도스 프롬프트 상에서 일일이 키보드를 이용한 타이핑으로 명령을 내려야
하고, 하나의 명령이 내려지면 완료될 때까지 다음 명령을 내릴수가 없습니다. 작업 과정이 얼마
되지 않는다면 큰 상관이 없으나 그 과정이 매우 길고 복잡하다면 사용자는 지루함을 느끼게 됩
니다. 또한 비록 짧은 작업과정이라도 컴퓨터를 켤때마다 매번 똑같은 과정을 일일이 지시하는
것도 귀찮을 것입니다.
이러한 경우 배치 파일은 가장 확실한 해결책입니다.

배치파일의 기능은 순차적이고 반복된 동일한 작업 과정을 몇개의 혹은 수십, 수백 개의 연관된
명령어를 하나의 파일로 집약하여 그 하나의 파일(배치파일)만 실행함으로써 원하는 작업 과정
을 수행하는것입니다.배치파일에 붙는 확장자는 .bat(batch 의 약어) 입니다.도스에서 실행이 가
능하기 때문에 .com, .exe 확장자가 붙는 외부 명령어와 함께 실행 가능한 파일로 분류됩니다.차
이가 있다면 .com, .exe 명령어는 컴퓨터만 해석 가능한 기계어 코드로 구성되어 있는반면, 배
치 파일은 사람이 알아볼수 있는 일반 텍스트로 이루어져있다는 것입니다.

그래서 사용자들은 문서작성에 이용하는 워드프로세서나 텍스트에디터 등을 이용해 배치 파일을
작성할 수 있습니다. 그러나 워드프로세서는 덩치가 크고 원래 목적이 편집과 출력을 위해 만들
어진 것이므로 단순한 배치 파일을 작성하는 데는 권하고 싶지 않습니다.

저장할때도 워드프로세서 고유의 포맷(예" .hwp 확장자를 가지는 아래아한글 데이터 파일)으로
저장하면 인식이 되지 않으므로 아스키 파일로 저장해야 합니다.가장 편리한 방법은 일반 문서
에디터( 도스의 Edit, Q에디터,U에디터 등)를 이용하거나 도스의 'Copy Con' 명령으로 배치 파일
을 만드는 것입니다.다음과 같이 'Copy con 파일명' 형식으로 입력하고 엔터를 누르면 도스 프롬
프트 상태에서 편집할 수 있는 상태가 됩니다.
-------------------------------
C:\Bats> copy con Timedate.bat
cls
time
date
^Z

1 File(s) copied
-------------------------------

여기서 쓰고 싶은 대로 적기만 하면 됩니다.제일 마지막행의 ^Z 는 파일의 제일 마지막 부분이라
는 것을 도스에게 알려주는 코드로 < Ctrl + Z > 키 또는 F6 키를 누르면 됩니다. 그리고 엔터키
를 한번더 누르면 '1 File(s) copied' 라는 메세지가 출력되는데, 이는 방금 ' copy con 파일
명 ' 으로 작성된 문서파일이 성공적으로 만들어졌다는 뜻입니다.위의 문서파일은 확장자
가 .BAT 로 붙었기 때문에 실행가능한 외부 명령어가 되는데, 배치파일은 명령이 기록되어 있는
순서대로 실행되기 때문에 timedate.bat 를 실행시키면 먼저 화면을 지우고 난뒤 시스템의 시간
과 날짜를 설정합니다.간단한 배치파일은 'copy con 파일명' 으로 작성하는 것이 다른 프로그램
의 도움없이 쉽고 빠르게 처리할 수 있습니다. 하지만 배치파일이 조금 길거나 작성중에 수시로
편집할 일이 생기는 경우에는 불가능합니다. 'copy con 파일명' 으로 파일을 작성하면 행으로 다
시돌아갈 수 없을 뿐 아니라 수정이 불가능하기 때문입니다. 그러므로 배치파일을 만들 필요가
있을때는 문서 에디터를 이용하는 것이 좋습니다.

▶ 배치파일 작성 명령어 9인방

배치 파일은 파일 안에 기록되어 있는 명령의 순서대로 실행됩니다.가장 대표적인 것이 부팅에
이용되며, 컴퓨터의 루트 디렉토리에 위치하고 있는 Autoexec.bat 파일입니다. 그런데 만약 배
치 파일의 실행의 순서를 순차적이 아닌멀티부팅용 Autoexec.bat 처럼 사용자 마음대로 정하고
싶다면 배치파일에 제공되는배치명령어의 용도를 알고 있어야 합니다.


1. CALL


현재 실행중인 배치 파일을 종료하지 않고 필요한 다른 배치파일을 호출하여 실행한 다음 원래
의 배치파일로 다시 돌아오려고 할 때 사용됩니다.

◇ 사용법 : Call [drive:]\[경로]\<배치파일명>[.BAT]

◇ 예 : Call c:\bats\sample.bat

어떤 배치 파일을 실행하는 도중에 경로 C:\bats 에 있는 sample.bat 파일을 실행한 다음 다시
원래의 배치파일로 돌아옵니다.


2. CHOICE

배치 프로그램 내에서 사용자의 선택을 묻기 위해 사용됩니다. 배치 파일 제작자가 설정한 물음
을 출력하면서 지정된 키 입력을 기다립니다. 이 명령은 배치파일 내에서만 사용 가능합니다.

◇ 사용법 :choice [/C[:]문자열][/N][/S][/T[:]기본키,대기시간][메세지]

◇ 옵션

- /C[:]문자열 : 사용자가 선택할 수 있는 키목록을 [] 괄호 내에 ', ' 로 구분하여 출력하
고 /C 스위치를 사용하지 않으면 기본적으로 YN이 사용됩니다.

- /N : 프롬프트를 출력하지 않도록 합니다.

- /S : 사용자의 입력에서 소문자, 대문자를 구분하도록 합니다.

- /T[:]기본키, 대기시간 : 기본키를 지정한 후 대기시간 동안 사용자의 키 입력이 없으면 자동
적으로 기본키가 입력된 것으로 간주하고 진행됩니다. 지정 가능한 대기시간은 초단위이며 0에
서 99 사이의 값입니다.

- 메세지 : 화면에 출력될 메세지를 지정합니다.

◇ 예 : choice /c:abCD /s /t : C, 5 다음중에서 하나를 선택하십시오 a, b, C, D
◇ 설명 : 입력 가능한 키를 a,b,C,D로 한정하며 사용자로부터 입력되는 영문자의 대,소문자를
구분하는데, 만약 5초 내에 사용자로부터 키 입력이 없다면 C 가 입력된 것으로 간주합니다. 그
리고 화면에는
'다음중에서 하나를 선택하십시오 a, b, C, D[a,b,C,D]? '
라는 메세지가 출력됩니다.


3. ECHO

배치파일 실행중에 명령어를 화면에 표시할 것인지의 여부를 설정하며, 그 상태를 표시합니다.
한편 ECHO 명령 뒤에 오는 메세지는 화면에 나타납니다.

◇ 사용법 : echo [on/off] [문자열]

◇ 옵션
- on : 배치 파일 실행중에 그 배치 파일 내의 명령어를 화면에 표시합니다.
- off : 배치 파일 실행중에 명령어를 화면에 출력하지 않도록 합니다.
- 문자열 : 화면에 출력하고 싶은 메세지를 적어줍니다.
- 없음 : 현재 ECHO 설정 상태를 표시합니다.

◇ 예 :

echo off
☞ 현재 실행중인 배치 파일 내의 명령어를 화면에 나타나지 않도록 함.
echo
echo 안녕하세요?~
☞ 현재 echo 설정상태를 표시하며 안녕하세요?~ 라는 문구를 화면에 출력합니다.


4. FOR

지정된 집합 중의 각각의 요소에 대하여 명령으로 설정한 처리를 반복 실행합니다.

◇ 사용법

For %%<변수> IN (<집합>) DO <명령> [<옵션>] ☞ 배치파일용.
For %<변수> IN (<집합>) DO <명령> <옵션>] ☞ 순차처리용.

◇ 옵션

- %%<변수>, &<변수> : 변수로 사용되는 것은 임의의 영문자로 1자만 허용됩니다. 주의할 점은
배치파일에서 사용할 경우는 반드시 %%처럼 두개를 연달아 사용해야 하며, 일반 도스 프롬프트에
서 사용할 때는 % 하나만 사용합니다.

- <집합> : %%<변수>에 대입하고 싶은 값을, 또는 스페이스로 구분하여 대입하고 싶은 순서대로
나열합니다.

- <명령> : %%<변수>에 대입되어 있는 값에대해 반복적으로 실행하고 싶은 명령을 지정합니다.

- <옵션> : 지정한 명령의 옵션이나 FOR 명령에서 지정한 옵션을 설정합니다.

◇ 예

for %%f in (bak tmp $$$) do del *.%%f /p ☞ 배치파일의 경우
for %d in (read,wh,file) do hlist %d*.* ☞ 도스 프롬프트에서 실행시

◇ 설명 : 첫 번째는 bak, tmp, $$$ 를 순서대로 %%f 환경 변수에 대입하여 차례대로
DEL *.bak /p, DEL *.tmp /p, DEL *.$$$ .p 를 실행한 것과 동일한 결과를 얻게됨.

두번째는 READ,WH,FILE 를 순서대로 %d 환경변수에 대입하여 차례대로
HLIST READ*.*, HLIS TWH *.* , HLIST FILE *.* 를 실행한 것과 동일한 결과를 얻게 됩니다.


5. GOTO

배치 처리의 흐름을 <레이블>에서 정의되어 있는 위치로 옮깁니다.

◇ 사용법 :Goto <레이블>

◇ 예 :
goto loop
:loop
각종 처리할 내용

◇ 설명 : 레이블 loop 로 배치 처리의 제어권을 이동시켜 loop 항목에 지정된 각종 처리할 내용
을 실행시킵니다.

◇ 참고 : 배치 파일에 레이블 표시는 레이블명 앞에 콜론(:) 을 붙여주며 줄을
바꿔 맨 앞에 지정해 주어야 합니다.


6. IF

지정한 조건의 판단 결과에 따라서 배치 처리를 진행합니다.

◇ 사용법 : If [NOT] <조건> <명령>

◇ 옵션

- NOT : 지정한 조건의 반대 조건일 때만 실행합니다.

- 조건

- ERRORLEVEL <수치> : 바로 전에 실행한 명령(프로그램)의 종료 코드가 <수치> 이상일 때에는
참이 되고 <명령> 이 실행됨.

- <문자열1> == <문자열2> : <문자열1> 과 <문자열2> 가 같을 때에만 참이되고 <명령>이 실행됩
니다. 주의할 점은 문자열의 대,소문자가 구별되며, 문자열중에 구분기호(콤마,스페이스,세미콜
론,등호,탭)가 포함되어 있으면 않됩니다.

- EXIST <파일명> : <파일명>으로 지정한 파일(경로포함)이 존재할 때에만 참이 되고 <명령>이
실행됩니다. <파일명>에는 와일드카드 문자의 사용이 가능합니다.

◇ 예 :
if errorlevel 2 goto quit
if not %1 ==%2 goto process
if exist d:\work\temp.$$$ del d:\work\temp.$$$

◇ 설명 :
직전에 실행한 명령의 종료 코드가 2 이상일 경우 레이블 QUIT로 이동합니다.

환경변수 %1과 환경변수 %2에 대입되어 있는 문자열이 같지 않을 경우에만 레이블 PROCESS 로 이
동합니다.

경로 D:\Work 에 temp.$$$ 라는 파일이 존재하면 그 파일을 삭제합니다.


7. PAUSE

배치 파일 실행을 일시 정지합니다.

◇ 사용법 :Pause [문자열]

◇ 옵션

- 문자열 : 문자열을 생략하면 'press any key to continue...'라는 메세지가 화면에 출력됩니
다. 만약 PAUSE 명령 뒤에 어떤 메세지를 지정하여 그 메시지를 출력하고 싶다면 'Echo On' 명령
을 우선 내려야 합니다.

◇ 예 :
echo on
pause 준비가 되었으면 아무키나 누르세요...

◇ 설명 : 배치 처리 중 pause명령을 만났을때 임의의 다른 메시지를 화면에 출력하고 싶다면
예 에서와 같이 반드시 echo on 명령이 선행되어야 하며 예의 경우에는 ' 준비가 되었으면 아무
키나 누르세요...' 라는 메세지가 출력됩니다.

◇ 참고 : 위 처럼 하면 화면에 Pause 라는 명령어까지 같이 출력되므로 이런경우
echo on
echo 준비가 되었으면 아무키나 누르세요...
pause > Null

이런식으로 사용하면 출력하고자 하는 메세지만 화면에 출력됩니다.


8. REM

배치 파일 내에 주석문을 부여하고 싶을 때 사용합니다.

◇ 사용법 :rem [문자열]

◇ 옵션

- 문자열 : 주석문으로 쓰고 싶은 것을 적어줍니다.

◇ 예 : REM 이 배치파일은 샘플입니다.

배치파일내의 적당한 위치에 적절한 주석문을 붙여두면 배치 처리의 흐름을 일목요연하게 볼 수
있습니다.


9. SHIFT

배치 파일에 주어진 파라미터(%1~%9)와 실행시에 지정되는 값과의 대응을 하나씩 뒤로 이동하여
표시합니다.

◇ 예

:loop
if "%1" == " " goto end
echo %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
shift
goto loop
:end

위와 같이 배치 파일을 작성해두고 다음과 같이 배치파일을 실행해 보면 shift 명령이 어떤 역할
을 하는지 금방 알 수 있습니다..
C:\bats> test.bat A B C D E F G H I J 0 1 2 3 4 5 ☜똑같이 입력하고 실행후 확인.



출춰:http://syszone.co.kr/bbs/zboard.php?id=windows&page=1&page_num=20&category=&sn=off&ss=on&sc=on&keyword=&prev_no=28&sn1=&divpage=1&select_arrange=headnum&desc=asc


사고싶다!사고싶다!사고싶다!사고싶다!사고싶다!사고싶다!사고싶다!사고싶다!사고싶다!사고싶다!사고싶다!사고싶다!사고싶다!사고싶다!사고싶다!사고싶다!사고싶다!사고싶다!

商品画像


 

 

商品説明



商品詳細
S15シルビア用 WISESQUARE製 BEHRMAN GTエアロシリーズ D1-SPEC PROモデルの出品です。D1グランプリで活躍中の各選手のS15でもおなじみのエアロキット、各アイテムが数点のパーツから構成されていて超立体3D構造。こちらの出品はFRP製のリアバンパー&カーボン製アンダーディフューザーセットです。裾の広がった時代遅れのドリフトスタイルは脱ぎ捨てて最新のアイテムであなたのS15シルビアをドレスアップしてください。写真はカウルが特殊繊維のTEIJINのテクノーラ製ですが出品の商品はアンダーディフューザーはカーボン製です。★GTエアロ★特価★

支払詳細
■銀行振り込み
■佐川急便商品代引き


発送詳細

■佐川急便による発送になります

■送料は全国(沖縄・一部の離島を除く)一律3000円です。

コメント
出品はFRP製バンパー+カーボン製アンダーデフューザーセットです。定価102900円。WISE SQUARE製。 WISE SQUAREはおかげさまで10周年感謝の気持ちをこめてエアロパーツなどオークション格安で売り切りスタートです。


실전에 사용한 Unix 에 대한 여러가지 명령어들
너무나도 초보단계이기 때문에 한발짜국씩...냠냠냠

 

 copy

cp: omitting directory '/ 에러시 이렇게 하면 강제로 할꺼냐고 물어본다.
cp -rp /A /B
참고로1) cp /aaa/bbb /ccc
      2) cp /aaa/bbb/ /ccc 는 다르다

1)은 ccc 하위에 bbb디렉토리를 포함하여 카피, 2)는 bbb를 포함하지 않는 이하의 디렉토리를 카피

TAIL

 [실시간으로 로그보기]
tail -f /opt/tomcat/log/output.log

[마지막 라인에서 50번째 라인까지 보기]
tail -50 [파일이름].txt

 [옵션]
 f : 파일의 마지막 10라인을 실시간으로 계속해서 출력
 F : 파일 변동 시 실시간으로 보여주되 로그파일처럼 특정 시간이 지난 후 파일이 변하게 되면 새로운 파일을 오픈하여 보여줌
    (다시 명령을 실행할 필요가 없음)
 n : n 만큼의 라인을 출력
 n+n : 마지막 줄이 아니라 첫번째 줄부터 시작해 n 번째 라인 이후부터 출력
 --byte=n : n바이트 만큼의 내용을 출력
※ n은 숫자 ※반대로 첫라인 보고 싶으면 head 명령
※ 실행은 복사당할 곳에서 함
    www1.yahoo.co.kr의/home/www이하를 현재 위치하고있는 서버의 /home/www로 복사함

rsync 사용법(미러링 툴)과 예제

 > rsync -avz -e ssh www1.yahoo.co.kr:/home/www /home/www

rsync는 서버간, 혹은 디렉토리간의 미러링을 구현시 가장 일반적인 툴이라 할 수 있겠다.
보안 적으로도 SSH프로토콜이 사용가능하며 압축프로토콜 사용. 간편함이 특징이다.
크게 2가지 방법이 있는데,
rsync데몬(873 전용 포트필요)을 이용한 방법과 SSH를 통한 보안된 방법이 있는데 특징은 다음과 같다.
* rsync데몬: 인증이 특별히 필요 없으나 원격지 미러링일 경우 다른 보안장치 필요, 데몬 기동 설정등이 필요하다.
* rsync+SSH:한줄의 스크립트로 미러링이 가능하나 인증과정이 필요(cron등으로 실행이 불가능하다)

여러가지 검토해본결과 rsync+ssh가 이상적으로 판단, 문제의 크론작업시의 자동 인증과정을 클리어 하기로 했다.
보안 문제가 없는 2.5.1이후버전을 사용할것

rsync의 기본 사용법을 모른다면 밑에를 참조

간단한 사용예
rsync -avurz --delete --exclude=*.db --exclude=*.info SRC(원본) DEST(복사될 위치)

-a는 archive mode (심볼릭 링크, 속성, 퍼미션, 소유권등 보존).
-v옵션 : verbose. 일어나는 일을 자세히 출력
-u옵션: 혹시, 대상 디렉토리에 더 새 파일이 있으면 그냥 skip.
(혹은 같은 버전의 파일이라도 -_- u를 안 붙이면 그냥 그대로 cp처럼 덧씌우는듯.)
-r옵션: recursive. 하위디렉토리까지 동기화.
-z compress(전송시 압축).

--delete: 원본 디렉토리에 없는 파일은 없앤다.
--exclude: 제외할 파일을 지정한다.(cvs, 혹은 설정파일 등을 지정)

/ 가 붙는 것과 안붙을 경우 차이가 난다. SRC경로를 /home/backup라고 해주면 backup폴더가 생성되고 자료들이 backup폴더 안으로 들어가고 DEST경로를 /home/backup/라고 해주면 백업 경로에 바로 저장이 된다. 주의 하기 바란다.(먼소리?)

적용예
검색결과 다행히 ^^;

(주)웹호스트 구자열과장 danda@nate.com 님의

ssh, rsync를 이용한 백업방법에 대한 웹호스트 연구문서
원격백업을 해결할 열쇠, rsync와 ssh의 결합

문서를 참고, 재구성 하였다.


가정 상황
- 백업대상서버(1) : 1.1.1.1 ssh포트는 22번
- 백업대상서버(2) : 1.1.1.2 ssh포트는 보안으로 100번사용중
- 백업서버 : 2.2.2.2


■ 포트및 접속, 데먼에 대한 이해
- 백업대상인 1.1.1.1, 1.1.1.2는 rsync가 깔리지 않아도 된다.
- 2.2.2.2는 rsync구동프로그램이 반드시 깔려야 한다.


[1.1.1.1의 백업]
rsync -avPz --stats -l -t -e ssh 아이디@1.1.1.1:/.backup/ /.backup/start1/
[1.1.1.2의 백업]
rsync -avPz --stats -l -t -e ssh 아이디@1.1.1.2#100:/.backup/ /.backup/www2/


□ cron으로 구성시 백업스크립트작성

백업스크립트작성
의존 프로그램:expect

※설치
#yum install expect

스크립트 명:wwwbk1.sh


#!/usr/bin/expect -f
## 1.1.1.1
log_user 0
spawn rsync -avPz --stats -l -t -e ssh 아이디@1.1.1.1:/.backup/ /.backup/start1/
expect "password: "
send "비밀번호\n"
log_user 1
interact

## 1.1.1.2(포트가 다른 경우)
log_user 0
spawn rsync -avPz --stats -l -t -e ssh 아이디@1.1.1.2#100:/.backup/ /.backup/www2/
expect "password: "
send "비밀번호\n"
log_user 1
interact

 

테스트(절차숙지)
1) expect 를 설치하라.
2) /usr/bin/expect -f wwwbk1.sh <---이렇게 테스트해보라(에러출력됨)
3) expect
> log_user 0
1
....
exit
이런식으로 expect명령으로 각 줄을 입력 테스트해보라~


□ crontab의 작성
※새벽4시경에
#crontab -e 로 이하를 추가

#remote backup www server 6:00
00 4 * * 5 root /sbin/e2fsck -p /dev/hdb1
01 4 * * 1 root /backupscripts/wwwbk1.sh
01 4 * * 2 root /backupscripts/wwwbk1.sh
01 4 * * 3 root /backupscripts/wwwbk1.sh
01 4 * * 4 root /backupscripts/wwwbk1.sh
01 4 * * 5 root /backupscripts/wwwbk2.sh
01 4 * * 6 root /backupscripts/wwwbk2.sh
01 4 * * 0 root /backupscripts/wwwbk2.sh


위에 작성한 문서를 wwwbk1.sh 와 wwwbk2.sh로 폴더를 다르게한 후,
월-목 : wwwbk1실행하여 /bk/백업1/
금-일 : wwwbk2실행하여 /bk/백업2/
에 놓아서 안정성을 가중시킨다 

ssh, rsync를 이용한 백업방법에 대한 웹호스트 연구문서
원격백업을 해결할 열쇠, rsync와 ssh의 결합

 가정 상황
- 백업대상서버(1) : 1.1.1.1 ssh포트는 22번
- 백업대상서버(2) : 1.1.1.2 ssh포트는 보안으로 100번사용중
- 백업서버 : 2.2.2.2

 

■ 포트및 접속, 데먼에 대한 이해
- 백업대상인 1.1.1.1, 1.1.1.2는 rsync가 깔리지 않아도 된다.
- 2.2.2.2는 rsync구동프로그램이 반드시 깔려야 한다.

 

[1.1.1.1의 백업]
rsync -avPz --stats -l -t -e ssh 아이디@1.1.1.1:/.backup/ /.backup/start1/
[1.1.1.2의 백업]
rsync -avPz --stats -l -t -e ssh 아이디@1.1.1.2#100:/.backup/ /.backup/www2/

 

□ cron으로 구성시 백업스크립트작성

백업스크립트작성
의존 프로그램:expect

 

 

 

 

 

 

 

 

 

 


 



※설치
#yum install expect

스크립트 명:wwwbk1.sh

#!/usr/bin/expect -f
## 1.1.1.1
log_user 0
spawn rsync -avPz --stats -l -t -e ssh 아이디@1.1.1.1:/.backup/ /.backup/start1/
expect "password: "
send "비밀번호\n"
log_user 1
interact

## 1.1.1.2(포트가 다른 경우)
log_user 0
spawn rsync -avPz --stats -l -t -e ssh 아이디@1.1.1.2#100:/.backup/ /.backup/www2/
expect "password: "
send "비밀번호\n"
log_user 1
interact


테스트(절차숙지)
1) expect 를 설치하라.
2) /usr/bin/expect -f wwwbk1.sh <---이렇게 테스트해보라(에러출력됨)
3) expect
> log_user 0
1
....
exit
이런식으로 expect명령으로 각 줄을 입력 테스트해보라~


□ crontab의 작성
※새벽4시경에
#crontab -e 로 이하를 추가
#remote backup www server 6:00
00 4 * * 5 root /sbin/e2fsck -p /dev/hdb1
01 4 * * 1 root /backupscripts/wwwbk1.sh
01 4 * * 2 root /backupscripts/wwwbk1.sh
01 4 * * 3 root /backupscripts/wwwbk1.sh
01 4 * * 4 root /backupscripts/wwwbk1.sh
01 4 * * 5 root /backupscripts/wwwbk2.sh
01 4 * * 6 root /backupscripts/wwwbk2.sh
01 4 * * 0 root /backupscripts/wwwbk2.sh


위에 작성한 문서를 wwwbk1.sh 와 wwwbk2.sh로 폴더를 다르게한 후,
월-목 : wwwbk1실행하여 /bk/백업1/
금-일 : wwwbk2실행하여 /bk/백업2/
에 놓아서 안정성을 가중시킨다.

※ 루드권한으로 변환
>su -


※ 일반 유저에서 루트권한으로 전환
>sudo su -


※ SSH접속
>ssh userName@192.168.x.x


※ 파일검색
>find /home -name '검색할단어'


※ 단어검색 : /home 이하의 디렉토리 중 검색대상 제외 단어 및 디렉토리 지정
                        grep -v 단어는 홅따옴표 속에, 디렉토리는 보통의 디렉토리로 지정함
>find /home -type f | gerp -v '/.svn' | gerp -v '/logs' | xarg grep -C1 '검색할단어'
>find /home -type f | gerp -v '/.svn' | gerp -v '/logs' | xarg grep '검색할단어'
>find /home/project/ -type f -print -name '*' | grep -v ./.svn | grep -v ./log | grep -v ./logs | grep -v ./cache | grep -v ./uploads | xargs grep '검색할단어'

※ MySQL 접속 (패스워드 부분은 붙여서 작성)
>mysql -h 192.168.x.x -u root -p1111  DB명


※ MySQL 백업
>mysqldump -h 192.168.x.x -u root -p1111  DB명 > backupName.sql


※ MySQL 리스트어
>mysql -h 192.168.x.x -u root -p1111  DB명 < backupName.sql


※ 압축
>tar zcvf backupFile.tar.gz


※ 압축해제
>gzip -dc fileName | tar xvf
>tar zxvf fineName


※ 심볼릭 링크
>ln -s targetPass seltPass


※ svn 프로잭트 생성
>svnadmin create /var/www/svn/프로잭트명 --fs-type fsfs
>chgrp -R 775 프로잭트명
>chmod -R 755 *


※ svn 상세
http://mindseye.tistory.com/entry/svn-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95
http://cafe.naver.com/devctrl.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=5189

※ svn 정보보기
>svn info
>svn stat

※ svn 에 접속
>http://192.168.x.x/repos/프로잭트명

※ svn checkout
>svn checkout svn://192.168.x.x/repos/프로잭트명 ./

※ svn commit
>svn ci /home/ -m ''

※ svn 특정 디렉토리 제외한 commit
>svn propedit svn:ignore ./cache/


※ ipconfig
>/sbin/ifconfig


※ 개방된 IP & port 리스트
>netstat -tlpn


※ 데몬재기동
>service 서비스명 restart


※ 아팟치 재기동
>/etc/rc.d/init.d/httpd reload


※ 디스크용량 확인
>df
or
>du -h


※ path 패스 걸기
>/home/donz/.bash_profile을 수정


※ MySQL 외부접속 허용
MySQL실행 후 mysql DB의 user테이블에 host를 추가
>service mysql restart
커밋 후, 반드시 MySQL을 재기동 해야 적용됨... 아놔... 재기동을 몰라 반나절 해맴


※ 서버 기동시 아파치 자동기동
>chkconfig httpd on


※ 서버 기동시 아파치 자동기동 해제
>chkconfig --del httpd


※ 복수의 ip 어드레스 네트워크셋팅
------------------------------
(/etc/sysconfig/network-scripts/ifcfg-eth0:0)
DEVICE=eth0:0
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.202
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes

(/etc/sysconfig/network-scripts/ifcfg-eth0:1)
DEVICE=eth0:1
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.203
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes


ip 셋팅 후 리붓할 것


※ 리붓 하지않고 네트워크 리셋하기
>/etc/init.d/network stop
>/etc/init.d/network restart
>/sbin/ifconfig eth0 down

일단 설치에 참고할 PHP 다운로드

Google Analytics Now More Powerful, Flexible And Intelligent에서 다음을 다운로드
「download snippet instructions」의 링크부분

파일에 적용

다운로드한 파일 중 ga.php를webroot폴더에 복사

소스부분 추가

다운로드한 파일 중php1.snippet를 에디터로 열고, 전체 카피한 후, 자신의 모바일용 레이아웃의 제일 위에 붙여넣기

$GA_ACCOUNT = “ACCOUNT ID GOES HERE”;

복사 부분중, UA-XXXXXXXX-N 를 MO-XXXXXXXX-N 로 바꿔서 「ACCOUNT ID GOES HERE」의 부분에 입력

복사 부분중 $GA_PIXEL = “ga.php”; 을 ”/ga.php” 로 변경

다음으로 php2.snippet 파일을 에디터로 열고 전체 복사 후, </body>의 태그 바로 윗 부분에 붙여넣기
php2.snippet 는 img태그를 출력하고 있으므로 body 태크 바로 위에 붙여야 합니다.

여기부터 중요!

<?php
   $googleAnalyticsImageUrl = googleAnalyticsGetImageUrl();
?>
<img src=”<?= $googleAnalyticsImageUrl ?>” />

<?php
   $googleAnalyticsImageUrl = googleAnalyticsGetImageUrl();
?>
<img src=”<?php echo $googleAnalyticsImageUrl; ?>” />

로 변경함
이게 문제였던것 같음. PHP버전이 문제였나보다.

이것으로 성공!


(1) JDK 설치

(2) Apache WebServer 설치 : apache_2.2.3-win32-x86-no_ssl.msi

(3) Apache Tomcat 설치 : apache-tomcat-5.5.20.exe

(4) Mod_JK 설치 : mod_jk-apache-2.2.3.so

http://www.uniontransit.com/apache/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.19/

에서 다운로드하여 Apache WebServer가 설치된 디렉토리내의 Modules 디렉토리에 저장

(예)C:/_SERVER/Apache Software Foundation/Apache2.2/modules/mod_jk-apache-2.2.3.so

(5) Apache웹서버와 Tomcat 연동을 위한 설정

A. Tomcat 환경설정파일인 Server.xml 파일을 열고, <Engine ...> </Engine> 내에

다음을 추가하자.

      <Engine name="Catalina" defaultHost="localhost">

       ...

      <Listener className="org.apache.jk.config.ApacheConfig" modJk="C:/_SERVER/Apache Software Foundation/Apache2.2/modules/mod_jk-apache-2.2.3.so" />

       ...

      </Engine>

B. Tomcat을 Restart 시키면 conf 디렉토리밑에 다음 디렉토리와 파일이 생성됨을 확인할 수 있다.

C:\_SERVER\Apache Software Foundation\Tomcat 5.5\conf\auto\

C:\_SERVER\Apache Software Foundation\Tomcat 5.5\conf\auto\mod_jk.conf
C:\_SERVER\Apache Software Foundation\Tomcat 5.5\conf\jk\

C. 생성된 mod_jk.conf 파일을 새로 생성된 디렉토리 jk 밑으로 복사한다.

C:\_SERVER\Apache Software Foundation\Tomcat 5.5\conf\jk\mod_jk.conf

 

D. Apache 환경파일인 httpd.conf의 하단에 다음을 추가한다.

Include "C:/_SERVER/Apache Software Foundation/Tomcat 5.5/conf/jk/mod_jk.conf"

E. 도스명령문창에서 다음과 같이 환경파일을 체크한다.

C:\_SERVER\Apache Software Foundation\Apache2.2\bin\httpd.exe -t

성공이라고 뜨면 Apache WebServer를 (재)구동시켜서 아래 URL을 접속하여 잘 동작되는지

JSP 샘플 프로그램을 돌려 본다.

http://127.0.0.1/jsp-examples/

その他 grep "hhh" f1 特定の文字列hhhを含む行を検索しその行を表示する。> f2でファイルになり、>> f2で追加。例:sed_grep.sh
sed -e "s/jjj/jjk/g" f1 > f2 ファイル f1の中の文字列jjjをjjkに変えてファイルf2を作る。sed -e "s/jjj/jjk/g" f1 > temp | mv temp f1で同じファイルになる。jjkの代わりにshell変数(X=jjkとしておく)なら"s/jjj/$X/g"とできるようだ。例:sed_grep.sh
tail -f XXX XXXファイルの最後の数行を表示します。-f(最後に追加される文字をリアルタイムに表示)
fs lq (lxplus) disk quotaを表示してくれる。(2006.10.5 naitou<---ATLAS Getting an Account
ssh-keygen -t rsa ~/.ssh/id_rsa.pubと~ /.ssh/id_rsaにSSH public/private keysをペア生成する。passphraseを入れ忘れないこと。SSH key使用時に要求される。'-t rsa1' optionで作ったら~/.ssh/identity.pubと~/.ssh/identityに出来る。SSH1が標準ならssh -2 が必要かも。X window使用時:ssh -X(CERNのroot使うときはssh -Y)で入るとDISPLAYが自動的にクライアント側でセットされる。
setenv LANG C 文字化けが出たら試す。export LANG=C in bash??
top show the CPU status
echo $SHELL 現在のシェルを調べる。csh, bashで変えられる。bash,zshではecho $SHELL(大文字)とする。
ar tv libc.a List functions in libc.a (v for full inf, t for print), ar=archive
Xウインドウ xinitまたはstartxで始める。>twm -f .twmrc &でwindow managerを起動すると画面を動かせて便利。
grep xxx filename 文字列xxxを含む行を探す。 例 grep a.dat src/*
find . -name test.c -ls filename test.cを下のdirectoryで探す。find . -name "*.html" -print
kterm & open the k-term window
jobs list current procedures
kill %2 kill the process [2]
which C コマンドCのパスを表示する。whatis、whereis
history show the previous events
alias ll 'ls -l' コマンド ls -l のエイリアス(別名)ll をつくる。unaliasで消す。
du -k ファイルなどの大きさをKByte単位で表示する。dfは残りspace?
tar -cvf A.tar XXX XXXをA.tarに圧縮する。tvf=内容リスト, -xvfで展開する。
tar -zxvf A.tar.gz zip圧縮されたarchiveed file A.tar.gzを解凍・展開する。tar zxvf g4tut07-package.tar.gz
directory操作 cd home directoryヘ戻る。cd=change directory。
cd XXX directory XXXに飛ぶ。cd $homeはホームdirectoryへ。
cd ../.. 2つ上のdirectoryに行く。応用はcd ../../XXXXXなど。
cd - ひとつ前のdirectoryへ戻る。
pwd present working directoryを示す。
mkdir XXX 新しいdirectory XXXをつくる。
cp -r A/ B directory AをBにコピーする。-rはrecursive。
rm -rf XXX 中身も一括してdirectory XXXを消す。 (f:聞き返さない)
directoryや
ファイルの
リスト
ls ファイル名をリストアップする。
ls -ltr ファイルの全情報リストを表示。-tは変更時間順、-rは逆順,ls -ltrが時間順で便利
ls -F directoryには/をつけてリストする。
ls -a .ではじまるファイルもリストする。
ls *.f .fで終わるファイルのもリストする。*はワイルド文字。
ファイル操作 mv A B ファイルの名前をAからBに変える。応用:mv f1 f2 f3 dir1/
cp A B ファイルAをBにコピーする。
rm A ファイルAを消す。rm -r directory, rm -rf directory (f:聞き返さない)
less A ファイルAのぺージ表示。viと似た操作。他にcat -n, more。
cat A B > C AとBを足してCをつくる。cat A >> BはAをBにappendする。
diff -c A B ファイルAとBを比較し違いを出力する。
chmod a+r A ファイルAをallがreadできるモードに変更する。
u,g,a=user,group,all;+,-=add,del;r,w,x=read,write,exe, chmod -R とするとそのdirectoryの下すべてに実行する。
ln -s OLD NEW ファイルOLDにsymbolic linkをNEWで張る。
source A ファイルAを実行する。例 source .cshrc
gzip -cd XX.gz 圧縮されたXX.gzファイルを解凍する。
ファイル転送 ftp xxx.kek.jp ふつうのファイル転送につかう。
scp 例 scp -r atlas.icepp.s.u-tokyo.ac.jp:"directoryの名前" ./
例 time scp -rc blowfish "atlas.icepp.s.u-tokyo.ac.jp:/lxatlsv1/data01/-----/bg/qq*.ntpl" ./
scpは、シンボリックリンクを見つけるとその先の本体もコピーする。コピーしたファイルの日付は今のもの。blowfishは早くするため(by 佐々木節)
rsync 例 rsync -avz -e ssh kondo@atlas.cern.ch:/home/kondo/xxxx .
rsyncは、シンボリックリンクはリンクのみコピー。コピーしたファイルの日付はもとのまま。rsync -avzの最後のzオプションは送るときに圧縮する。 http://www.infoscience.co.jp/technical/rsync/resources.htmlからrsyncを持ってくる。
エディター vi A ファイルAをviでeditする。ZZ=save, :q!=quit:→vi表
emacs A, mule A ファイルAをemacsでeditする。cntl-x,cntl-cでquit.cntl-x,cntl-sでsave. cntl-Oで日本語。
less A Aの内容を見る。最後ページにはG(大文字)で飛ぶ。cntl_b前ページ, cntl_f、後ページに移動。検索あり/xx(順方向) ?xx(逆)。
プリントする lpr -P40-4d-cor A ファイルAをプリンター40-4d-corに出力する。
lpq プリンターのqueueをみる。
lprm 451 print queueのprintjob#451をキャンセルする。
more /etc/printcap 繋がっているプリンターをリストする。
lpstat status of printers
環境変数 printenv 環境変数を表示する。
setenv XXX yyy 環境変数 XXX を yyy にセットする。
PATH コマンドのパス順路。トップから順に探す。
PATHの追加 setenv /cern/pro/bin:$PATH でpawが使えるようになる。
DISPLAY setenv DISPLAY A:0.0表示をターミナルAにセットする。
起動と終了 vi +N file.name N行目にカーソルを移動して起動する。
vi +/XXX file.name file中の検索文字列XXXを含む行にカーソルを移動して起動する。
:q! quit(saveなし)。
ZZ saveして終わる。
:w saveする。:wq(save and quit) :w file(fileでsave。:wq file):wq! file(overwriteのとき)
vi -r ネットワークが切れたときの復活(viがmail 出してくれる)
日本語表示文字化け :set encoding=japanとすればいい。ホームディレクトリに.vimrcというファイルを作成して、set encording=japan(コロンなし)と書いておけば自動的になる。
2つのモード i 直前でインサートモードに移る。自由に書き込みする。
a 直後でインサートモードに移る。自由に書き込みする。
[esc] コマンドモードに戻る。
I, A I(行の最初に挿入)、A(行の最後に挿入)
行の操作 G 最後のラインに飛ぶ。
1G トップラインに戻る。
nG n行目のラインに飛ぶ。
dd 1行を消してbufferに入れる。n行分消す時はndd。
P bufferに入ってる行を直前の行に挿入する。
J 次の行と結合する。
u 直前のコマンド操作を取り消して元に戻る。
文字操作 x 今の文字を消す。
r 今の文字を次にタイプする文字で置き換える。
D 今の文字を含んで行末まで消してbufferに入れる。
X 直前の1文字を消す。
行内操作 $ 行の最後の文字に飛ぶ。
0 行の最初の文字に飛ぶ。
検索・置換・削除 /XXXXX 文字列XXXXX(returnまで)を下向方向で探す。
/[returmn] 前回と同じ文字列を再度下向方向で探す。
?XXXXX 文字列XXXXX(returnまで)を上向方向で探す。
:%s/old/new/gc 文字列AAAをBBBに置き換える。%は文全体(1,$)と同じ。(n,m)でもよい。%がなければ1行内のみ。gは行内全てでgなければ最初の項のみ。gcのcは許可願いか。例 :.,.+3s/old/new/g :95,120s/old/new/g
ma then :'a,.d 最初の行をmaでマークしておき、最後の今の行(.)までを一括消去しbufferに入れる。

PHP 날짜 함수 정리 ( Write By Yaku)

 

오늘로부터 5일 후

echo date("Y-m-d",strtotime("+5 day"));
다음은 오늘로부터 3일 전이 되겠습니다.
echo date("Y-m-d",strtotime("-3 day"));

 

오늘로부터 6주 전

$calyoil = 5 - date("w"); //현재 요일에서 금요일을 구하기 위한 가감
$needday = strtotime("-6 week"); // 6
주전
$needday = date("Y-m-d" , strtotime("$calyoil days",$needday));
echo $needday;

 

윤년

if(29==date(t,mktime(0,0,0,2,1,$year))
echo "
윤년";
else echo "
윤년아님";

 

--mktime(,,,,,년도)--

 

그 달의 마지막 날짜  가지고 오기

$lastday = date(t,mktime(0,0,1,$month,1,$year));

 

금주의 시작일 구하기

$now=date("w");

$m=$now-1;

$start=date("Y-n-d",strtotime("-$m day"));

 

 

 

 

JS 날짜 정리 ..

Month ( 0 ~ 11까지 정의 된다 )  현재월을 표시하려면 month -1 하여라 ..

 

날짜 객체  생성  var today = new Date( , , ) ;

날짜 년 가지고 오기 today.getYear();

날짜 월 가지고 오기 today.getMonth();  ( 현재월 가지고 올경우  +1 )

날짜 일 가지고 오기 today.getDate();  (day 가 아니 getDate 이다)

날짜 월 짜리수 맞추기 위한 if = parseInt() < 10 ? - + parseInt() : parseInt();

 

 

 

Mysql 날짜 함수

select date_sub(now(), interval 5 day);
5
일후..
select date_add(now(), interval 5 day);
5
일전...

+ Recent posts