1. overcommit_memory 값 변경


https://charsyam.wordpress.com/2013/01/24/%EC%9E%85-%EA%B0%9C%EB%B0%9C-redis-vm-overcommit_memory-%EC%9D%84-%EC%95%84%EC%8B%9C%EB%82%98%EC%9A%94/#comment-1256


위 포스트를 보다가 overcommit_memory 값은 어디에 셋팅되어 있고, 어떻게 변경하는 것인지 궁금해서 구글링.

아래와 같은 포스트 찾음.


http://redis.io/topics/faq




현재 셋팅 된 값은 /proc/sys/vm/overcommit_memory 에 있음.


http://redis.io/topics/admin



값 셋팅은 /etc/sysctl.conf 안에 vm.overcommit_memory 값을 지정한 후 재시작하거나 /sbin/sysctl vm.overcommit_memory 명령어를 사용하면 됨.



저작자 표시 비영리 변경 금지
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret

오랜 기간 콘솔 작업을 안하다가 다시 콘솔에서 작업할 일이 생겼는데...

그동안 잘 사용해 오던 명령어들이 생각이 안나서 구글링...


이왕 찾게 된 김에 정리해 둘 겸 적어 둡니다.

필요하신 분들은 사용해 보세요 ㅎㅎ


1. 해당 파일 안에 특정 문구가 들어간 파일 찾기 (하위 디렉토리 포함)


grep -rl "원하는 단어" path

ex) [user@server redis]$ grep -rl "sysctl.conf" ./

./src/redis-server

./src/redis.c

./src/redis-sentinel

./src/redis.o


요즘 redis를 보고 있는데 sysctl.conf라는 단어가 들어간 파일을 찾을 경우 위와 같이 하면 된다.

위 내용은 src/redis-server 라는 파일 안에 sysctl.conf 라는 단어가 있다는 의미이다.


2. 하위 디렉토리 내 특정 파일 이름으로 찾기


find . -name "파일명"


[user@server redis]$ find . -name "redis-master.conf" 

./redis-master.conf

[user@server redis]$ find . -name "redis-master*" 

./redis-master.conf



저작자 표시 비영리 변경 금지
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret

MySQL Replication

Server/DB 2013.05.15 10:39

Replication을 한개의 물리적 서버에서 테스트 하기 위해 설치할 필요가 있었다.

이를 위해 다음과 같은 셋팅으로 설정하였는데, 자료 아카이빙을 위해 정리해 본다.


기본적인 것은 아래와 같다.


1. 한개의 서버에 두개의 MySQL을 설치한다.

2. 각각 다른 Port를 사용한다.

3. Master, Slave 설정을 하고 Replication을 시작한다.


자세하게 기술하면 아래와 같다.


1. configure를 통해 master mysql 설치 디렉토리를 지정한다.


ex)

./configure --prefix=/설치디렉토리/mysql_master --with-charset=utf8 --enable-assembler


2. make, make install을 통해 설치한다.


3. master db가 설치가 완료 되었으면, slave db를 설치한다.


ex)

./configure --prefix=/설치 디렉토리/mysql_slave --with-charset=utf8 --enable-assembler


4. master db의 config 설정을 위해 mysql_master 디렉토리 아래 my.cnf 파일을 다음과 같이 만든다. (필요한 내용만 기재)


[mysqld]

datadir=/설치디렉토리/mysql_master/var

socket=/설치디렉토리/mysql_master/tmp/mysql.sock

server-id=1

log-bin=/설치디렉토리/mysql_master/var/replication.log

binlog-do-db = xe

port=3306


5. slave db의 config 설정을 위해 mysql_slave 디렉토리 아래 my.cnf 파일을 다음과 같이 만든다. (필요한 내용만 기재)


[mysqld]

datadir=/home1/irteam/db/mysql_slave/var

socket=/home1/irteam/db/mysql_slave/tmp/mysql.sock

server-id=2

port=3307


7. 각 서버를 기동한다.


8. Master와 Slave의 상태를 본다.


ex)

./mysql -uroot --socket=/설치디렉토리/mysql_master/tmp/mysql.sock


mysql> show master status;

+--------------------+----------+--------------+------------------+

| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+--------------------+----------+--------------+------------------+

| replication.000002 |   346615 | xe           |                  |

+--------------------+----------+--------------+------------------+

1 row in set (0.00 sec)


./mysql -uroot -p --socket=/설치디렉토리/mysql_slave/tmp/mysql.sock


mysql> show slave status \G

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 127.0.0.1

                  Master_User: replmon

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: replication.000002

          Read_Master_Log_Pos: 346615

               Relay_Log_File: dev-xemysql-relay-bin.001029

                Relay_Log_Pos: 253

        Relay_Master_Log_File: replication.000002

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB: 

          Replicate_Ignore_DB: 

           Replicate_Do_Table: 

       Replicate_Ignore_Table: 

      Replicate_Wild_Do_Table: 

  Replicate_Wild_Ignore_Table: 

                   Last_Errno: 0

                   Last_Error: 

                 Skip_Counter: 0

          Exec_Master_Log_Pos: 346615

              Relay_Log_Space: 561

              Until_Condition: None

               Until_Log_File: 

                Until_Log_Pos: 0

           Master_SSL_Allowed: No

           Master_SSL_CA_File: 

           Master_SSL_CA_Path: 

              Master_SSL_Cert: 

            Master_SSL_Cipher: 

               Master_SSL_Key: 

        Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

                Last_IO_Errno: 0

                Last_IO_Error: 

               Last_SQL_Errno: 0

               Last_SQL_Error: 

1 row in set (0.00 sec)


9. Slave 서버에서 master의 위치정보를 변경하고자 할 경우에는 다음과 같은 명령어를 날린다.


change master to master_host='127.0.0.1' , master_port = 3306, master_user='replmon', master_password='12345';





저작자 표시 비영리 변경 금지
신고

'Server > DB' 카테고리의 다른 글

MySQL Replication  (0) 2013.05.15
MySQL Erro Code 28이 리턴되는 경우  (2) 2009.04.08
MySQL의 백업 및 복구  (2) 2008.12.15
MySQL에서 대소문자 구별해서 쿼리하기  (0) 2007.05.15
Z와 S의 차이...  (2) 2007.02.14
MySQL에서 변수의 사용...  (2) 2006.12.18

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
vi 사용하면서 Color 셋팅에 매번 어려움을 겪어 온 터라 이번에 아예 정리를 해 놓을 심산으로 적어둔다.
bash 기준이다.

1. 캐릭터셋 지정

.bashrc 파일에 캐릭터셋 지정을 한다.

export LANG=ko_KR.UTF-8;
export LC_ALL=ko_KR.UTF-8

2. xterm color 지정

.bash_profile 파일에 아래와 같이 선언한다.

export TERM=xterm-color

3. vi 옵션 지정

syntax on
set ai
set cindent
set ts=4
set sw=4
set hlsearch
colorscheme koehler
set background=light
set encoding=utf-8

vi 옵션 중 colorscheme 부분이 vi의 color를 지정하는 부분이며 color set의 이름 중 하나인 koehler는 /usr/share/vim/vim70/colors/에 위치한 파일을 찾아 사용한다.

가장 찾기 어려웠던 부분은 2번 부분으로 검색에서 찾아도 나타나지 않는 부분이였다.
다음부터는 vi color로 삽질하지 말자!!!

신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
작업 서버에서 잘 되던 쿼리가 에러가 떨어졌다.
에러 코드 내용...

ERROR 1030 (HY000): Got error 28 from storage engine

1030 에러코드를 메뉴얼로 찾아보니 별다른 내용도 없고, 위 메시지랑 같은 이야기만... ^^;;

Error: 1030 SQLSTATE: HY000 (ER_GET_ERRNO)

Message: Got error %d from storage engine


그래서 사내 DBA분에게 물어보고 확인해 본 결과 28 에러코드는 다음과 같은 방법으로 찾는 것이라고 한다.

[xxxxxx bin]# ./perror 28
OS error code  28:  No space left on device

mysql이 설치된 디렉토리의 bin 디렉토리에서 perror라는 바이너리 파일을 실행하면 관련된 내용을 리턴해 준다.
위 내용은 디스크 공간이 부족하다는 말!!!

그래서 df -h로 해당 공간 확인하고 tmp 공간이 부족한 것을 확인한 다음, /tmp에서 $MYSQL_HOME/data/tmp로 변경을 해 준 후 mysql을 재시작 했더니 문제가 해결되었다.

신고

'Server > DB' 카테고리의 다른 글

MySQL Replication  (0) 2013.05.15
MySQL Erro Code 28이 리턴되는 경우  (2) 2009.04.08
MySQL의 백업 및 복구  (2) 2008.12.15
MySQL에서 대소문자 구별해서 쿼리하기  (0) 2007.05.15
Z와 S의 차이...  (2) 2007.02.14
MySQL에서 변수의 사용...  (2) 2006.12.18

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 저도 같은 에러로 고생하다 우연찮게 님의 글을 보고 해결했습니다...너무 너무 x 10000000 감사합니다...단점투성이인 인터넷의 장점이 이런거군요...님에게 신의가호가 있길 진심으로 기원합니다...하시는일 잘되시고 부자되시고 건강하시고 오래오래 사세요....제 블로그는 http://blog.naver.com/sdisys 입니다...인연이 된다면 소주한잔 ^^...행복하세요!!
secret
요즘은 MySQL Replication 기능을 이용해서 DB System을 구축하는 경우가 많다. 또한 MySQL DB를 사용하면서 백업은 보통 Replication Slave 단에 있는 백업 Server에서 별도로 받게 된다.
백업 서버에서 Dump로 받게 된 Data는 DML 쿼리로 된 text data이며, 이 데이터를 이용해서 신규 장비를 설치하던가, 아니면 기존 장비에 문제가 생겼을 시 복구를 하게 된다.

보통의 MySQL Replication 구성

보통의 MySQL Replication 구성


그런데 복구를 하더라도 Replication이란 문제로 인해 Master DB와 싱크를 맞추는 문제가 발생하게 된다.
따라서 백업 서버에서 백업을 받게 되는 경우, Master DB의 binary log의 포지션을 알아야지만 된다.
이럴 경우에는 다음과 같은 절차를 따라서 Dump를 받으면 된다.

/usr/local/mysql/bin/mysqldump -uroot -p --master-data=2  > /data/…/backup.sql

이 명령어 중에서 "--master-data=2" 옵션을 주게 되면 덤프 시점의 binary log의 포지션 정보가 같이 Dump 되게 된다.
Dump된 파일을 에디터로 열어보면 다음과 같은 내용이 나온다.

CHANGE MASTER TO MASTER_LOG_FILE='binary파일', MASTER_LOG_POS=포지션번호;

위 말은 binary파일의 포지션 번호 시점에서 백입이 이루어 졌다는 의미이다.
물론 binary 파일과 포지션은 복구하기 위한 중요한 내용이 되겠지만, 위와 같은 구성에서 복구를 하기 위해서는 조금 애매 보호한 감이 있다.
가령, Backup DB에서 Dump받은 파일을 Slave DB를 복구하기 위해 사용한다던가, 아니면 신규 Slave 장비가 와서 새로운 시스템을 구축할 시에는 Backup DB의 binary 파일명과 포지션은 별로 소용이 없기 때문이다.
따라서 이럴 때에는 다음과 같은 절차로 Master DB의 binary 파일과 포지션을 알아낼 수 있다.

1. Backup DB에서 포지션이 속한 바이너리 로그를 sql 파일로 export 한다. 사용 툴은 mysqlbinlog이다.

/usr/local/mysql/bin/mysqlbinlog --start-datetime="2008-12-15 02:00:00" --stop-datetime='2008-12-15 02:30:00' /data/mysql_data/binary파일 > binlog.sql

2. Master DB에서도 위 방법대로 바이너리 로그를 sql 파일로 export 한다.

/usr/local/mysql/bin/mysqlbinlog --start-datetime="2008-12-15 02:00:00" --stop-datetime='2008-12-15 02:30:00' /data/mysql_data/binary파일 > binlog.sql

3. Backup DB에서 export한 sql 파일을 에디터로 열어서 확인해 본다.

# at 576856551
#060824  2:18:30 server id 1  log_pos 576856551     Intvar
SET INSERT_ID=136;
# at 576856579
#060824  2:18:30 server id 1  log_pos 576856579     Query   thread_id=16587969  exec_time=16157 error_code=0
SET TIMESTAMP=1156353510;

...

# at 576856919

최초에 Backup DB에서 Dump받은 파일에 기록된 포지션 정보를 찾는다.

4. Master DB에서 export 한 sql 파일을 에디터로 열어서 동일한 포지션을 찾는다.

# at 576375776
#060824  2:18:30 server id 1  log_pos 576375776         Intvar
SET INSERT_ID=136;
# at 576375804
#060824  2:18:30 server id 1  log_pos 576375804         Query   thread_id=16587969      exec_time=0     error_code=0
SET TIMESTAMP=1156353510;


Backup DB에서 해당 포지션에 기록된 TIMESTAMP값과 동일한 정보를 Master DB에서 export한 sql 파일에서 찾는다.
위의 경우에는 576375776이 포지션 번호가 된다.

5. 최초에 Dump 받은 Dump Data의 바이너리 파일과 포지션을 수정해 준다.

CHANGE MASTER TO MASTER_LOG_FILE='마스터DB의 binary파일', MASTER_LOG_POS=576375776;

위와 같이 되었다면, Dump 받은 파일은 언제라도 Master DB에 붙여서 replication을 동기화 시킬 수 있는 준비가 된 상태이다.
만일 새로운 장비를 들여와서 Dump Data로 복구를 했다면, 위 명령어를 내린 후 slave를 start 시키면, Master DB의 해당 포지션 부터 sync를 맞춰가기 시작한다.
Master DB의 포지션을 모두 다 따라갔다고 판단되면 Slave DB를 서비스에 투입시키면 끝이다.




신고

'Server > DB' 카테고리의 다른 글

MySQL Replication  (0) 2013.05.15
MySQL Erro Code 28이 리턴되는 경우  (2) 2009.04.08
MySQL의 백업 및 복구  (2) 2008.12.15
MySQL에서 대소문자 구별해서 쿼리하기  (0) 2007.05.15
Z와 S의 차이...  (2) 2007.02.14
MySQL에서 변수의 사용...  (2) 2006.12.18

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 좋은글 출처를 표시하고 블로그에 담아갑니다. ^^
  2. 좋은글 잘 보고 갑니다. ^^
    블로그에 퍼가겠습니다. 당연히 출처도 표시합니다.
    감사합니다.
secret
출처 : http://www.fduser.org/blog/26

tar 압축의 경우 2G이상으로 압축이 되지 않기 때문에, 
2G 이상으로 압축 을 하기위해서는 split란 명령을 같이 사용하면 됩니다.

[압축 하기]
ex) tar -zcvpf - /home | split -b 2048mb - home.tar.gz

* /home : 압축할 디렉토리
* home.tar.gz 압축되어질 이름

압축 결과는 tar.gza , tar.gzb 등으로 생성이 됩니다.

[압축 풀기]
tar.gza, tar,gzb 등으로 압축된 파일을 풀기 위해서는

ex) cat home.tar.gz* | tar -zxvpf -


여러개의 tar.gz 파일들을 압축을 풀어야 할경우
tar -zxvf *.tar.gz 등의 방법으로 풀게 되면 에러가 발생합니다.

이 경우에는 find 를 이용하시면 쉽게 푸실수 있습니다.

find . -name "*.tar.gz" -exec tar zxvf {} \;

신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
100만건이 조금 넘는 MyISAM 테이블이 있었다.
주소록 그룹 관련 테이블인데, 유저당 그룹 이름이 중복될 수 없었다.
그런데 기존에는 nhn과 NHN이 서로 같은 것이라고 생각해서 디비 내에서 대소문자가 틀린 경우에는 새로운 그룹을 추가하거나 기존 그룹의 이름을 수정할 수 없었다.

뭐 간단하게 BINARY로 해당 컬럼의 속성을 변경해도 되겠지만...
innoDB도 아닌 MyISAM 테이블에 100만건이니 ALTER 한번만 쳐도 수시간은 잡아 먹을 듯 했다.
그래서 메뉴얼을 뒤졌더니... 역시나 ^^


BINARY

BINARY


BINARY라는 Cast Function을 쓰면 되는 것이었다.
복잡하게 해결해야 만 될것같은 문제를 간단하게 해결할 수 있게 되었다.
역시 모든 문제의 해결책은 메뉴얼이다.
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
MySQL에서 테이블 컬럼 분석할 일이 생겨서...
일전에 phpMyAdmin에서 하던 명령을 콘솔에서 날려 볼려고 하였다.
대충 기억나는 명령어로는 ANAL... 뭐라고 하는거 같았는데 라며...
메뉴얼을 뒤적였다.
다음과 같은 명령어가 나오더군...
ANALYZE

ANALYZE


이게 맞나보다 하고 날렸더니 -.-;;
왜 안되는거지... -.-;;
내가 예상했던 결과하고 틀리게 나오네 -.-;;
이곳 저곳 한참을 찾은 끝에 알아 낸 명령어는... -.-;;
ANALYSE

ANALYSE

ANALYSE

ANALYSE

어...
ANALYZE하고 ANALYSE하고 뭐가 틀린거야?
얼른 네이버 사전을 찾아 봤다

analyze

an·a·lyze vt.
1물리·화학분석하다, 분해하다;【수학해석하다
   analyze+++analyze something into its elements 어떤 요소분해[분석]하다
   Water can be analyzed into oxygen and hydrogen. 물은 산소수소분해 있다.

2 분석적으로 검토하다, 분석하다
3문법】 <(文)> 해부하다, 분석하다;검토하다
4 정신 분석하다
anlysis n.;analtic a.
--------------------------------------------------------------------------------
analyse

an·a·lyse vt. 《》 =ANALYZE

다른건가? -.-;;
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 세번째줄의 ANAL만 (그것도 볼드체로) 쾅!쾅!쾅!하면서 눈에 들어오네요 -0-
secret
보통 MySQL에서 변수를 쓰려면 다음과 같이 하면 된다.

SET @yesterday := DATE_ADD(DATE(CURDATE()), INTERVAL -1 DAY);


또한 쿼리 내에서 직접 변수에 값을 담으려면 다음과 같이 하면 된다.

SELECT column
INTO @columnVar ...


이런식으로 쿼리만을 모아서 프로그램 짜듯이 procedure하게 짜나간 후 sql파일로 저장해서 사용한다.

여지껏 이렇게 만들어서 사용하고 있는데...
문제가 하나 생겼다
SELECT해온 컬럼값이 없을 경우 에러를 내 뱉으면서 다음 내용으로 넘어가질 않는 것이다.

MYSQL 문법을 뒤져서 겨우 겨우 찾아냈다.

SELECT @columnVar := column ...


이런식으로 하면 에러가 안나면서 변수에 값을 담을 수 있다.
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 지난번 스쿨에 올려주셨을 때, 저 문법이 가능한 버젼을 여쭤봤는데, 혹시 알고계시다면, 간단히 커멘트 부탁드립니다.
    mysql 메뉴얼이 좀 복잡하잖아여. ㅋㅋ
    번거롭더라도 스쿨에도 꼭 달아주시면 같이 도움이 될 것 같구요.
    가능하시다면, preparedstatment 와의 연계도 언급하셨는데, 마찬가지로 버젼정보를 부탁드릴께요.

    제가 너무 이기적인 거 같아서 죄송합니다. ^^;;
    꾸벅~!
    • 버전은 정확히 모르겠구요.
      4.1 버전에서 현재 사용중입니다.
      그리고 preparedstatment라는 것은 db 단에서 어떻게 처리되는지는 모르겠고 php api 중에 mysqli 과련 함수들이 있습니다.
      그것을 사용하면 전처리 작동을 하기 때문에 같은 쿼리에 대해서는 속도가 증가하는 것으로 알고 있습니다.
secret
리눅스에 하는 작업이라곤 고작 vi로 프로그래밍 하고,
Apache나 MySQL 설정 파일 변경 등이 대부분이라서...
오래 사용하고서도 아는 기능이 많이 없었다.
그런데 요 근래 발견한 재미 있는 기능들을 통해서 다시 한번 리눅스의 재미에 맛을 들이기 시작했다.
물론 이전에도 리눅스를 좋아했지만 말이다.
알게 된 재미있는 기능 몇가지를 아래에 써 본다.

1. split

split 파일명

-rw-r--r--  1 root root   73568 Dec 12 10:12 xaa
-rw-r--r--  1 root root   73601 Dec 12 10:12 xab
-rw-r--r--  1 root root   73559 Dec 12 10:12 xac
-rw-r--r--  1 root root   73613 Dec 12 10:12 xad
-rw-r--r--  1 root root   73537 Dec 12 10:12 xae
-rw-r--r--  1 root root   74393 Dec 12 10:12 xaf
-rw-r--r--  1 root root   86555 Dec 12 10:12 xag
-rw-r--r--  1 root root   86931 Dec 12 10:12 xah
-rw-r--r--  1 root root   83555 Dec 12 10:12 xai
-rw-r--r--  1 root root   84163 Dec 12 10:12 xaj
-rw-r--r--  1 root root   84080 Dec 12 10:12 xak
-rw-r--r--  1 root root   84178 Dec 12 10:12 xal
-rw-r--r--  1 root root   48057 Dec 12 10:12 xam

기본적으로 x로 시작하는 PREFIX가 붙는다.
아무런 옵션을 주지 않으면 1,000 line 단위로 짜른다.

split [OPTION] [INPUT [PREFIX]]

문법은 위와 같으므로 PREFIX 역시 수정할 수 있다.
사용할 수 있는 옵션으로는 다음과 같은 것들이 있다.

-a, --suffix-length=N
             use suffixes of length N (default 2)

split -a3 maillog.4
-rw-r--r--   1 root root  203210 Dec 12 10:19 xaaa
-rw-r--r--   1 root root  203238 Dec 12 10:19 xaab
-rw-r--r--   1 root root  203110 Dec 12 10:19 xaac
-rw-r--r--   1 root root  203240 Dec 12 10:19 xaad
-rw-r--r--   1 root root  203106 Dec 12 10:19 xaae
-rw-r--r--   1 root root  203244 Dec 12 10:19 xaaf
-rw-r--r--   1 root root  203156 Dec 12 10:19 xaag
-rw-r--r--   1 root root  203188 Dec 12 10:19 xaah
-rw-r--r--   1 root root  203218 Dec 12 10:19 xaai
-rw-r--r--   1 root root  203136 Dec 12 10:19 xaaj
-rw-r--r--   1 root root  203238 Dec 12 10:19 xaak
-rw-r--r--   1 root root  203106 Dec 12 10:19 xaal
-rw-r--r--   1 root root  203242 Dec 12 10:19 xaam
-rw-r--r--   1 root root  203138 Dec 12 10:19 xaan
-rw-r--r--   1 root root  203214 Dec 12 10:19 xaao
-rw-r--r--   1 root root  203188 Dec 12 10:19 xaap
-rw-r--r--   1 root root  203164 Dec 12 10:19 xaaq
-rw-r--r--   1 root root  203236 Dec 12 10:19 xaar
-rw-r--r--   1 root root  203136 Dec 12 10:19 xaas
-rw-r--r--   1 root root  203238 Dec 12 10:19 xaat
-rw-r--r--   1 root root   32432 Dec 12 10:19 xaau

-a 옵션을 주면 뒤에 자동으로 붙는 suffix의 길이를 조정할 수 있다.

-b, --bytes=SIZE
             put SIZE bytes per output file

-C, --line-bytes=SIZE
             put at most SIZE bytes of lines per output file

-d, --numeric-suffixes
             use numeric suffixes instead of alphabetic

-l, --lines=NUMBER
             put NUMBER lines per output file

-b 옵션은 파일 사이즈로 파일을 나눌 수 있다.
-C 옵션은 옵션에 주어진 사이즈 내에서 해당 라인수를 찾아 자른다. 말로 설명하기 어려우니 다음 예제를 보자.

split -C1000 maillog.4
split: Output file suffixes exhausted
ll -h | grep xaa 
-rw-r--r--   1 root root  987 Dec 12 10:30 xaa

Output file suffixes exhausted란 에러는 더이상 suffix를 붙여서 만들 수 있는 파일명이 없을 때 나타난다.
어째든 이렇게 하면 1000byte보다 작은 가장 마지막 라인에서 잘린다.
그렇다면 만일 한 라인의 byte보다 작게 한다면 어떨까?

split -C100 maillog.4 
split: Output file suffixes exhausted
ll -h | grep xaa
-rw-r--r--   1 root root  100 Dec 12 10:34 xaa

vi xaa
Nov 12 04:02:03 i65496 sendmail[14401]: kABJ22sk014401: from=root, size=460, class=0, nrcpts=1, msgi

딱 100byte에서 끝나는 것을 볼 수 있다.

-d 옵션은 suffix를 숫자로 붙이는 것이고, -l 옵션은 라인수로 자르는 옵션이다.

2. cal

쉽게 이야기 해서 달력을 보여주는 기능이다.
man cal 했더니 글자들이 다 깨져서 cal --help로 옵션을 보고 하나 하나 해 보는 수밖에 없었다.

cal --help
usage: cal [-13smjyV] [[month] year]

month와 year의 사용법은 다 알테고 ^^ 나머지는 아래와 같다.

cal -1
   December 2006
Su Mo Tu We Th Fr Sa
               1  2
3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31


1달을 보여준다. 기본 옵션과 같아서 별 다를께 없다.

cal -13
   November 2006         December 2006         January 2007    
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
         1  2  3  4                  1  2      1  2  3  4  5  6
5  6  7  8  9 10 11   3  4  5  6  7  8  9   7  8  9 10 11 12 13
12 13 14 15 16 17 18  10 11 12 13 14 15 16  14 15 16 17 18 19 20
19 20 21 22 23 24 25  17 18 19 20 21 22 23  21 22 23 24 25 26 27
26 27 28 29 30        24 25 26 27 28 29 30  28 29 30 31         
                     31


앞뒤로 1달씩 총 3달을 보여준다.

cal -s
   December 2006
Su Mo Tu We Th Fr Sa
               1  2
3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31


sunday를 제일 앞으로 놓고 보여준다.

cal -m
   December 2006
Mo Tu We Th Fr Sa Su
            1  2  3
4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31


monday를 가장 앞에 놓고 보여준다.

cal -j
      December 2006
Sun Mon Tue Wed Thu Fri Sat
                   335 336
337 338 339 340 341 342 343
344 345 346 347 348 349 350
351 352 353 354 355 356 357
358 359 360 361 362 363 364
365


1년 중 몇일인지를 보여준다.

cal -y   
                              2006                               

      January               February                 March       
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
1  2  3  4  5  6  7             1  2  3  4             1  2  3  4
8  9 10 11 12 13 14    5  6  7  8  9 10 11    5  6  7  8  9 10 11
15 16 17 18 19 20 21   12 13 14 15 16 17 18   12 13 14 15 16 17 18
22 23 24 25 26 27 28   19 20 21 22 23 24 25   19 20 21 22 23 24 25
29 30 31               26 27 28               26 27 28 29 30 31

       April                   May                   June        
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                  1       1  2  3  4  5  6                1  2  3
2  3  4  5  6  7  8    7  8  9 10 11 12 13    4  5  6  7  8  9 10
9 10 11 12 13 14 15   14 15 16 17 18 19 20   11 12 13 14 15 16 17
16 17 18 19 20 21 22   21 22 23 24 25 26 27   18 19 20 21 22 23 24
23 24 25 26 27 28 29   28 29 30 31            25 26 27 28 29 30
30
       July                  August                September     
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                  1          1  2  3  4  5                   1  2
2  3  4  5  6  7  8    6  7  8  9 10 11 12    3  4  5  6  7  8  9
9 10 11 12 13 14 15   13 14 15 16 17 18 19   10 11 12 13 14 15 16
16 17 18 19 20 21 22   20 21 22 23 24 25 26   17 18 19 20 21 22 23
23 24 25 26 27 28 29   27 28 29 30 31         24 25 26 27 28 29 30
30 31
      October               November               December      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
1  2  3  4  5  6  7             1  2  3  4                   1  2
8  9 10 11 12 13 14    5  6  7  8  9 10 11    3  4  5  6  7  8  9
15 16 17 18 19 20 21   12 13 14 15 16 17 18   10 11 12 13 14 15 16
22 23 24 25 26 27 28   19 20 21 22 23 24 25   17 18 19 20 21 22 23
29 30 31               26 27 28 29 30         24 25 26 27 28 29 30
                                             31


1년치 달력을 보여준다.

cal -V
cal from util-linux-2.12a


cal의 버젼 정보를 보여준다.

참고 : [포스트]
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 와아... 외계어다...
secret
그동안 콘솔 상에서 작업하면서 탭을 밥먹듯이..
아니 밥보다도 훨씬 많이 사용하면서도...
오늘 첨 보는 기능(?)을 보게 되었다.

아래와 같은 상태에서 탭을 쳣더니

grep 'FileN
grep 'FileName.ext'


이렇게 되는것이 아닌가...
음... 그럼... 이렇게 하면?


grep FileN
grep FileName.ext


음.. 이렇게 되네...
음.. 그럼 이렇게 하면?

grep "FileN
grep "FileName.ext"


그런데 다음과 같이 하면 아무런 반응이 없네...

grep `FileN


아무래도 `는 감싸져 있는 것의 명령어의 결과를 리턴하게 되어 있어서 그런가보다
음.. 인공지능 탭... -.-;;
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
  • sort
    • sort 명령은 알파벳순으로 정렬을 시켜 출력한다.
    • 기본적으로 숫자는 정렬되지 않는다. 숫자로 정렬하려면 다른 옵션을 사용해야 한다.
    • sort 명령은 다음과 같은 옵션을 갖는다.
      • -d : Sorts in phone-directory order
      • -f : Sorts lowercase letters in the same manners as uppercase letters
      • -i : Ignotes any characters outside the ASCII range
      • -n : Sorts in numerical order instead of alphabetical
      • -r : Reverses the order of the output
  • wc
    • wc는 "word count"로 파일의 라인수, 워드수, 문자수를 출력한다
wc fileone
14   14   58   fileone
      • -c : Shows only the number of bytes or characters
      • -l : Shows only the number of lines
      • -w : Shows only the number of words
wc -w fileone
14 fileone
  • fmt
    • 지정된 너비로 출력 결과를 조정한다. 디폴트 width는 75 characters이다. -w 옵션을 통해 너비를 조정할 수 있다.
fmt fileone
seoul   1111 incheon 2222 pusan   3333 taegu   4444 daejeon 5555

fmt -w10 fileone
seoul
1111
incheon
2222
pusan
3333
taegu
4444
daejeon
5555

* 기본 옵션은 -w이다. 따라서 fmt -w10옵션과 fmt -10은 같은 결과를 보인다.
  • tr
    • tr(translate)는 문자셋을 다른 것으로 변경할 수 있다. 예를 들어 모든 소문자를 대문자로 바꾸려면
tr '[a-z]' [A-Z]' < filetwo
1111    NEWYORK
2222    LA
33333    BOSTON
4444    SAN
5555    WASHINGTON

cf) tr은 반드시 두개의 charcter sets만을 받아들이며 파일명은 사용하지 않는다. 따라서 반듣시 파일의 이름은 리다이렉트 입력기호를 사용하거나 파이프를 사용해야 한다.
    • lower : All lowercase
    • uppper : All uppercase characters
    • print : All printable characters
    • punct : Punctuation characters
    • space : All white space
    • alnum : Alpha characters and numbers
    • digit : Numbers only
    • cntrl : characters control
    • alpha : Letters only
    • graph : Printable characters but not white space
예를 들어 위에서 사용한 명령은 다음과 같이 내릴 수도 있다.

tr '[:lower:]' [:upper:]' < filetwo

Associated Utilities
  • expand - Allows you to expand tab characters into spaces. The default number of spaces per tab is eight. but you can change that using the -t option
  • file - Looks at an entry's signature and reports what type of file it is
  • more - Display only one screen of output at a time
  • split - Chops a single file into multiple files. The default is that a new file is created for every 1,000 lines of the original file. Using the -b option, you can avoid the 1,000 line splitting and specity a number of bytes to be put into each output file, or you use -l to specify a number of lines
  • uniq - Examines entries in a file, comparing the current line with the one directly preceding it, to fild lines ar unique.
  • vi - One of the greatest file editors.
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

FMT, sort, tr, wc
받은 트랙백이 없고 , 댓글이 없습니다.
secret
※ 이 글은 [Why doesn't Linux need defragmenting? ] 의 내용을 번역한 것이다. 혹시 오류가 있으면 지적 부탁드린다.

왜 리눅스에선 조각 모음이 필요 없는가?

지겹게도 되풀이되어 나오는 질문 하나가 있죠: "왜 리눅스의 파일 시스템은 조각 모음이 필요 없나요?". 이 글을 통해 질문에 대한 해답을 한 방에 정리해 보고자 합니다.
단순히 수많은 기술적 설명들을 어설프게 더듬거리기보다, ASCII 그림을 사용하는 게 훨씬 효과적일 것 같습니다. 그런 고로, 전반적인 설명을 진행하는 데 이 그림을 사용하도록 하겠습니다:

more..


출처 : http://blog.empas.com/mycoffee/15302774
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 이 글과 관련하여 조금 안좋은 일들이 있어서 출처를 변경하였습니다.
    관련 포스트는... http://dust.tistory.com/311 를 참고하시기 바랍니다.
  2. 이 글과 관련하여 조금 안좋은 일들이 있어서 출처를 변경하였습니다.
secret
웹서버가 그렇게 성능(Xeon 2.4, 스카시HDD, 1G RAM)이 떨어지는 것도 아닌데... 60만명이 넘는 회원을 가진다음카페 회원들한테 메일한번 쏜 이후로 엄청난 접속에 거의 서버가 멎을 뻔 하였던 경험을 하였습니다.
그래서 생각한 것이 로드밸런싱인데... 허접한 제 실력에 로드밸런싱이란 것은 하기 힘든 작업이었죠.^^
그래도 어디서 들어본 것은 있는지 문득 생각난 것이 rsync와 Round-Robin이였습니다.^^
하지만 들어보기만 했지 직접 해 본적은 없어서... 어떻게 해야 할 지 난감하더군요..^^
어째든 맨땅에 헤딩은 그렇게 시작이 되었습니다.^^
여기서 많은 분들께 질문도 하고... 여기 저기 문서도 많이 찾아 봤습니다.^^

아직 완벽하지는 않은 듯 하니... 참고로 보시고..
물론 더 뛰어난 실력을 갖추신 분들은 더 좋은 로드밸런싱을 사용하시기 바랍니다. (skip... ^^)

그럼 하나 하나 제가 한 방법을 적어보도록 하겠습니다. 이하 존댓말 생략입니다.^^;


기존의 웹서버 A와 새롭게 추가하고자 하는 웹서버 B가 있다고 보자.

A서버의 아이피 : 192.168.1.1
B서버의 아이피 : 192.168.1.2

우선은 두 서버가 하나의 서버로 인식하기 위해서는 두 서버 모두 하나의 도메인을 가지고 있어야 한다. 따라서 DNS의 설정은 필수적이다.


1. DNS 설정(Round-Robin)

$TTL 86400
@ IN SOA ns.localhost.com. root.localhost.com. (
2003052901
21600
1800
1209600
86400)
IN NS ns.localhost.com.
IN A 192.168.1.1
www IN A 192.168.1.1
www IN A 192.168.1.2
www1 IN A 192.168.1.1
www2 IN A 192.168.1.2


위와 같이 zone 파일을 설정한다. 물론 named는 restart 해야 한다. 그러면 www.localhost.com이란도메인은 192.168.1.1과 192.168.1.2 두개의 아이피를 가지게 된다. 이 상태에서 nslookupwww.localhost.com이라고 하면... 다음과 같이 나온다.


Server: 168.126.63.1 --> 질의한 서버 아이피
Address: 168.126.63.1#53

Name: www.localhost.com
Address: 192.168.1.1 --> 결과값1
Name: www.localhost.com
Address: 192.168.1.2 --> 결과값2

이와 같이 나온다면 네임서버는 잘 설정한 것이다.^^


2. 웹서버의 설정

우선 두대 모두다 apache의 httpd.conf파일에 www.localhost.com 도메인을 설정해 두어야 한다. 만일이미 다른 것으로 사용하고 있다면 apache의 가성서버 설정을 이용해야 한다.(물론 여기서 가상호스트 설정까지 살펴보지는않겠다.^^) 기본적으로 두 서버의 DocumentRoot가 틀려도 되지만, 손 쉬운 관리를 위해서 경로를 같게 두는 것이 좋을것이다.

ex)
A서버의 DocumentRoot - /usr/local/localhostSource
B서버의 DocumentRoot - /usr/local/localhostSource


3. rsync의 설정

이제 두대의 서버가 갖춰지고 두대 모두 동일한 도메인을 가지게 되었다면 두 서버의 소스가 동일하도록 할 차례이다. 이러한 것을위해서 바로 rsync가 필요하다. rsync와 관련된 많은 참고문헌들을 뒤졌는데 결론적으로 '질주본능'님의 조언으로 성공하게되었다. 이 자리를 빌어 감사하다는 말씀을 전한다. '질주본능'님이 쓰신 rsync 관련 내용을 보시고 싶으신 분은http://www.phpschool.com/bbs2/inc_view.html?id=9985&code=tnt2&start=0&mode=search&field=title&search_name=&operator=and&period=all&category_id=&s_que=rsync를 참고하기 바란다.

우선 rsync 는 ssh를 이용한 방법과 873 포트를 이용한 방법이 있다. ssh를 이용한 방법이 조금더 안정성 면에서 좋을것이라는 생각에 시도하였지만 번번히 실패하게 되었고 결국에는 873포트를 이용한 rsync를 성공하게 되었다. ssh를 이용한rsync에는 비밀번호를 물어보게 되는데 파일을 이용하여 비밀번호를 자동으로 입력할 수 있다고 하는데 잘 되지 않았다.(성공한분은 비결좀 알려주시길...^^)


그럼 873포트를 이용한 rsync 설정 방법을 알아보도록 하자.

우선은 xinetd를 이용하여 rsync가 구동되므로 다음과 같이 설정을 해 줘야 한다.

#vi /etc/xinetd.d/rsync

# default: off
# description: The rsync server is a good addition to an ftp server, as it \
# allows crc checksumming etc.
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}


그 다음 rsync의 설정파일을 수정해 줘야 한다. rsync의 설정 파일은 rsyncd.conf 파일이다. 물론 이 파일은원래 존재하지 않는다.(원래 존재하는데 필자만 없었을 수도 있다.) 한가지 주의할 것은 설정파일 이름이 rsync.conf가아니라 rsyncd.conf란 것이다. 일부 tip에서 rsync.conf라고 하는데 이렇게 할 경우에는 rsync가 되지않았다.

#vi /etc/rsyncd.conf

[www]
path = /usr/local/localSource
comment = webservice-dir
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.1.2
max connections = 1
timeout = 300

여기서 [www] 은 닉네임이다. 즉 아래 설정 내용을 한번에 호칭하기 위해 사용하는 것이다. path는 rsync를 받고자 하는 소스가 존재하는 디렉토리를 정해주면 된다.
uid와 gid는 root로 하는 것이 좋다. nobody로 할 경우에는 일부 기능을 사용하지 못하는 경우가 발생했다.^^(정확한 이유는 모르겠다.^^)
hosts allow는 어느 아이피에서 rsync 서버에 붙어 소스를 가져가도록 허락할 것인지 설정해 주는 것이다.


rsync의 설정을 모두 마쳤다면 xinetd 데몬을 재 시작한다.

/etc/rc.d/init.d/xinetd restart


설정을 마치고 xinetd도 재시작했다면 873 포트가 열려 있는지 테스트 해보자.

#telnet localhost 873
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
@RSYNCD: 26
Localhost rsync server
sysadmin = root@localhost.com

위와 같이 나온다면 정상적으로 설정이 된 것이다. 물론 2번째로 소스를 받아갈 B서버에서도 테스트를 해 봐야 한다.


#telnet 192.168.1.1 873
Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
@RSYNCD: 26
Localhost rsync server
sysadmin = root@localhost.com


이렇게 되었다면 이제 rsync는 완전히 성공한 거나 다름 없다.
다음과 같이 테스트 해보자...^^

rsync -avzrt --delete 192.168.1.1::www /usr/local/localSource/


-a는 아카이브 모드. 심볼릭 링크, 속성, 퍼미션, 소유권 등 보존
-v 전송 상태를 보여줌
-z 전송시 압축을 함.
-r recursive (하위 디렉토리까지 포함)
-t 변경시간 전송 (이것이 없으면 전송한 시간으로 바뀜)

--delete A서버에는 없는데 B서버에 있다면 지우라는 명령

::는 873포트를 이용한 rsync에서 사용하며 ssh나 rsh를 사용할 경우에는 : 라고 써야 한다. 우리는 873 포트를 이용하므로 :: 라고 써야 한다.
www는 rsync 서버의 /etc/rsyncd.conf 파일에서 준 닉 이다. 바로 그 곳에서 설정한 path의 소스들을 /usr/local/localSource/ 디렉토리 밑으로 가져온다는 의미이다.

이해를 다 하셨다면 'Enter'를 힘차게 눌러보자.. 화면이 주르륵 하면서 소스를 가져오는 것이 보일 것이다.(안보이면 대략 낭패..-.-;)
처음에는 모든 파일을 다 가져오기에 조금 시간이 걸릴 것이다. 하지만 그 다음부터는 변경된 파일만 가져올 것이므로 그다지 부하는 걸리지 않을 것이다.^^ (예상하건데...)

이 명령어를 수동으로 매번 타이핑할 수 없으므로 /etc/cron.hourly/ 밑에 shell script 파일 하나를 만들자.

#vi rsync.sh

rsync -avzrt --delete 192.168.1.1::www /usr/local/localSource/

그리고 나서 chmod 700 rsync.sh 하면...^^ rsync 완료...


4. nfs의 설정

사이트에 소스만 있다면 이것으로 끝날 수 있다. 하지만 어찌 소스만 있으랴... nobody 권한으로 생성되는 각종 파일들(로그기록, 그림파일, 업로드 되는 파일들... 기타 등등)을 어떻게 두 서버에서 공유할 수 있단 말인가?
사용자가 운좋게 Round-Robin에서 잘 걸려서 A서버로 붙은 후 파일을 업로드 했다면 rsync로 샥~~ 파일을 가져오면되는데... B서버에 붙어서 파일을 올렸다면 어찌 해 볼 도리가 없다. 그렇다고 B서버에 rsync 서버를 설치하고 거꾸로 다시가져오는 것도 바보같은 짓이다.^^(설마 이렇게 하는 분들은 안계시겠죠?)

그래서 나온 것이 nfs이다. Network File System의 약자로 원격지에 있는 하드디스크를 마치 자신의 하드디스크인양 mount 해서 쓸 수 있는 것이다.
따라서 A서버에 있는 디렉토리를 B서버에서 마운트 한다면 어느 서버에서 파일을 올리던 한곳에 파일이 기록되게 되는 것이다. 물론파일서버를 하나 더 두고 A, B 서버 모두 마운트 해서 사용해도 될 것이다(이렇게는 해 보지 않았다^^)

한가지 주의할 사항은 파일이 쌓이는 곳이 DocumentRoot 밖에 있어야 한다는 것이다. 그래야지만 rsync와 상관없이 실시간으로 파일을 공유할 수 있기 때문이다.

필자는 /localData 란 디렉토리를 하나 만들고 이곳에 nobody 권한으로 생기는 모든 파일을 잘 정리해서 사용하고 있었다.
그럼 nfs의 설정을 하나하나 살펴보도록 하자.


우선은 rsync와 마찬가지로 어느 디렉토리를 어떤 아이피와 공유할 것인지를 설정해야 한다. 따라서 A서버에서 다음과 같이 설정해 줘야 한다.

#vi /etc/exports

/localData 192.168.1.2(rw,no_root_squash)


여기서 /localData란 마운트 당할(?) 디렉토리명... 192.168.1.2는 접근 허용할 아이피, rw는 일고 쓰기가능토록 권한을 주는 것..., no_root_squash는 B서버의 root도 해당 디렉토리에서 A서버의 루트 권한을 주는것(맞나?)이다. 참고로 아이피는 도메인으로 설정해 줘도 되는데... 우리는 A서버와 B서버의 도메인이 같으므로 아이피로 하도록한다.
이렇게 설정을 한 다음... nfs 데몬을 재시작 한다.

#/etc/rc.d/init.d/nfs restart

이렇게 하면 5개인가의 데몬이 주르륵 재시작된다.(stop, start 합치면 10개의 ok 사인이 떨어진다.^^)

이상태에서 바로 B 서버에서 mount를 하면 대략 난감이다. ^^(이거때문에 몇일을 헤메었는지 모른다.^^;;)
이렇게 다 했다면 가장 중요한 데몬 하나를 죽여줘야 한다.^^

#/etc/rc.d/init.d/nfslock stop

이놈이 뭐하는 놈인지 모르겠는데, 이 데몬이 살아 있다면 죽어도 B서버에서 A서버의 /localData를 mount 하지 못할 것이다.(하는 분이 나타난다면... 안되는데..^^;;)
어째든 여기까지 했다면 거의 다 성공한 것이다.

하지만 B서버에서도 설정해 줘야 할 것이 몇개 있다.^^

다음과 같이 dns에 질의하지 않고 바로 연결할 수 있도록 hosts파일을 편집해 줘야 한다.(성능상 좋다고 한다^^, hosts파일의 역할을 모르시는 분은 검색..^^)

#vi /etc/hosts

192.168.1.1 localhost.com localhost.com


그다음 마운트!!!

#mount -t nfs localhost.com:/localData /localData/

한번 마운트가 잘 되었는지 확인해 보자...^^

#cd /localData
#ls -al
drwxr-xr-x 8 nobody nobody 4096 2월 23 17:57 .
drwxr-xr-x 20 nobody nobody 4096 2월 24 13:10 ..
drwxr-xr-x 2 nobody nobody 4096 2월 25 10:44 adminCharge
drwxr-xr-x 2 nobody nobody 4096 2월 26 16:48 cafeConn
drwxr-xr-x 38 nobody nobody 4096 2월 11 13:23 history
drwxr-xr-x 38 nobody nobody 4096 7월 22 2003 ipLog
drwxr-xr-x 2 nobody nobody 8192 2월 27 2004 joinWord
drwxr-xr-x 2 nobody nobody 4096 1월 2 00:06 userAgent

이 다음 B서버에서 접속한 경우 nobody 권한으로 기록되는 파일들이 /localData에 제대로 기록되는지 테스트만 해 보면 된다.


마침...

현재 이런 셋팅에서 테스트 해본 결과 잘 되고 있습니. 다만 로드밸런싱을 하는 프로그램이 따로 없고 네임서버를 이용한Round-Robin을 이용하다 보니 A, B 서버의 사양에 상관없이 균등하게 배분이 되며 한번 A서버에 붙은 사람은 B 서버로잘 옮겨오지 못하는 경우가 발생합니다.
그렇게 큰 문제는 아니라고 생각되지만, 불편하신 분들은 더 좋은 로드밸런싱 프로그램을 사용하길 바랍니다. 아마도 돈을 조금 지불해야 되지 않을까 십네요^^
그리고 더 좋은 무료 로드밸런싱 제품이 있다면 저한테도 좀 알려주시기 바랍니다.^^


참고로 이 글은 제가 직접 쓴 글이므로(물론 많은 분들의 도움이 있었지만..^^) 옮겨가실 때에는 출처를 밝혀 주시고... 이대로 따라 하시다가 서버가 맛이 간다거나 해도 저의 책임이 없음을 미리 밝히는 바입니다.^^;

그럼 즐프하시고...
좋은 시간 되세요.
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
음.. 어느날 사무실 직원 한명이 win XP에서 쓰던 하드에 XP 서비스팩 2를 잘못 설치해서 아예 부팅도 안되고 다른 윈도우에서도 인식이 안되게끔 하드를 망가트린 적이 있었습니다.
저는 리눅스를 깔 때 아주 많은 포맷 형식을 지원하길래... 그냥 마운트 시키면 될 줄 알고 마운트를 시도 했죠. 그랬더니.. -.-;; 커널에서 ntfs를 지원 안한다는 말만.. ^^
다른 분의 도움을 얻어 ntfs를 마운트 하는데 성공했습니다. ^^

그래서 그 방법을 알려드리고자.. ^^
이미 알고 있는 분들은 역시 pass ^^
레드햇 7.3, 커널 버전 2.4.20-28.7을 기준으로 설명 드립니다.


1. 자신의 커널 버전을 확인

uname -r

2. cpu 타입 확인

rpm -q --queryformat "%{ARCH}\n" kernel

저같은 경우는 커널 버전 2.4.20-28.7에 cpu 타입은 i686이었습니다. ^^


2. http://linux-ntfs.sourceforge.net/rpm/redhat7.html 에서 관련 자료를 다운로드 받습니다.

위에서 커널 2.4.20-28.7에 cpu 타입이 i686이었으므로 i686-smp을 다운로드 받았습니다. ^^


3. rpm 파일을 설치합니다.

rpm -ihv kernel-ntfs-2.4.18-14.i686.rpm

Preparing... ############################### [100%]
1:kernel-ntfs ############################### [100%]


4. 모듈을 올립니다.

/sbin/modprobe ntfs


5. 파일 시스템이 지원하는지 확인합니다. ^^

cat /proc/filesystems

이곳에 ntfs가 있다면 성공한 것입니다.


6. 자신의 ntfs 하드를 체크합니다.

/sbin/fdisk -l

저 같은 경우는 /dev/hdc1 이더군요.. ^^


7. 마운트 할 디렉토리를 생성합니다.

mkdir /mnt/windows


8. 마운트 합니다. ^^

mount /dev/hdc1 /mnt/windows


9. 확인해 봅니다. ^^

cd /mnt/windows
ls


목록이 나오면 성공... ^^
뭐 긴 내용은 아니지만 조금 해메면서 알아낸 내용이라... 참고하시라고.. ^^

그럼 오늘도 즐거운 하루.. ^^

참 그리고 하시다가 에러 나는 것은... http://linux-ntfs.sourceforge.net/rpm/help.html 를 참고하세요. ^^
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
  • cut
    • 데이터 필드를 칼럼별로 구분하기 위해 제공되는 tool 이다. 디폴트 delimiter는 tab이며 -f 옵션을 통해 정의할 수 있다.
cat test
one   two   three
four   five   six
seven   eight   nine

cut -f2 test
two
five
eight

cut -f1,3 test
one   three
four   six
seven   nine

    • -f 옵션 외에 다음과 같은 옵션들이 있다.
      • -c : Allows you to specify characters instead of fields
      • -d : Allows you to specify a delimiter other than the tab
  • paste
    • cut 명령어가 파일로부터 내용을 선택하는 것이라면 paste나 join 명령어는 field를 combine 하는데 사용된다.
cat fileone
seoul
incheon
pusan
taegu
daejeon

cat filetwo
Newyork
LA
boston
san
washington

paste fileone filetwo
seoul   Newyork
incheon   LA
pusan   boston
taegu   san
daejeon   washington

    • -d 옵션을 사용함으로써 구분시 Tab 문자가 아닌 정의된 문자를 사용할 수 있다.
paste -d"." fileone filetwo
seoul.Newyork
incheon.LA
pusan.boston
taegu.san
daejeon.washington

    • -s 옵션을 사용하면 다음과 같이 출력할 수 있다.
paste -s fileone filetwo
seoul   incheon   pusan   taegu   daejeon
Newyork   LA   boston   san   washington

paste -s -d"." fileone filetwo
seoul.incheon.pusan.taegu.daejeon
Newyork.LA.boston.san.washington

  • join
    • paste 명령의 기능 확장버전이라 생각할 수 있다
join fileone filetwo
    • 결과는 아무것도 출력되지 않는다. join 명령어는 먼저 파일들간의 공통 field를 찾고 기본적으로는 첫번째 필드를 공통으로 찾는다. 예를 들어 fileone과 filetwo의 첫번째 필드를 숫자로 채워놓으면
cat fileone
1111   seoul
2222   incheon
3333   pusan
4444   taegu
5555   daejeon

cat filetwo
1111   Newyork
2222   LA
3333   boston
4444   san
5555   washington

join fileone filetwo
1111   seoul Newyork
2222   incheon   LA
3333   pusan   boston
4444   taegu   san
5555   daejeon   washington

    • 반드시 첫번째 필드만을 공통필드로 찾게 할 필요는 없다
cat fileone
seoul   1111
incheon   2222
pusan   3333
taegu   4444
daejeon   5555

cat filetwo
1111   Newyork
2222   LA
3333   boston
4444   san
5555   washington

join -1 2 -2 1 fileone filetwo
1111   seoul   Newyork
2222   incheon   LA
3333   pusan   boston
4444   taegu   san
5555   daejeon   washington

    • -1 옵션은 첫번째 파일을 의미하며 -2 옵션은 두번째 파일을 의미한다.

신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
  • cat
    • -b : Numbers lines
    • -E : Shows a dollar sign($) at the end of each line
    • -T : Shows all tabs as ^I
    • -v : Shows nonprinting characters except tabs and carriage returns
    • -A : Does the same as -v combined with -E and -T
  • tac
    • cat과 반대의 어순에서 알 수 있듯이 파일의 내용을 반대 순서로 보여준다.
  • nl
    • nl은 라인에 넘버를 사용해 보여주며, cat 명령어에 -b를 붙인 것과 동일하다.
  • head
    • 파일의 첫 부분을 보여준다. 디폴트로 처음부터 10라인 까지 보여준다
head -3 numbers
one
two
three

  • tail
    • 파일의 아래부분부터 보여준다.
    • head와 마찬가지로 10줄 보여주며, -3 하면 제일 아래 3줄을 보여준다
tail +16 numbers
=> 16줄부터 그 아래로 다 보여준다.
    • -f 옵션을 사용하면, 마지막 10라인을 보여주면서 쉘로 나오지 않고 계속 머무른다. 끝내기 위해서는 interrupt 신호(ctrl+c)를 보내야 하며, 주로 로그파일 모니터링에 사용한다.



신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
스쿨의 누군가가 질문해서...
전에 있던 쉘로 답해주고 나니... 또 다른 흥미로운 팁도 나타나더라 ㅎㅎ

1. 2일전 구하기
date --date '2 day ago' +%Y%m%d

2. 2일을 포함해서 더 오래된 파일 목록 구하기
find . -mtime +2

응용은 각자 알아서 ^^

그런데 mtime하고 ctime하고 차이를 모르겠네 -.-;;
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글  3개가 달렸습니다.
  1. 사실 이 팁은 예전에 써 놓은 팁인데... 4te서버 날라가면서 다시 붙여넣기 해서 만든 내용입니다.
    mtime은 실제 파일을 수정한 시간, ctime은 mv, touch 등으로 건드리기만 해도 바뀌는 시간입니다.
  2. ^^ csh 에서는 date -v -2d +%Y%m%d 이렇게 하면 됩니다.
secret
이메일이 들어가 있는 필드를 검색하는 부분이 있었다.
결과는 뒤에 '@naver.com'과 같은 부분을 제하고 보여주는 것이였는데...
아무 생각없이...

"email LIKE '%$searchWord%' 라고 했더니... 바로 QA 팀에 걸렸다 ㅎㅎ

n, a, v, e, r, ., c, o, m 중 아무 글자로나 검색하면...
모든 내용이 다 나오게 되니 말이다 ㅎㅎ

그래서 MySQL 메뉴얼 찾아서 검색해보니... SUBSTRING_INDEX 라는 좋은 놈이 있더라...

SELECT email FROM table
WHERE SUBSTRING_INDEX(eamil, '@', 1) LIKE '%$searchWord%';
신고

WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret