실전에 사용한 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

+ Recent posts