MySQL Log 종류

리눅스 2016. 4. 14. 08:43

http://crowz.co.kr/60

 

<MySQL Log 종류>


1. 에러로그 - Error_log

2. 제너럴 로그 - General_log

3. 슬로우쿼리 로그 - Slow query_log

4. 바이너리 로그 - Binary log

5. 릴레이 로그 - Relay log



1. Error log 

- /etc/my.cnf에 따로 지정을 해주지 않으면 보통 /var/log/mysqld.log 로 저장

- /etc/my.cnf 에 "log-error=경로.log" 로 지정 가능

- 또는 mysql data 디렉터리에 .err 형식으로 저장

- MySQL 구동과 모니터링, Query 에러에 관련된 메세지를 포함



2. General log 설정 ( mysql command history log )

 

- MySQL에서 실행되는 전체 쿼리에 대하여 General log를 활성화 시켜서 저장 가능

- General log를 활성화하면 MySQL이 쿼리 요청을 받을 때 곧 바로 General log에 기록


* 실시간으로 general log 활성화하기 ( mysqld 재시작 없이 )

# mysql -u root -p

:

 - general log 상태 확인


mysql> show variables like 'general%';

mysql> show variables where Variable_name in ('version', 'log', 'general_log');
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| general_log   | OFF        |
| log           | OFF        |
| version       | 5.1.73-log |
+---------------+------------+
3 rows in set (0.00 sec)

 

- general log 활성화

mysql> set global general_log = ON;

mysql> set global general_log = 1;
Query OK, 0 rows affected (0.01 sec)


mysql> show variables where Variable_name in ('version', 'log', 'general_log');
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| general_log   | ON         |
| log           | ON         |
| version       | 5.1.73-log |
+---------------+------------+
3 rows in set (0.00 sec)

 

- general log 비활성화

mysql> set global general_log = OFF;


mysql> quit

 

* mysql data 디렉터리로 이동


# cd /usr/local/mysql/data

# tail -f localhost.log &
[1] 1983
# /usr/local/mysql/libexec/mysqld, Version: 5.1.73-log (Source distribution). started with:
Tcp port: 3306  Unix socket: /tmp/mysql.sock
Time                 Id Command    Argument
150122  5:58:31     1 Query     show variables where Variable_name in ('version', 'log', 'general_log')
150122  6:00:04     1 Quit

 

# touch /var/log/mysql_history.log

# chown mysql.mysql /var/log/mysql_history.log


- general log 영구적으로 적용 및 파일 생성

# vi /etc/my.cnf

general_log = 1

general_log_file = /var/log/mysql_history.log

 

# /etc/init.d/mysqld restart

 

 

 

 

3. Slow Query 설정

 

- slow query log는 long_query_time에 설정된 시간 이상을 소요한, 정상적으로 완료된 쿼리를 모두 기록

- general log는 query 요청을 받고 바로 입력하기 때문에 에러가 발생한 쿼리도 입력이 되지만, slow query log는 쿼리가 완료된 실행된 시간 까지 입력하기 때문에 실행 도중 에러가 발생한 쿼리에 대해서는 로그로 남기지 않는다.

- MySQL 프로세스가 CPU/Memory 자원을 비정상적으로 많이 사용하여 서버의 load average가 급증하거나, 웹페이지 로딩 속도가 현저히 지연될 경우 확인

* slow 관련 설정은 Dynamic으로 set global 명령으로 재시작 없이 수정 가능합니다. 

 

< slow 로그 설정 확인 방법 >

 

mysql> show variables like 'slow%'; 
mysql> show variables like 'long%'; 

mysql> show variables like 'log%'; 

 

 

 

< slow 로그 ON, OFF >

 

> set global slow_query_log = ON;

> set global slow_query_log = OFF;


# vi /etc/my.cnf

slow_query_log_file = /datadir/serverhostname-slow.log

 

 

 

< 롱 쿼리 타임 설정 >


> set global long_query_time = 10;


# vi /etc/my.cnf

long_query_time = 10.000000

-> 10초 이상 query 를 기록하는 설정

위의 의미는 쿼리타임이 10초를 초과하는 쿼리에 대해 /temp/mysql-slow.log 파일에 로그를 남기라는 의미 입니다.

 


<로그 출력 타입 설정 >

 

log_output = FILE

 

 

< 인덱스를 사용하지 않는 쿼리 추출용 옵션 변수 ON, OFF >

 

log_queries_not_using_indexes = OFF

 

 

 < 파일 내용 >

Time : 쿼리가 종료된 시간

Query_time : 쿼리가 실행된 시간

Lock_time : MySQL 엔진 레벨의 테이블 잠금 대기시간 ( 테이블 Lock 걸린 시간 )

Row_sent : 클라이언트로 보낸 실제 처리 건수 ( 쿼리 처리 결과 Row 수 )

Row_examined : 쿼리 처리를 위해 접근한 레코드 건수 ( 쿼리 처리 대상의 Row 수 )

 

< slow query 설정 >


# touch /var/log/slow-query.log
# chown mysql.mysql /var/log/slow-query.log

# vi /etc/my.cnf

 

[mysqld]

 

    log-slow-queries = /usr/local/mysql/var/mysql-slow.log

    long_query_time = 3    --> 위 내용은 쿼리 타임이 '3초'를  초과 하는 쿼리에 대해 /usr/local/mysql/var/mysql-slow.log 파일에 기록 한다는 뜻입니다.


    log-slow-queries = 로그 파일명

    long_query_time = 쿼리 타임

 


# /etc/init.d/mysqld restart


my.cnf에 설정 및 mysql을 리스타트 한 뒤 운영 하다 보면 slow-query-log가 남게 됩니다.

쿼리의 분석 방법은 EXPLAIN 을 이용하여 분석을 하면 됩니다.

 


explain 을 사용하여 체크

 

(사용법)
      EXPLAIN tbl_name
   or EXPLAIN SELECT select_options




< 종합 >

slow_query_log = ON show variables like 'log_output'; set global log_output='FILE'; set global log_output='TABLE'; set global log_output='TABLE,FILE'; 

 

 

* 설정 확인

mysql> show global variables like '%slow%'; | log_slow_queries | OFF | | slow_launch_time | 2 | | slow_query_log | OFF | | slow_query_log_file | /data/dbrepl/m3-31-slow.log | +---------------------+-----------------------------+ mysql> show global variables like '%long%'; +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ mysql> set global log_slow_queries = 1; mysql> show global variables like '%slow%'; | log_slow_queries | ON | | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | /data/dbrepl/m3-31-slow.log | +---------------------+-----------------------------+ mysql> show global variables like '%log%'; mysql> show variables where Variable_name in('version','log','general_log','general_log_file','log_ourput'); +------------------+-----------------------------------+ | Variable_name | Value | +------------------+-----------------------------------+ | general_log | OFF | | general_log_file | /data/dbrepl/m3-31.log | | log | OFF | | version | 5.1.56-ndb-7.1.13-cluster-gpl-log | +------------------+-----------------------------------+ mysql> set global general_log = 1; mysql> show variables where Variable_name in('version','log','general_log','general_log_file','log_ourput');

| general_log | ON | | general_log_file | /data/dbrepl/m3-31.log | | log | ON | | version | 5.1.56-ndb-7.1.13-cluster-gpl-log | +------------------+-----------------------------------+

show variables like 'log_output'; set global log_output='FILE'; set global log_output='TABLE'; set global log_output='TABLE,FILE';
select count(*) from mysql.general_log;
set global max_connections=200;
show variables like '%CONNECT%';
show processlist\G



4. Binary log & Relay log

- MySQL 쿼리를 수행하면서 쌓는 로그, 추 후 트랜잭션하여 시점 복구 등을 수행하는 역할

- 일반적으로 바이너리 로그는 마스터에서, 릴레이 로그는 슬레이브에서 생성되며, 포맷과 내용은 동일

- slave가 또 다른 slave의 Master가 되어야 할 경우   log_slave_updates   옵션을 ON으로 설정하여 slave에서 바이너리 로그가 생성되도록 설정

- 바이너리 로그는 mysqlbinlog 프로그램을 이용하여 사용자가 읽을 수 있는 파일로 변환할 수 있다.

ex) 

mysqlbinlog --database=DB명 mysql-bin.000001 > 생성파일명.sql

[몇가지 옵션]
--database=DB명
--start-datetime="2014-09-09 10:00:00" --stop-datetime="2014-09-10 10:00:00"
--start-position=100 --stop-position=200


< 바이너리 파일을 통한 쿼리 실행 >


- 바이너리 파일을 MySQL에서 실행


mysqlbinlog mysql-bin.000001 | mysql -u root -p
sql 파일로 생성 한 뒤 실행
mysqlbinlog mysql-bin.000001 > test.sql
SOURCE test.sql



< bin log 관리 > - Binary log 관리


- bin log 설정


# vi /etc/my.cnf

 

log-bin=/home/mysql_log/bin_log/bin                 # 바이너리 로그 저장 설정 및 저장할 디렉토리 지정
binlog_cache_size = 2M                                     # 바이너리 로그 cache 사이즈 
max_binlog_size = 50M                                     # 바이너리 로그 최대 파일 사이즈 
expire_logs_days = 10                                         # 보관기간



- Binary log 삭제 : MySQL Binary Log 는 add, delete, insert, update 등의 query 가 저장되어 있는 파일로서 MySQL 을  설치하게 되면 기본적으로 MySQL Binary Log 가 생성됩니다.

 Binary Log 를 쌓지 않아도 되는 MySQL 구동 환경에서는 Binary Log 를 삭제하므로, 디스크 공간 확보 가능합니다.


ex1) MySQL Replication 환경에서 지우기

 - MySQL Replication MASTER 서버
    shell> mysql -u root -p
    mysql> RESET MASTER;


  - MySQL Replication SLAVE 서버
    shell> mysql -u root -p
    mysql> RESET MASTER;



ex2) MySQL Binary Log sequence number 또는 특정 일자로 지우기

> show binary logs;

| mysql-bin.000182 | 1073741883 |
| mysql-bin.000183 | 1073741988 |
| mysql-bin.000184 | 1073741999 |
| mysql-bin.000185 | 1073741927 |
| mysql-bin.000186 | 1073742098 |


> purge master logs to 'mysql-bin.000186';                    --> 해당 파일 이전의 파일들을 모두 삭제


> set global expire_logs_day=2;                                    --> 바이너리 로그를 저장할 주기 설정

ex3) mysqladmin flush-logs 명령어를 통해서 지우기
 shell> mysqladmin -u root -p flush-logs

ex4) MySQL Binary Log 생성을 방지 하는 방법
/etc/my.cnf 파일에서 아래 라인을 주석 처리
  log-bin

ex5) MySQL Binary Log를 특정 1주일까지만 생성 및 보관하기

  /etc/my.cnf 파일에서 아래 라인을 추가
  expire_logs_days = 7




6. logrotate 활용하여 로그 관리 하기

 

# vi /etc/logrotate.d/mysql_general

 

/var/log/mysql_history.log {
    weekly
    rotate 3
    compress
    missingok
    notifempty
    sharedscripts
    create 660 mysql mysql
    postrotate
        /usr/bin/mysqladmin flush-logs
    endscript
}

 

 

 

# vi /etc/logrotate.d/mysql_slow

 

/var/log/mysql-slow.log {
    weekly
    rotate 3
    compress
    missingok
    notifempty
    sharedscripts
    create 660 mysql mysql
    postrotate
        /usr/bin/mysqladmin flush-logs
    endscript
}

 

# /etc/init.d/crond restart

# chkconfig --list | grep crond

# chkconfig crond on

# ps -ef | grep cron

'리눅스' 카테고리의 다른 글

VIM 환경설정  (0) 2016.03.30
pam_tally2 확인 및 초기화  (0) 2016.03.30
awk 필드 변수, 빌트인 변수  (0) 2016.03.28
쉘 스크립트 문자열 조작  (0) 2016.03.28
리눅스 네임서빙 우선순위 결정 : /etc/host.conf  (0) 2016.03.03
Posted by 캐논볼
,

VIM 환경설정

리눅스 2016. 3. 30. 16:30

http://jkstory-textcube.blogspot.kr/2013/11/vim.html

 

우분투에서 vim 에디터를 이용하여 c 프로그래밍을 공부 중인데, vim 에서 탭 간격 설정 및 자동 들여쓰기 설정을 변경하면 좀 더 가독성 높은 환경에서 공부를 할 수 있다.
설정할 수 있는 것은 많지만 대충 몇 가지만 해줘도 c 공부를 하는데는 무리가 없다.

먼저 터미널을 연다.

  vim ~/.vimrc 

그리고 i 를 눌러 편집모드로 들어간 뒤 다음을 그대로 입력한다.

set ts=8
set sw=4
set sts=4
set smartindent
set cindent

: 를 누른 후 wq로 저장하고 밖으로 나온다.

이후에 vim 에디터를 열면 자동 들여쓰기 및 탭 간격이 변화한 것을 확인할 수 있다.

-------
ts (tap stop) : 문서에 있는 '\t' 문자를 몇 칸으로 보여줄지 결정하는 변수
sw (shift width)
sts (soft tab stop) : Tap 키를 눌렀을 때 표시되는 간격을 지정해 주는 변수


 

/////////////////////////////////////////////////////////////////////////////

 

 

 

http://jenemia.tistory.com/1

 

 

vi ~/.bashrc  해서 들어가서

alias vi='vim' 를 추가하고 저장하여

source ~/.bashrc 명령어 실행

 

그리고 홈디렉토리에서 .vimrc파일을 만들면된다.

명령행에는 ~ 인곳.. 또는 그냥 cd 라고 치면 나오는 디렉토리가

홈디렉토리이다.

 

#.vimrc 내용
set number " 라인번호를 붙임
set tabstop=4 " 탭문자는 4컬럼 크기로 보여주기
set shiftwidth=4 " 문단이나 라인을 쉬프트할 때 4컬럼씩 하기
set autoindent " 자동 들여쓰기
syntax on " 적절히 Syntax에 따라 하일라이팅 해주기
set background=dark " 이건 터미널 모드에선 영향이 없다.
set cindent " C 언어 자동 들여쓰기
set showmatch       " 매치되는 괄호의 반대쪽을 보여줌
set title           " 타이틀바에 현재 편집중인 파일을 표시
set textwidth=79 " 만약 79번째 글자를 넘어가면 다음행으로

set smartindent " 좀더 똑똑한 들여쓰기를 위한 옵션이다.

set autoindent " 자동으로 들여쓰기를 한다.

set ts=4 "탭 간격 조절

그외 내가 하는거

set se=4

syntax enable

highlight Comment term=bold cterm=bold ctermtg=2

이건 주석의 색깔을 지정. 2는 초록


파일 첨부에는 vi 편집기 단축키와

GDB 디버깅 단축키를 첨부하였다.

제가 리눅스 코딩할때는 VMware로 실행하여 하였기 때문에 왼쪽화면엔 VMware를,

오른쪽에는 빠른 코딩이 가능 하도록 이 두 텍스트 파일을 띄어 놓고 했다.

도움이 됫길 바랍니다.

'리눅스' 카테고리의 다른 글

MySQL Log 종류  (0) 2016.04.14
pam_tally2 확인 및 초기화  (0) 2016.03.30
awk 필드 변수, 빌트인 변수  (0) 2016.03.28
쉘 스크립트 문자열 조작  (0) 2016.03.28
리눅스 네임서빙 우선순위 결정 : /etc/host.conf  (0) 2016.03.03
Posted by 캐논볼
,

http://namedit.tistory.com/archive/201409

 

저는 CentOS를 사용하겠습니다.

버젼은 6.4 입니다.


리눅스는 PAM : Pluggable Authentiaction Module 이라는

장착식 인증 모듈을 사용하고 있습니다.

이 모듈은 리눅스 시스템의 인증을 제공합니다.

자세한 내용은 http://se.uzoogom.com/131 을 참고하시길 바랍니다.


일단 vi 를 사용하여 /etc/pam.d/system-auth 을 엽니다.



  1. # auth 문단의 첫번째 위에 아래 문장을 추가합니다.
  2. auth       required    pam_tally2.so onerr=fail deny=3 reset
  3. # pam_tally2가 PAM의 인증 Module 중 하나이고 3번 틀리면 접속을 거부하고
  4. # 관리자에 의해 리셋 가능하다는 뜻입니다.
  5. # 이제 account 문단의 첫번째 위에 아래 문장을 추가합니다.
  6. account    required    pam_tally2.so onerr=fail
  7. # ESC 키를 눌러 Insert Mode에서 빠져 나온 후 :wq 를 입력하여 쉘로 돌아옵니다.




이제 일반사용자로 로그인할때 3번 틀려보겠습니다.





Account locked due to 4 failed logins 라는 메세지와 함께

정상적인 비밀번호를 입력하여도 접속이 불가능합니다.


이제 이 Lock을 풀려면 Root에서 풀어줘야합니다.


pam_tally2 라는 명령어를 사용하면 접속에 실패한 사용자를 볼 수 있습니다.



Login           Failures      Latest failure              From

사용자         실패횟수      마지막 시도한 시간      터미널 번호


이제 Unlock을 하기위한 명령어를 알아봅니다.

pam_tally2 --user 사용자이름 --reset



Reset이 완료되었습니다.

이제 다시 접속해봅니다.



정상적으로 로그인이 되었습니다.

'리눅스' 카테고리의 다른 글

MySQL Log 종류  (0) 2016.04.14
VIM 환경설정  (0) 2016.03.30
awk 필드 변수, 빌트인 변수  (0) 2016.03.28
쉘 스크립트 문자열 조작  (0) 2016.03.28
리눅스 네임서빙 우선순위 결정 : /etc/host.conf  (0) 2016.03.03
Posted by 캐논볼
,
http://zetawiki.com/wiki/Awk_%ED%95%84%EB%93%9C_%EB%B3%80%EC%88%98,_%EB%B9%8C%ED%8A%B8%EC%9D%B8_%EB%B3%80%EC%88%98
 
awk Field Variables
awk 필드 변수 목록
awk Built-in Variables
awk 빌트인 변수 목록

awk 필드 변수 ★★★[편집]

  • $0 → 모든 필드 (레코드 값 그대로)
  • $1 → 첫번째 필드
  • $2 → 두번째 필드
  • $(NF-2) → 마지막 전전 필드
  • $(NF-1) → 마지막 전 필드
  • $NF → 마지막 필드

awk 빌트인 변수[편집]

  • ARGC - 명령 인자 수 ★
  • ARGIND
  • ARGV - 명령 인자 배열 ★
  • BINMODE
  • CONVFMT - 숫자변환 형식
  • ENVIRON - 환경변수 배열
  • ERRNO
  • FIELDWIDTHS
  • FILENAME - 현재 파일명 ★
  • FNR - (현재 파일 내) 현재 레코드 번호 ★
  • FS - 구분자 정의(기본값은 공백문자, 정규식 사용가능) ★★
  • IGNORECASE
  • LINT
  • NF - 레코드 필드 수 ★★
  • NR - 현재 레코드 번호 ★★
  • OFMT - 숫자 출력 형식
  • OFS - 출력 필드 구분(기본값은 빈 문자열) ★
  • ORS - 출력 레코드 구분(기본값은 개행문자) ★
  • PROCINFO
  • RLENGTH - 검색된 문자열의 길이 ★
  • RS - 입력 레코드 구분(기본값은 개행문자) ★
  • RSTART - 검색된 문자열의 첫부분 ★
  • RT
  • SUBSEP - 다중 서브스크립트 구분(기본값은 034[1])
  • TEXTDOMAIN

같이 보기[편집]

주석[편집]

  1. 이동 아스키코드 034는 파일구분자

참고 자료[편집]

'리눅스' 카테고리의 다른 글

VIM 환경설정  (0) 2016.03.30
pam_tally2 확인 및 초기화  (0) 2016.03.30
쉘 스크립트 문자열 조작  (0) 2016.03.28
리눅스 네임서빙 우선순위 결정 : /etc/host.conf  (0) 2016.03.03
tcpwrapper iptable 차이  (0) 2015.10.05
Posted by 캐논볼
,

http://blog.daum.net/_blog/BlogTypeView.do?blogid=0K6Pu&articleno=6271130&_bloghome_menu=recenttext

 

1. substring  함수

 

 

 ${var:start:length}

    var : 변수명

    start : 변수 값인 문자열로부터 substring 기능을 수행할 시작 위치 인덱스 번호로써 0부터 시작

    length : 추출할 문자열 길이, length를 서술하지 않으면 start로 시작하는 나머지 전제 문자열을 추출한다.

 

위 함수(기능)는 POSIX 기준인 본쉘(sh)에서는 지원하지 않고 콘쉘 및 배쉬쉘에서 지원하는 기능이다. 보편적인 프로그래밍 언어(또는 인터프리터)에서 제공하는 함수인 substring의 기능을 수행하는 것으로써 문자열의 일부분을 추출한다. 원본 문자열(var의 값)은 변경하지 않는다.

 

예제)

 

1   $ var="abcdef"

2   $ a=${var:0}

3   $ echo $a

4   abcdef

5   $ a=${var:0:3}

6   $ echo $a

7   abc

8   $ a=${var:3:0}

9   $ echo $a

10

11 $ a=${var:3:1}

12 d

 

 

 

2. cut 시스템 호출

 

 

 -c 옵션    단순 substring 함수와 동일한 기능으로 인덱스가 0부터 시작하지 않고 1부터 시작하는 것이 다르다.
 -f 옵션    필드 구분자(delimitr)를 지정하여 문자열 중 특정 필드를 추출한다.

 

cut은 /usr/bin 등의 디렉토리에 존재하는 실행프로그램으로써 보편적으로 주어진 입력(파일 또는 표준입력)에서 특정 필드 또는 컬럼을 추출하는 프로그램이다. 이러한 시스템 호출을 통한 문자열 조작은 cut 뿐만 아니라 sed, awk를 이용하여 수행될 수 있다. 위에 열거한 -c, -f 옵션 외에도 다양한 기능을 갖고 있으나 여기서는 -c, -f 옵션에 대하여 간단한 예를 들어 설명한다.

 

예제) cut -c

 

1  $ echo abc defghi | cut -c1

2  a

3  $ echo abc defghi | cut -c1-5

4  abc d

5  $echo abc defghi | cut -c2-5

6  bc d

 

${var:start:length}와 다르게 -c의 뒤에 붙는 시작 위치 인덱스 번호가 0-base 인덱스가 아닌 1-base 인덱스이고 또한 두 번째 인덱스 번호는 추출할 문자열 길이가 아닌 컬럼 인덱스 번호가 된다. 즉, ${var:start:length}는 from-length이고 cut -c는 from-to이다.

 

예제) cut -f

 

1  $ echo abc defghi | cut -f1

2  abc defghi

3  $ echo abc defghi | cut -f1 -d" "

4  abc

5  $ echo abc defghi | cut -f2 -d" "

6  defghi

7  $ echo abc defghi | cut -f2

8  abc defghi

 

특정 필드를 추출하며 -d 옵션으로 필드 구분자를 지정한다. 따로 필드 구분자를 지정하지 않으면 탭 문자를 기본 필드 구분자로 처리한다. 7번 라인에서 필드 구분자가 탭 문자이므로 -f2에 해당하는 두 번째 필드가 공백이어야 할 것 같으나 문자열에서 필드 구분자를 만나지 못하면 필드 추출을 하지 않고 입력된 문자열을 출력한다. 때문에 2번 라인에서 출력된 값 역시 1번 필드를 나타내는 것이 아니고 입력된 문자열에서 필드 구분자를 만나지 못했으므로 입력 값을 그대로 출력한 결과가 되는 것이며, 정상적으로 필드를 찾아서 출력한 것은 3번과 5번 명령 뿐이다.

 

cut은 실행프로그램 호출이므로 유닉스 명령어 cut을 참고하면 자세히 알 수 있을 것이다.

 

 

 

 

 

3. null 비교 문자열 조작 기능

 

 

 ${#var}     변수 var가 가지는 문자열의 길이를 구한다.
 ${var:-word}

     1. 변수 var의 값이 null이 아니면 : var의 값을 반환, var의 값은 변하지 않는다.

     2. 변수 var의 값이 null이면         : word의 값을 반환, var의 값은 변하지 않는다.

 ${var:=word}

     1. 변수 var의 값이 null이 아니면 : var의 값을 반환, var의 값은 변하지 않는다.

     2. 변수 var의 값이 null이면        : word의 값을 반환, var의 값은 word의 값으로 대체된다.

 ${var:+word}

     1. 변수 var의 값이 null이 아니면 : word의 값을 반환, var의 값은 변하지 않는다.

     2. 변수 var의 값이 null이면        : null을 반환, var의 값은 변하지 않는다.

 ${var:?word}

     1. 변수 var의 값이 null이 아니면 : var의 값을 반환, var의 값은 변하지 않는다.

     2. 변수 var의 값이 null이면        : null이면 에러 메시지인 word를 출력하고, 쉘 스크립트를 종료한다.

 

     2번 째 경우이고 word가 생략되었다면 "parameter null or not set" 라는 메시지를 출력하고 쉘 스크립트를

     종료한다.

 

위의 표에서 ${var:+word}의 경우에만 변수 var의 값이 null이 아니면 word의 값을 반환하고, 나머지 경우에는 모드 var를 반환하는 것으로 다른 작업과는 반대의 성향을 보인다.. 그리고 var의 값이 변하는 경우는 ${var:=word}의 작업에서 var값이 null인 경우에만 var의 값이 word로 대체된다.

 

 

 

 

 

4. 일치되는 패턴 제거 후 나머지 문자열 반환

 

 

 ${var%pattern}    끝에서 부터 word와 패턴이 일치하는 var의 최소 부분(첫번째 일치)을 제거하고 나머지를 반환한다.
 ${var%%pattern}    끝에서 부터 word와 패턴이 일치하는 var의 최대 부분(마지막 일치)을 제거하고 나머지를 반환한다.
 ${var#pattern}    처음 부터 word와 패턴이 일치하는 var의 최소 부분(첫 번째 일치)을 제거하고 나머지 부분을 반환한다.
 ${var##pattern}    처음 부터 word와 패턴이 일치하는 var의 최대 부분(마지막 일치)을 제거하고 나머지 부분을 반환한다.

 

위의 설명에서 pattern은 정규식이 아니라 *와 ?의 와일드 카드 패턴이다. %% 또는 ## 의 경우 pattern이 일치하지 않을 때 까지 반복해서 var의 값을 검색하지만 % 와 # 는 처음 일치하는 패턴이 나올 때 까지만 찾는다. 실제로 리눅스(우분투)의 bash에서 테스트를 해본 결과 와일드 카드 *에 대해서는 정상적으로 수행되었으나 또 다른 와일드 카드인 ?에 대해서는 %%와 ##에 의한 반복적인 패턴 매칭이 수행되지 않았다.

 

예제) ${var%pattern}

 

1  $ var="usr/X11R6/bin/startx"

2  $ result=${var%/*}

3  $ echo $var

4  usr/X11R6/bin/startx

5  $ echo $result

6  usr/X11R6/bin

 

이 예제에서 2번째 라인의 와일드카드 패턴인 /* 의 의미가 슬래쉬(/)로 시작하면서 0개 이상 문자열이 뒤따르는 것을 의미하므로 "/startx" 부분이 제거된 값인 "/usr/X11R6/bin"이 변수 result에 치환되었다. 변수 var의 값은 변하지 않았다.

 

예제) ${var%%pattern}

 

1  $ var="usr/X11R6/bin/startx"

2  $ result=${var%%/*}

3  $ echo $var

4  usr/X11R6/bin/startx

5  $ echo $result

6  usr

 

여기서는 2번째 라인에 연산자를 %%로 사용했으므로 뒤에서부터 반복적으로 매칭되는 패턴을 찾아간다. 패턴이 일치하는 "/startx" 가 제거되고 반복적으로 "/bin" 과 "/X11R6" 역시 "/*"의 와일드 카드 패턴에 일치하므로 제거되었고 "usr"은 슬래쉬(/)로 시작하지 않으므로 패턴이 매치되지 않았기 때문에 "/X11R6/bin/startx" 부분이 제거된 값인 "usr"이 변수 result에 치환되었다. 마찬가지로 변수 var의 값은 변하지 않았다.

 

예제) ${var#pattern}

 

1  $ var="usr/X11R6/bin/startx"

2  $ result=${var#/*}

3  $ echo $var

4  usr/X11R6/bin/startx

5  $ echo $result

6  usr/X11R6/bin/startx

 

이 예제는 앞에서 부터 패턴을 찾는데 변수 var의 값이 슬래쉬(/)로 시작하지 않으므로 매치되는 패턴을 찾지 못하므로 변수 var의 값에서 제거되는 부분이 없이 "usr/X11R6/bin/startx"의 값이 그대로 result에 치환된다. 2번째 라인에 연산자를 ##로 사용하여도 처음부터 패턴을 찾지 못하므로 같은 결과가 나온다.

 

예제) ${var##pattern}

 

1  $ var="/usr/X11R6/bin/startx"

2  $ result=${var##/*}

3  $ echo $var

4  /usr/X11R6/bin/startx

5  $ echo $result

6  

 

이번에는 변수 var값의 앞에 슬래쉬(/)를 붙여 보았다. 결과적으로 와일드카드 패턴인 "/*"에 매치되는 "/usr"이 제거되고 반복적으로 "/X11R6", "/bin"과 "/startx"가 제거되어 변수 result에는 null 값이 치환된다. 2번째 라인에서 ##가 아닌 #를 썼다면 result의 값은 "/X11R6/bin/startx"이 된다.

 

예제) 와일드카드 ?를 사용한 경우

 

1  $ var="/aa/aa/aaa/aa/aa"

2  $ result=${var##/??}

3  $ echo $var

4  /aa/aa/aaa/aa/aa

5  $ echo $result

6  /aa/aaa/aa/aa

 

위의 경우에 ## 연산자를 사용했으므로 슬래쉬(/)로 시작하고 두개의 문자가 뒤따르는 문자열을 반복적으로 제거해야 하므로 "/aa/aa/aa"가 제거된 "a/aa/aa"가 결과 값으로 반환되어야 하지만 실제로는 처음 한번 매치되는 패턴인 "/aa"만 제거되었다. 때문에 패턴비교 문자열 조작 기능을 사용할 때는 가급적 와일드카드 ?는 사용하지 않거나 주의를 하여 사용하는 것이 좋을 듯하다.

'리눅스' 카테고리의 다른 글

pam_tally2 확인 및 초기화  (0) 2016.03.30
awk 필드 변수, 빌트인 변수  (0) 2016.03.28
리눅스 네임서빙 우선순위 결정 : /etc/host.conf  (0) 2016.03.03
tcpwrapper iptable 차이  (0) 2015.10.05
htaccess 설정방법  (0) 2015.09.22
Posted by 캐논볼
,
Linux는 분석기 라이브러리를 사용하여 호스트 이름에 해당하는 IP 주소를 확보합니다. /etc/host.conf 파일은 이름 분석 방법을 지정합니다. /etc/host.conf 파일의 항목은 이름을 분석하는 데 사용할 서비스와 순서를 분석기 라이브러리에 알려 줍니다. vi 편집기를 통해 host.conf 파일을 편집하여 다음 라인을 추가하십시오.
# Lookup names through DNS first then fall back to /etc/hosts. 
order bind,hosts
# Machines with multiple IP addresses. 
multi on 
# Check for IP address spoofing.
nospoof on

order 옵션은 서비스 순서를 나타냅니다. 이 샘플 항목에서는 분석기 라이브러리가 먼저 이름 서버에 연결하여 이름을 분석한 후 /etc/hosts 파일을 확인하도록 지정합니다. 모든 서버에서 보다 나은 성능과 보안을 위해서는 분석기 라이브러리가 먼저 이름 서버를 확인하고 bind 파일과 hosts 파일(호스트)을 확인하도록 설정하십시오. 이러한 구성을 적용하려면 DNS 및 BIND 소프트웨어가 설치되어 있어야 합니다.

multi 옵션은 /etc/hosts 파일이 다중 IP 주소를 가질 수 있는지 여부를 판별합니다. 둘 이상의 IP 주소를 가진 호스트는 멀티홈드(multihomed)라고 합니다. 다중 IP 주소가 있다는 것은 호스트에 여러 네트워크 인터페이스가 있다는 것을 의미하기 때문입니다.

nospoof 옵션은 이 시스템에서 스푸핑을 허용하지 않도록 처리합니다. IP 스푸핑은 컴퓨터를 속여서 사용자의 거짓 식별 정보를 믿도록 하는 보안 침입입니다. 이러한 유형의 공격 시, 시스템은 실제 서버처럼 보이도록 설정한 후 종료 시스템, 기타 서버 또는 대용량 데이터 저장소 시스템을 실제화하기 위해 연결과 기타 유형의 네트워크 활동을 실행합니다. 이 옵션은 모든 유형의 서버에서 설정으로 지정되어야 합니다.

'리눅스' 카테고리의 다른 글

awk 필드 변수, 빌트인 변수  (0) 2016.03.28
쉘 스크립트 문자열 조작  (0) 2016.03.28
tcpwrapper iptable 차이  (0) 2015.10.05
htaccess 설정방법  (0) 2015.09.22
MySQL 외부 접속 설정  (0) 2015.09.07
Posted by 캐논볼
,

iptables와 같이 커널레벨의 필터링도구는 L2/L3 수준에서의 차단이고,
tcp wrapper는 application 수준에서의 차단입니다.
따라서, iptables가 먼저 적용되는 것입니다.

간단한 tcp wrapper 대신 복잡한 iptables를 사용하는 이유는 여러가지가 있습니다.

-. tcp wrapper로 차단 가능한 것은 telnet/ftp/sshd/ sendmail등  libwrap를 사용하는 일부의 서비스로 제한됩니다.
    iptables는 모든 서비스에 대한 필터링이 가능합니다.
-. tcp wrapper는 차단/허용밖에는 없으나 iptables는 여러 복잡한 정책설정이 가능합니다.
-. tcp wrapper는 소스IP로만 차단 가능하지만 iptables는 여러 조건으로 차단 가능합니다.

'리눅스' 카테고리의 다른 글

쉘 스크립트 문자열 조작  (0) 2016.03.28
리눅스 네임서빙 우선순위 결정 : /etc/host.conf  (0) 2016.03.03
htaccess 설정방법  (0) 2015.09.22
MySQL 외부 접속 설정  (0) 2015.09.07
리눅스 백업 관련  (0) 2015.08.31
Posted by 캐논볼
,

htaccess 설정방법

리눅스 2015. 9. 22. 13:04

https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=216


이 문서를 다른 웹이나 출판물에 게시할 때는 반드시 출처를 밝혀 주시기 바랍니다.

최종 수정일 : 2001년 8월 23일
글쓴이  :  윤 일 (yunil@dreamwiz.com)

HOW-TO Using apache authorization

아파치 인증 방식은 소규모 사이트나 스터디 그룹에서 유용하게 사용할 수 있는 아파치 자체 인증 방식이다. 규모가 큰 웹 
사이트나 보안에 신경을 써야될 사이트에서는 아파치 인증을 사용하는 것을 신중히 생각해 봐야 된다. 아파치 인증 방식은 
믿을 만한 보안 체계는 이루어 지지 않아 보안상 헛점이 들어 날수도 있다는 것을 명심해야 된다.

아파치 인증을 위해 필요한 httpd.conf 설정을 위해서는 아파치의 httpd.conf에 다음과 같이 설정되어 있어야 된다.
아파치 인증을 할 디렉토리의 상위 디렉토리 설정의 AllowOverride  지시자 설정에 All 또는 AuthConfig등이 설정되어 
있어야 된다. 
지금 부터의 설명은 아파치 웹 문서의 홈 디렉토리인 /usr/local/apache/htdocs 디렉토리에 AllowOverride 설정을 하고 /usr/local/apache/htdocs/yunil 이라는 디렉토리에 아파치 인증을 통해 접근 허가 하도록 설정할 것이다. 

1.  httpd.conf 수정하기
가장 먼저 httpd.conf 의 다음 부분을 수정하자 

<Directory "/usr/local/apache/htdocs">
   Options Indexes FollowSymLinks MultiViews
   
AllowOverride  None  --> 이 부분의 None 을 All로 수정한다. 
   Order allow,deny
     Allow from all
</Directory>
 

위의 부분을 수정했으면 httpd.conf를 저장하고 아파치를  restart 시킨다.
[root@yunil /root]# /usr/local/apache/bin/apachectl   restart

2 . 아파치 인증을 적용할 디렉토리에 .htaccess 파일 만들기
이제 아파치 인증을 적용할 디렉토리로 이동하자. 
여기에서는 /usr/local/apache/htdocs/yunil 디렉토리에 아파치 인증을 적용할 것이다.
[root@yunil /root]# cd /usr/local/apache/htdocs/yunil

/usr/local/apache/htdocs/yunil  디렉토리에   아래와 같은 내용으로 .htaccess 파일을 만들자.
[ .htaccess 파일 내용 ]
AuthType  Basic
AuthName  "루트맨 관리자 로그인"          --->  이 부분은 알아서 마음대로 써주면 된다.
AuthUserFile  /usr/local/apache/.htrootman
Require  valid-user 

 
[ 참고 ]
사실 파일 이름은 꼭   .htaccess 로 만들지 않아도 되는데 이 파일 이름을 변경하고 싶으면 아파치의 httpd.conf 파일을
수정해야 된다. 수정할 부분은 다음과 같다.

AccessFileName    .htaccess 

--> 이 부분의  .htaccess를 수정하면 되는데 파일 이름의 시작을  .ht 로 하는 것이 좋다.
--> 그 이유는 httpd.conf 에서 .ht 로  시작하는 파일은 보안상 접근할 수 없게 설정되어 있기 때문이다.
--> 물론 이 설정도 변경할 수 있지만 여기서는 설명하지 않겠다. 
--> 정말 궁금해서 잠이 오지 않는 분은 게시판에 글 올려 주세요. 

다음 단계로 넘어 가기 전에 위의 설정이 뭘 의미 하는지 이해하고 넘어 가도록 하자.

AuthType  
인증 유형을 설정하는 지시자다. Basic과 Digest를 설정할 수 있다. 
Digest의 경우 MD5 방식을 사용하는데 MD5를 지원하는 브라우저가 제한 되어 있기 때문에 이 강좌에서는 언급하지 않겠다. 

AuthName   
인증창의 제목이라고 생각하면 된다. 간단한 스트링을 입력해서 설정하는것이 바람직하다.

AuthUserFile   
사용자 User_ID 정보와 Password 정보가 들어 있는 파일을 지정해 주는 것이다. 
보안상 꼭 웹 문서 디렉토리 밖에  위치 시키는 것이 좋다.  이 파일은 나중에 만들것이기 때문에 이 파일이 없다고 투덜 
거리지 마시길..

Require    
인증할 대상을 지정한다.  
Revalid-user     --> AuthUserFile에 등록된 모든 사용자를 인증을 통해 받아 들인다는 설정
Require  user  사용자1  사용자2   --> 사용자1과  사용자2만 인증을 통해 받아 들인다는 설정
Require  group  그룹1  그룹2      --> 그룹1 과 그룹2 에 속하는 사용자만을 인증을 통해 받아 들인다는 설정
Require 지시자는 하나의 .htaccess 파일에 2개 이상 설정을 할 수도 있다.

3 . 사용자 추가 하기
아파치 인증에 사용할 사용자 추가는 아파치의 bin 디렉토리 안에 있는 htpasswd 라는 명령어로 추가한다.
사용방법은 아주 간단하지만 주의를 기울려야 될 부분이 있다.  일반적인 사용법은 다음과 같다.

htpasswd    [ -c ]   AuthUserFile    사용자명

괄호 안에 있는  -c 옵션은 처음 사용자를 등록할 때 필요한 옵션이다.
AuthUserFile 경로 앞에 -c 옵션을 추가 하게 되면 AuthUserFile 파일에서 지정한 파일을 만들어 준다.
절대 2번째 사용자 등록부터는 -c 옵션을 쓰면 안된다. 
만약 실수로 -c 옵션을 쓸 경우 전에 있던 파일은 날라가고 새로운 파일이 만들어 지기 때문에 각별히 주의 해야 된다.

첫번째 사용자 등록을 할 경우


기존의 AuthFile에 사용자를 추가할 경우


3. 특정 사용자를 그룹에 추가 하기
아파치 인증은 사용자 뿐만아니라 그룹에 대해서도 인증을 할 수 있다.
특정 그룹을 아파치 인증을 통해 접근을 허가하기  위해서는 해당 디렉토리 안에 있는 .htaccess 파일에 AuthGroupFile 지시자를 이용해 그룹 정보가 담겨있는 파일의 경로를 지정하고 그룹 파일을 만들어 주면 된다.

[ .htaccess 파일에 추가할 부분 ]
AuthGroupFile   /usr/local/apache/.htgroup

.htaccess 파일의 AuthGroupFile 지시자로 설정했던 파일을 다음과 같이 만들면 된다.
파일의 텍스트 형식은 다음과 같다.

그룹명:  사용자명1  사용자명2  사용자명3  ....
--> 그룹에 포함할 각 사용자명은 공백(Space Bar)로 구분한다.


아피치 인증을 거쳐야 되는 디렉토리에 접근 할 경우 다음과 같은 창이 나타난다. 


 


'리눅스' 카테고리의 다른 글

리눅스 네임서빙 우선순위 결정 : /etc/host.conf  (0) 2016.03.03
tcpwrapper iptable 차이  (0) 2015.10.05
MySQL 외부 접속 설정  (0) 2015.09.07
리눅스 백업 관련  (0) 2015.08.31
DNS zone 파일  (0) 2015.08.27
Posted by 캐논볼
,
http://zetawiki.com/wiki/MySQL%EC%97%90_%EC%9B%90%EA%B2%A9_%EC%A0%91%EC%86%8D_%ED%97%88%EC%9A%A9
 
MySQL 외부 접속 허용 설정
MySQL에 원격 접속 허용하기
MySQL에 root 원격 접속 허용하기

 

 

 

개요

  • MySQL을 설치하면 기본적으로 로컬(localhost)에서만 접속이 가능하고 외부에서는 접속이 불가능하게 되어 있다.
외부에서 접속해보면 다음과 같은 오류 메시지가 나온다.[1]
Host '135.79.246.80' is not allowed to connect to this MySQL server
  • Toad for MySQL과 같은 DB 관리 도구를 사용하여 DB에 원격으로 접속하려면 허용해주는 로컬 작업이 필요하다.
  • 여기서는 root를 원격에서 접속할 수 있도록 설정한다. 이것을 응용하면 다른 계정에도 적용할 수 있다.

확인

  • 아래 쿼리를 날려보면 localhost가 나온다.
  • 즉 root 계정으로는 로컬에서만 접속가능하다.
  • (같은 방법으로 root 대신 다른 사용자명도 조회할 수 있다.)
SELECT Host FROM mysql.user WHERE USER='root';

변경

모든 IP 허용[2]
INSERT INTO mysql.user (host,USER,password) VALUES ('%','root',password('패스워드'));
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
IP 대역 허용
  • 다음과 같이 설정하면 111.222로 시작하는 모든 IP가 허용된다.
INSERT INTO mysql.user (host,USER,password) VALUES ('111.222.%','root',password('패스워드'));
GRANT ALL PRIVILEGES ON *.* TO 'root'@'111.222.%';
FLUSH PRIVILEGES;
특정 IP 1개 허용
INSERT INTO mysql.user (host,USER,password) VALUES ('111.222.33.44','root',password('패스워드'));
GRANT ALL PRIVILEGES ON *.* TO 'root'@'111.222.33.44';
FLUSH PRIVILEGES;

원복

  • 모든 IP를 허용한 경우 다음과 같이 원래 상태로 복구할 수 있다.
DELETE FROM mysql.user WHERE Host='%' AND USER='root';
FLUSH PRIVILEGES;

같이 보기

주석

  1. 이동 물론 방화벽이 뚫린 경우겠지?
  2. 이동 참고로 %은 모든 아이피를 포함하지만, localhost는 포함되지 않는다.

'리눅스' 카테고리의 다른 글

tcpwrapper iptable 차이  (0) 2015.10.05
htaccess 설정방법  (0) 2015.09.22
리눅스 백업 관련  (0) 2015.08.31
DNS zone 파일  (0) 2015.08.27
Timestamp 이용하기  (0) 2015.08.19
Posted by 캐논볼
,

리눅스 백업 관련

리눅스 2015. 8. 31. 14:50

1. 백업에 대하여
백업은 자료를 보호하는 하나의 방법으로 시스템관리자가 최우선적으로 해야할 작업이다. 여러 개의
자료 복사본을 만들어 놓고 자료를 잃어버릴 경우를 대비하는 것이다. 백업을 실행하는 가장 안전한
방법은 테이프, 제거가능한 드라이브, 기록가능한 씨디 등 시스템과 떨어진 위치에 저장하는 것이다.


2. 자료가 손실되는 경우
(1) 하드웨어의 결함
(2) 소프트웨어의 버그
(3) 사람의 실수나 오동작
(4) 천재지변등의 자연재해

3. 백업전에 고려할 사항
(1) 백업 데이터 선택 여부 : 어떠한 데이터를 백업할 지를 결정해야 한다. 예를 들면 /home 디렉토
                            리만을 백업할 것인지, /var 디렉토리를 할 것인지 아니면 전체 백업을
                            할 것인지를 결정해야 한다.
(2) 백업 주기 : 얼마나 자주 백업할 것인지를 결정해야 한다. 또한 증분백업(Incremental Backup)
                을 할 것인지, 전체백업(Full Backup)를 할 것인지도 결정해야 한다. 증분백업이란
                말 그대로 백업할 대상중에서 추가된 부분만을 백업하는 것을 말하고 전체백업이란
                전체를 그대로 백업하는 것을 말한다. 실제로는 이 두가지 백업형태를 적절히 이용
                하는 것이 중요하다. 예를 들면 월요일부터 토요일까지는 추가된 부분만을 증분백
                업하고, 일요일날에는 전체백업을 실시한다. 또한 매월 1일에는 전체백업을 실시하
                여 한달의 데이터, 1주의 데이터 등의 단위로 백업이 가능하다.
(3) 매체(Media) 선택 여부: 어떠한 백업 매체를 사용할 것인지를 결정해야 한다. 이 매체 선택은
                           경제적인 면과 효율적인 면, 편리성 등을 고려하여 선택한다.
(4) 백업 방법: 어떠한 프로그램을 선택하냐는 것이다. 리눅스에서 사용가능한 백업방법으로는 tar,
               dd, dump, dpio 등이 있고, 이외에도 많은 백업 유틸리티들이 있다. 편리성과 안전성
               , 효율성 등을 고려하려 선택하도록 한다.

4. 백업의 미디어
(1) 개요: 백업할 경우 가장 중요하게 고려하는 것이 예비 매체의 선택이다. 비용, 신뢰성, 처리속
          도, 가용도를 생각해야 한다.
(2) 백업매체
   1) 플로피디스크: 매우 싸며 어느 정도 신뢰할 만하다. 하지만 별로 빠르지 못하고 매우 유동적
                   이다. 또한 대용량의 데이터 저장시에는 적당치 않다.
   2) 테이프: 다소 비싸고 충분히 신뢰할 만하다. 속도도 충분히 빠르다. 테이프의 크기에 따라
             편리하게 이용할 수 있다.
   3) MOD(Magnetic Optical Drive: 광자기 드라이브) : 대용량의 데이터를 랜덤하게 접근하고 한
                                                    부분만 빨리 복원할 수 있다. Giga급의 용량
                                                    을 가진다.
   4) DAT(Digital Audio Tape) : 카세트 테이브보다 더 작은 크기의 미디어로 Giga급 용량을 갖
                               는다.

5. 리눅스에서 지원가능한 백업장치
(1) /dev/cdrom: CD-ROM드라이브
(2) /dev/fd0: 플로피디스크
(3) /dev/ht0, /dev/nht0 : IDE 테이프 장치 (예를 들면 Iomega drives)
(4) /dev/nst0, /dev/st0 : DAT(Digital Audio Tape) 나 DDS(Digital Data Storage) 계열의 SCSI
                          테이프 장치
(5) /dev/nrft0, /dev/nftape, /dev/rft0, /dev/ftape : 플로피 테이프 장치 (예를 들면 QIC-80)

6. 백업툴의 선택

(1) 개요: 전통적인 유닉스툴들에는 tar, dd, cpio, dump등이 있다. tar와 cpio는 유사하고 둘 다
          테이프상에서 복원할 수 있고, 거의 모든 미디어를 사용할 수 있다.
(2) 백업툴
   1) tar: Unix와 리눅스시스템 모두에서 사용되는 유틸리티로 파일이나 디렉토리들을 하나의 파일
          로 묶어주는 역할을 한다. 사용이 쉽고 소수의 파일백업에 좋고, 원본파일을 남겨두므로
          안전하다. 전통적인 유닉스의 tar는 압축기능을 하는 옵션이 없지만, 리눅스의 GNU tar는
          압축도 지원한다.
   2) cpio: tar와 비슷한 유틸리티로 많은 양의 데이터에 대해서는 tar보다 빠르다. 장치파일이나
           네트워크 파일등의 특수 파일도 백업이 가능하고 백업본의 크기도 작고, 백업본에 손상된
           부분이 있더라도 손상된 부분을 제외하고 나머지 부분을 복구한다. 그러나, 증분백업기능
           을 지원하지 않는다.
   3) dump: ext2 나 ext3 파일시스템만 지원하고, 파일들을 백업하지않고 파일시스템 자체를 직접
           읽어내는 방법을 사용한다. 전체백업과 증분백업이 가능하다.
   4) dd : data dump의 약자로 파티션 전체의 백업등이 가능하다. 실제적으로는 백업보다는 다른 경
          우에 더욱 더 많이 쓰인다.
   5) 기타: amanda, Arkeia, Bru, Veritas(client), UniBACK, ArcServe 등

7. tar를 이용하여 백업하기
(1) 전체백업
   1) tar cvfp home.tar /home
       => /home 디렉토리를 퍼미션을 그대로 유지하면서 home.tar라는 파일로 묶는다.
   2) tar cf /dev/st0 /home
       => /home디렉토리를 SCSI 테이프장치인 /dev/st0에 백업한다.
   3) tar zcf /dev/st0 /home
       => /home디렉토리를 SCSI 테이프장치인 /dev/st0에 압축해서 백업한다.
   4) tar zxf /dev/st0
       => SCSI 테이프장치인 /dev/st0 에서 압축을 풀어 현재 디렉토리에 푼다.
   5) tar -g list -cvpf home.tar /home
       => -g는 증분백업(Increment backup)에 사용하는 옵션으로 /home 디렉토리를 퍼미션을 그대로
         유지하면서 home.tar로 묶는 것은 1번 예제와 같지만 list라는 백업시에 저장되는 파일이나
         디렉토리들을 목록화하는 파일을 생성한다. 처음시도할 경우에는 첫번째 예제와 같은 파일
         로 생성된다. 그러나 그 다음 시도시에는 list파일과 비교하여 추가된 것만 백업하므로 백
         업하여 생성되는 파일명을 같게 해서는 안된다.
(2) 증분백업
   1) tar -g list -cvpf home1.tar /home
       => 기존의 list파일을 내용을 보고 그 이후에 변경되거나 추가된 파일들을 home1.tar로 백업
         한다. list파일을 편집기로 열어보면 파일의 용량을 숫자로 관리한다. 이 값을 비교하여
         변화시에 증분백업을 시도한다. 따라서, 이 파일을 삭제되면 전체백업을 한다.

8. cpio를 이용하여 백업하기
(1) 설명: cpio는 Copy Input ot Output의 약자로 입력받은 것을 출력에 복사한다는 뜻이다. 보통
          find명령의 출력을 입력으로 받아 백업디바이스에 저장하는 역할을 한다.
(2) 사용법
   [find 명령 | ] cpio options ' > 또는 < ' 디바이스명
(3) options
   -o : 표준출력으로 보내어 사용한다. (--extract)
   -i : 표준입력으로 받을 때 사용한다. 즉, 백업한 자료를 불러올 때 사용한다.
   -v : 과정을 자세히 보여준다.
   -c : 데이터 형식을 ASCII형태로 한다.
   -d : 필요하면 디렉토리를 생성한다. (--make-directories)
   -B : 입출력 블록사이즈를 5120bytes로 한다. 기본 블록사이즈는 512bytes이다.
(4) 사용예
   1) find /home | cpio -ocv > /dev/nst0
      => /home 디렉토리의 내용을 SCSI 테이프장치인 /dev/nst0 장치에 백업한다.
   2) cpio -icdv < /dev/nst0
     => /dev/nst0에 백업된 데이터를 현재디렉토리에 복원한다. 필요하면 디렉토리도 생성한다.

9. dump를 이용하여 백업하기
(1) 설명: dump는 파일들이 아닌 파일시스템 전체를 백업한다. 보통 파티션단위로 백업할 때 사용
          하면 편리하다. dump는 0-9단계의 레벨을 가지고 증분 백업을 지원한다. 레벨 0이 전체
          백업이고 나머지 레벨들은 부분백업을 하게 된다. 백업시에 /etc/fstab파일을 참조하며
          백업된 데이터 복원은 restore명령을 사용한다.
(2) 사용법
   dump options 백업미디어 백업하고자하는 대상
(3) options
   -0~9 : 덤프의 레벨을 지정한다. 0은 전체백업이고, 나머지는 부분백업을 한다. 기본레벨은 9이
         다.
   -f 파일명 또는 디바이스명 : 백업할 미디어를 지정하거나 파일명을 적는다.
   -u : dump 를 통해 백업한 후에 /etc/dumpdates라는 파일에 작업에 대한 정보를 기록한다.
(4) 사용예
   1) dump -0f /dev/nst0 /home
       => /home 디렉토리 전체를 /dev/nst0 장치에 전체 백업한다.
   2) dump -0u -f /dev/nst0 /dev/hda7
       => /dev/hda7 파일시스템 전체를 /dev/nst0 장치에 전체 백업하며 그 작업 정보를 /etc/dumpd
         ates라는 파일에 기록한다.
   3) dump -0u -f home /home
       => /home 디렉토리 전체를 home이라는 이름으로 전체백업한다. 또한 그 작업정보를 /etc/dump
         dates 라는 파일에 기록한다.
   4) dump -4u -f /dev/nst0 /dev/hda7
       => level4 수준 또는 그 이하의 백업을 한 뒤에 바뀐 내용을 증분백업한다. 또한 그 작업정보
         를 /etc/dumpupdates에 기록한다.
(5) 복원: dump명령으로 백업한 경우에는 restore 명령을 이용하여 복원해야 한다.
   1) 사용법
     restore options 디바이스명 또는 백업파일명
   2) options
    -i : 대화식(interactive)으로 복구할 파일을 선택한 후에 복원이 가능하다.
    -f 디바이스명 또는 백업파일명 : 백업되어진 파일이나 장치를 지정한다.
    -r : 전체백업시에 사용한다. 이 옵션사용시에 파일시스템이 미리 생성되어 있어야 하고, 마운트
        도 되어 있어야 하며 해당 디렉토리안에서 작업해야 한다.
   3) 사용예
    ㄱ. restore -if /dev/st0
         => /dev/st0에 백업된 데이터를 하나씩 확인하면서 복원한다.
    ㄴ. restore -rf /dev/nst0
         => /dev/nst0에 백업된 데이터를 전체복원한다. 단 복원하고자 하는 파일시스템이 생성되어
           있어야 하며 마운트되어 있어야 하고 해당 디렉토리안에서 작업해야 한다.
            예) mke2fs /dev/sda1
                mount /dev/sda1 /mnt
                cd /mnt
    ㄷ. restore -if home
         => home이라는 이름으로 백업된 파일을 복구한다. 실행시키면 다음과 같이 프롬프트가 나타
           난다. 지원가능한 명령을 확인해야 한다.
           restore >                    // ? 나 help라고 입력하면 사용가능한 명령을 보여준다.
           restore > help
           Available commands are:
                   ls [arg] - list directory
                   cd arg - change directory
                   pwd - print current directory
                   add [arg] - add `arg' to list of files to be extracted
                   delete [arg] - delete `arg' from list of files to be extracted
                   extract - extract requested files
                   setmodes - set modes of requested directories
                   quit - immediately exit program
                   what - list dump header information
                   verbose - toggle verbose flag (useful with ``ls'')
                    prompt - toggle the prompt display
                    help or `?' - print this list
            If no `arg' is supplied, the current directory is used
           restore > ls                 // 백업된 내용을 보여준다.
           .:
            bluemountain/ minory/       nanajjang/    quota.user    zzang/
            lost+found/   mkk737/       posein/       xitem/
           restore > add quota.user     // 특정한 파일을 선택한다. add뒤에 파일명을 기입하지
                                          않으면 전부선택된다.
           restore > ls
           .:
            bluemountain/  minory/        nanajjang/    *quota.user     zzang/
            lost+found/    mkk737/        posein/        xitem/
           restore > extract
           You have not read any volumes yet.
           Unless you know which volume your file(s) are on you should start
           with the last volume and work towards the first.
           Specify next volume # (none if no more volumes): 1       // 볼륨넘버를 입력한다.
           set owner/mode for '.'? [yn] y                           // y라고 입력한다.

10. dd를 이용하여 백업하기

(1) 설명: 전체파티션 단위로 백업할 때 용이하다.
(2) 사용법: 특정파티션을 다른 하드디스크의 파티션으로 백업한다고 가정해보자. 만약 /dev/hda1
            을 /dev/hdb1으로 백업한다고 할 때, /dev/hdb1을 /dev/hda1과 같은 사이즈의 파티션으
            로 생성한다.
(3) 사용예
   1) dd if=/dev/hda1 of=/dev/hdb1 bs=1k
       => /dev/hda1을 /dev/hdb1으로 백업한다.
   2) dd if=/dev/hda of=/dev/hdb
       => /dev/hda를 /dev/hdb로 백업한다.

11. 백업의 종류와 복원
(1) 개요: 모든 것을 한번에 백업하는 풀백업(Full Backup)이 있고 부분 부분을 백업하는 부분 백업
          (Incremental Backup)이 있다.
(2) 풀백업
   1) 설명: tar를 이용하여 쉽게 할 수있다.
   2) 사용예
     ㄱ. tar cvf /dev/ftape /usr/src
        => /usr/src디렉토리를 /dev/ftape라는 테이프에 백업한다.
     ㄴ. tar -cMf /dev/fd0H1440 /usr/src
        => /usr/src디렉토리를 -M(Multi Volume)옵션으로 플로피에 연속 백업한다. 백업하기 전에
          플로피는 포맷을 해야 한다.
(3) 부분백업
   1) 설명: 특정한 날짜 이후로 바뀐 파일 부분만 백업한다.
   2) 사용예
     ㄱ. tar -c -v -N '15 June 2002' -f /dev/st0 /usr/src
        => /usr/src 에서 2002년 6월 15일 이후로 변경된 파일만을 DAT에 부분백업한다.
(4) 복원
   1) 설명: tar의 x옵션을 이용하여 복원한다.
   2) 사용예
     tar xvf /dev/fd0H1440

12. 백업의 대상
(1) 개요: 가능한 많은 백업을 하는 것이 좋다. 그러나 쉽게 재설치가 가능한 프로그램은 백업을 원
         하지 않을 수도 있다. 또한 시스템상의 이유로 백업을 원치않는 데이터도 있을 것이다. 예
         를 들면 커널이 항상 자동으로 생성하는 데이터들은 백업할 필요가 없다. 백업을 해야할지
         하지 말아야 할지 잘 구분이 안되는 것이 /var디렉토리 이하의 파일들이다. 무엇이 중요한
         가를 고려하여 백업해야 한다.
(2) 백업해야할 대상 : 보통 /home과 /etc(이 디렉토리는 설정파일들이 들어있는 디렉토리이다. 경
                      우에 따라서는 시스템의 다른 위치에도 설정파일이 있을 수도 있으니 잘 찾아
                      백업을 해야함)는 꼭 해야한다. 아울어 어떤 프로그램의 소스를 /usr/local
                      밑에 설치하였다면 이 디렉토리도 백업대상으로 고려해야 한다.

13. 압축백업
(1) 개요: 백업은 많은 공간을 요구하게 되는데 그것은 많은 경제적인 비용을 초래할 수 있다. 이러
          한 비용적 부담의 대처방법으로 압축을 들 수 있다. 압축백업은 문제점을 발생시킬 수도
          있다. 자연적으로 어떤 환경때문에 만약 하나의 비트가 잘못 되었다면 모든 나머지 데이터
          가 사용 못하게 될 수 있다. 어떤 백업프로그램은 에러를 교정해주지만 많은 수의 에러는
          어찌할 수 없는 경우가 많다. 백업은 안전해야 되므로 그리 좋은 생각만은 아니다.
(2) 사용예
   tar zcvf etc_backup.tar.gz /etc
    => /etc디렉토리를 압축하여 etc_backup.tar.gz파일을 만든다.

14. 테이프 관련 유틸리티- mt
(1) 설명: mt는 테이프(Magnetic Tape)의 작동을 제어하는 유틸리티이다.
(2) 사용법
   mt [option] command
(3) option
   -h : 사용가능한 command를 보여준다.
   -v : mt의 버전을 보여준다. (--version)
   -f 디바이스명: 제어하고자하는 디바이스명을 지정한다.
(4) 주요 commnad
    status : 테이프의 상태를 보여준다.
    fsf 파일수: 테이프를 지정한 파일 수 만큼 앞으로 이동시킨다.
    rewind : 테이프를 처음으로 되감는다.
    bsf 파일수 : 테이프를 지정한 파일 수 만큼 되감는다.
    erase : 테이프의 내용을 지운다.
    offline : 테이프를 꺼낸다.
    rewoff : 테이프를 처음으로 되감은 뒤에 꺼낸다.
(5) 사용예
   1) mt -f /dev/st0 status
       => 테이프의 상태를 보여준다.
   2) mt -f /dev/st0 rewind
       => 테이프를 처음으로 되감는다.
   3) mt -f /dev/st0 fsf 50
       => 파일 수 50만큼 테이프를 앞으로 이동시킨다.
   4) mt -f /dev/st0 erase
       => 테이프의 내용을 지운다.
   5) mt -f /dev/st0 offline
       => 테이프를 꺼낸다.
   6) mt -f /dev/st0 rewoff
       => 테이프를 처음으로 되감은 뒤 꺼낸다.

'리눅스' 카테고리의 다른 글

htaccess 설정방법  (0) 2015.09.22
MySQL 외부 접속 설정  (0) 2015.09.07
DNS zone 파일  (0) 2015.08.27
Timestamp 이용하기  (0) 2015.08.19
"su" 와 "su - root" 차이  (0) 2015.08.10
Posted by 캐논볼
,