'linux'에 해당되는 글 27건

  1. 2009.02.12 contab 메일을 받고싶지 않을때.
  2. 2009.01.29 vi문자열이 깨지는경우
  3. 2009.01.13 실행파일이 실행이 안될때/ [도스] ... 1
  4. 2008.04.24 swap 에대한 생각
  5. 2008.03.07 vi명령어
  6. 2008.02.28 regular expression BY ruby
  7. 2008.01.22 crontab
  8. 2008.01.21 apache에 작업공지 내기
  9. 2008.01.18 rsh 설정하기
  10. 2008.01.12 최근에 만든 shell 프로그램

root가 90%나 사용하고 있다!
왜일까?

이유는 crontab에서 구동하고있는 ruby process에서 out으로 찍어낸 구문들이 모두 메일로
보내지기위해 쌓이고 있었다.

범인은 var/

var는 생각보다 많은 일을한다.
cronab이 수행하는 작업도 로그로 남기고 메일도 보내고.. 등등등.
/var/log/spool/mqeue 를 살펴봤다.
6G!!

범인은 이녀석이였다.
그래서 찾아보니  crontab에서 메일을 받지 않겠다는 설정을 하면 된다.

vi /etc/crontab
   > MAILTO=""


 or

crontab -e
   > MAILTO=""


vi문자열이 깨지는경우에는 언어타입이 맞지 않기 때문이다.
해당 문자열을 맞추는 방법으로 아래 방법을 소개한다.

iconv 를 이용하는 방법
   > iconv -f EUC-KR -t UTF8 tmp.txt > tmp_utf.txt


-rwxr-xr-x  1 neouser adm  45  1월 13 15:11 test.rb
-rwxr-xr-x  1 neouser adm  42  1월 13 15:12 test2.rb

여기 2개의 파일이 있다.
같은 내용을 담고있는 2개의 파일인데 파일 size가 조금 차이가 난다.
test.rb는 ftp로 전송한 파일이고 test2.rb는 test.rb파일을 그데로 복사해서 다시 만든 파일이다.

실행을 하면 아래와 같다.
test.rb : --> : bad interpreter: 그런 파일이나 디렉토리가 없음 (비정상)
test2.rb : --> 112313121321 (정상)

왜그럴까?
이유는 test.rb는 windows에서 만들여졌기 때문이다.

test.rb파일을 vi로 열어보면 하단에 힌트가 나온다 ""test.rb" [도스] 3L, 45C"
파일의 포멧을 바꿔줘야 한다.

1. vi test.rb
2. :set ff=unix


별로 어렵지 않다.
그냥 vi에서 파일 포멧을 바꿔주기만 하면 된다.

-rwxr-xr-x  1 neouser adm  42  1월 13 15:11 test.rb
-rwxr-xr-x  1 neouser adm  42  1월 13 15:12 test2.rb

다시 목록을 보고 ls을 해보면 파일 size가 동일해진것을 볼 수있다.







swap 에대한 생각

linux 2008. 4. 24. 17:27
데모에서 보았듯이 시스템에 물리적 메모리가 부족하면 퍼포먼스는 영향을 받습니다. 왜냐하면 메모리 페이지 검색 때문입니다. 그러나 시스템의 가상 스왑 공간이 부족하면 물리 메모리 부족에 비해 훨씬 더 심각하게 퍼포먼스에 영향을 줍니다. 보통 물리 스왑 공간은 물리 메모리의 0.5 에서 1.5 배 정도의 사이즈가 되어야 합니다.

http://sdnkorea.com/blog/547

vi명령어

linux 2008. 3. 7. 15:22

v(블럭지정) > > >zf(묶기) ,zx(풀기)
^v(블럭지정) > -> zo(펼치기) , zc(다시닫기)

----------------------------------------------------------------------
set ft=php
windows
set bg=dark
set sw=2
set ts=2
set nobackup
set nu
set ai
colors darkblue
set fdm=marker
set guifont=굴림체:h16:b:cHANGEUL
vimrc
set nu
set bg=dark
set ai
set fdm=marker

레지스터 저장 방법
shift + v (블럭 설정)
"ay 레지스터 a에 저장

:register


vi 편집기

sh 잠시 프롬프트로 빠짐
ctrl + v 앞쪽만 자르기
set noai 자동정렬 해제

zf : 라인 줄이기 zc
zx :라인 풀기 zo

> 화면이동
^w

> 글 입력
a : 커서 위치의 다음 칸부터부터 끼워넣기(append)
A : 커서가 있는 줄의 끝에서부터 끼워넣기
i : 커서 위치부터 끼워넣기(insert)
I : 커서가 있는 줄의 맨 앞에서부터 끼워넣기
o : 커서 바로 아래에 줄을 만들고 끼워넣기(open line)
O : 커서 바로 위에 줄을 만들고 끼워넣기

> 커서 이동
h : 한칸 왼쪽으로 이동
l : 한칸 오른쪽으로 이동
j : 한줄 아래로 이동
k : 한줄 위로 이동
w : 다음 단어의 첫 글자로 이동
W : 다음 단어의 첫 글자로 이동
b : 이전 단어의 첫 글자로 이동
B : 이전 단어의 첫 글자로 이동
e : 단어의 마지막 글자로 이동
E : 단어의 마지막 글자로 이동
^ : 그 줄의 첫 글자로 이동
$ : 그 줄의 마지막 글자로 이동
0 : 그 줄의 처음으로 이동
<CR> 다음 줄의 첫 글자로 이동

+ : 다음 줄의 첫 글자로 이동
- : 윗줄의 첫 글자로 이동
( 이전 문장의 첫 글자로 이동 ) 다음 문장의 첫 글자로 이동
{ 이전 문단으로 이동 } 다음 문단으로 이동


> 글 수정
r : 커서 위치의 한 글자 교체
R : 커서 위치부터 <ESC>를 누를때까지 다른 글자로 교체
s, cl : 커서 위치의 글자를 한개를 여러 글자로 교체
ch : 커서 바로 앞의 글자를 한개를 여러 글자로 교체
cw : 커서 위치의 한 단어를 교체
c0 : 커서 위치부터 줄의 처음까지 교체
C, c$ : 커서 위치부터 줄의 끝까지 교체
cc : 커서가 있는 줄을 교체
cj : 커서가 있는 줄과 그 다음 줄을 교체
ck : 커서가 있는 줄과 그 앞줄을 교체


> 글 삭제
x, dl : 커서 위치의 글자 삭제
X, dh : 커서 바로 앞의 글자 삭제
dw : 한 단어를 삭제
d0 : 커서 위치부터 줄의 처음까지 삭제
D, d$ : 커서 위치부터 줄의 끝까지 삭제
dd : 커서가 있는 줄을 삭제
dj : 커서가 있는 줄과 그 다음 줄을 삭제
dk : 커서가 있는 줄과 그 앞줄을 삭제


> 복사 & 붙이기
yw : 커서 위치부터 단어의 끝까지 복사
y0 : 커서 위치부터 줄의 처음까지 복사
y$ : 커서 위치부터 줄의 끝까지 복사
yy : 커서가 있는 줄을 복사
yj : 커서가 있는 줄과 그 다음 줄을 복사
yk : 커서가 있는 줄과 그 앞줄을 복사
p : 커서의 다음 위치에 붙여넣기
P : 커서가 있는 위치에 붙여넣기


> 기타
u : 작업 취소(undo)
U : 그 줄에 행해진 작업 모두 취소
Ctrl+r : 작업 재실행(redo)
. : 조금 전에 했던 명령을 반복
J : 현재 줄과 아래 줄을 연결
~ : 대문자를 소문자로, 소문자를 대문자로 바꿈
% : 괄호의 반대쪽 짝으로 이동
Ctrl+l : 현재 화면을 지우고 다시 그림
Ctrl+g : 파일에 관한 정보를 표시


> 화면 이동
H : 커서를 화면의 맨 위로
z<CR> : 현재 줄을 화면의 맨 위로
M : 커서를 화면의 중앙으로
z. : 현재 줄을 화면의 중앙으로
L : 커서를 화면의 맨 아래로
z- : 현재 줄을 화면의 맨 아래로
[n]H : 커서를 위에서 [n]번째 줄로 [n]L 커서를 아래에서 [n]번째 줄로
Ctrl+u : 반 화면 위로 스크롤
Ctrl+b : 한 화면 위로 스크롤
Ctrl+d : 반 화면 아래로 스크롤
Ctrl+f : 한 화면 아래로 스크롤
gg, 1G 문서의 맨 처음 줄로
G : 문서의 맨 마지막 줄로
[n]G [n]번째 줄로 이동


> 패턴검색, 교체
/[pattern]<CR> : 현재 위치에서부터 아래 방향으로 패턴 검색
? [pattern]<CR> : 현재 위치에서부터 위쪽 방향으로 패턴 검색
n : 검색하던 방향으로 계속 패턴 검색
N : 검색하던 반대 방향으로 계속 패턴 검색

:s/old/new<CR> : 현재 줄의 처음 old를 new로 교체
:s/old/new/g<CR> : 현재 줄의 모든 old를 new로 교체
:1,20s/old/new/g<CR> : 1부터 20번째 줄까지 모든 old를 new로 교체
:-2,+4s/old/new/g<CR> : 커서 2줄 위부터 4줄 아래까지 old를 new로 교체
:%s/old/new/g<CR> : 문서 전체에서 old를 new로 교체
:%s/old/new/gc<CR> : 문서 전체에서 old를 new로 확인하며 교체
:g/pattern/s/old/new/g<CR> : pattern이 있는 모든 줄의 old를 new로 교체
:g/pattern/s//new/g<CR> : :%s/old/new/g<CR>과 동일


> 끝줄모드
:q<CR> : vi를 종료함
:w<CR> : 편집중인 문서를 저장
:w [file]<CR> : 편집중인 문서를 [file]로 저장
:w >> [file]<CR> : 편집중인 문서를 [file]에 덧붙여서 저장
:e [file]<CR> : [file]을 불러옴
:e#<CR> : 이전에 편집하던 파일을 불러옴
:e%<CR> : 현재 파일을 다시 불러옴, 즉 저장하지 않은 작업 취소
:r [file]<CR> : [file]을 커서위치에 끼워넣기
:set [option]<CR> : [option]을 켜기
:set [nooption]<CR> : [option]을 끄기
:![command]<CR> : [command] 실행
:r ![command]<CR> : [command] 실행 결과를 끼워넣기

regular expression BY ruby

linux 2008. 2. 28. 14:22

ine = "220.124.78.197 3722 56SvDz6Oq6W - [02/Feb/2008:00:00:00 +0900] \"GET /dkflfkdrhrp/?_top_neouser=go2myblog HTTP/1.1\" 200 996 \"http://aa.aa.aa./_test/_top/neouserTop.do\" \"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\""
logArray = line.scan(/([0-9]+\.[0-9]+\.[0-9]+.[0-9]+)\s([0-9]+)\s([0-9a-zA-Z]+)\s([0-9a-zA-Z\-])\s\[(.*)\]\s"(.*)"\s([0-9]+)\s([0-9]+)\s"(.*)"\s"(.*)"/)


 

puts "logArray Length : #{logArray.length}"
  for i in 0..logArray.length-1
   for j in 0..logArray[i].length-1
    puts "[#{i}][#{j}] [#{logArray[i][j]}]"
                        end
                end

결과
[0][0] [220.124.78.197]
[0][1] [3722]
[0][2] [56SvDz6Oq6W]
[0][3] [-]
[0][4] [02/Feb/2008:00:00:00 +0900]
[0][5] [GET /dkflfkdrhrp/?_top_neouser=go2myblog HTTP/1.1]
[0][6] [200]
[0][7] [996]
[0][8] [http://aa.aa.aa./_test/_top/neouserTop.do]
[0][9] [Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)]

crontab

linux 2008. 1. 22. 16:00
/etc/crontab -e
0  22 *  *  * /etc/backup/neouser/neouser_backup.sh >> /etc/backup/neouser/cron_log

분시 일월년 실행명령






RewriteEngine on
RewriteRule .*$ /neouser_close.html [PT]
..
..
DocumentRoot /neouser/thejoa/html


아! 너무 민망하다.
apache 공부도 더 해야할것 같다.
시스템 upTime이나 apachetop도 새롭게 등장했다는데 아직도 여기다니..
점점 모르는게 죄가 되어간다.

rsh 설정하기

linux 2008. 1. 18. 15:55

> from 호스트에서 to호스트의 정보를 입력합니다.  (추가)
[neousertest(neouser):/neouser>vi /etc/hosts
10.***.***.10  neouserwork-1
10.***.***.11 neouserdb-1


> from 호스트에서 .rhosts를 수정합니다. (추가)

[neousertest(neouser):/neouser>vi .rhosts
10.***.***.10 hanadmin
10.***.***.11 hanadmin


> to 호스트에서 from 호스트 정보를 추가합니다. (추가)
[neouserwork-1(neouser):/neouser>vi /etc/hosts.allow
# neousertest
in.telnetd:10.***.***.9
in.ftpd:10.***.***.9
in.rshd:10.***.***.9
in.rlogind:10.***.***.9
rsync:10.***.***.9


> to 호스트에서 from 호스트 정보를 추가합니다. (추가)

[neouserwork-1(neouser):/neouser>vi /etc/hosts
10.10.198.60   neouserwork-1


 

shell 내부에서 외부명령을 실행시키고 해당 명령의 결과값을
파싱해서 내가원하는 데이터가 수집되었다면 새로운 수집 txt를 만들어 내는것 입니다.

#!/bin/bash

READLOCATION=/data2/test/neouser/work/
READDATA="testuser_id.txt testuser_id.txt"
#READDATA="neousertest.txt"

for readdata in $READDATA
do
        readcount=0
        devcount=0
        while read line
        do
                TESTINFO=`outcommand -n $line`
                if [ "$TESTINFO" == "" ]
                then
                        echo $line >> "not_"$readdata
                else
                        ID=`echo $TESTINFO | awk '{print $3}'`
                        NAME=`echo $TESTINFO | awk '{print $6}'`
                        echo $line $ID $NAME >>"ok_"$readdata
                fi

                let "readcount = $readcount + 1"
                let "devcount = $readcount % 100"

                if [ $devcount == 0 ]
                then
                        echo "read count $readdata $readcount"
                fi
        done < $readdata
done

1 2 3 

글 보관함

카운터

Total : / Today : / Yesterday :
get rsstistory!