카테고리 없음 2007. 2. 13. 05:30

[Flash] http://blog.tini4u.net/attachment/bk200000000000.swf



흑.. 감자도리 너무 귀여워 ㅜ.ㅜ
posted by 티니
:
카테고리 없음 2007. 1. 26. 20:54
어제 새벽에 아파치 1.3.37에 LFS가 가능하도록 삽질하고 있는데..
평소엔 그냥 넘겼던것이 어제는 왜 그리도 소음이 신경이 쓰이던지...
그래서 질렀다-_-

잘만 CNPS9500 AM2 - 46,000원
하이로 쿨에이지 사일런스 80 DX2 세트 - 7,000원
하이로 쿨에이지 사일런스 120 DX2 세트 - 10,000원

CPU 쿨러야 잘만이 가장 잘 나오는 제품이니 당연히 선택에 고민할 이유가 없었다.
어제보니 9500 말고 9700 이라는넘이 나왔던데..
크기가 살짝 더 커졌다-_-;;
9500도 아슬아슬 할거 같은데 9700은 아무리 봐도 무리일듯..
가격도 비싸고.. 그래서 9500으로 선택했다.

이제 구입하자마자 엄청난 굉음을 지르던 케이스 전면팬 120mm 짜리-_-;
이넘으로 말하자면.. 굉장한 넘이다;;
PC 구입하고 집에와서 전원넣었는데.. 바둥형과 나를 놀래게 한 그소리-_-;
바로 전원 플러그를 빼도록 만든 아주 대단한넘이다.

그래서 같이 지르기로 마음먹었는데.. 문제는 이넘이다..
잘만이 CPU 쿨러는 잘만드는데.. 케이스 쿨러는 완전히 즐이다-_-;;
어떤넘을 지를까 한참을 생각하다가..
예전에 투명케이스와 파란색 날개의 깔끔한 모양으로 나의 눈길을 사로 잡았던
쿨에이지 제품이 생각이 났다.

스펙이 어떻게 되는지 좀 확인하고.. 노이즈 확인도 하고..
RPM에 비해서 노이즈도 적당한듯해서 결국 이넘으로 선택..
최근 살짝살짝 노이즈를 내고 있는 80mm 후면팬도 같이 질렀다.

오늘 오후 2시반쯤 되니 이넘들이 이쁘장하게 보장되어서 도착했다.
교체작업 고고싱..

교체하고 테스트 하니 이제 좀 살거 같다.
나름대로 조용하네..

물론 내가 소음에 좀 많이 민감한 편이라 내 기준에서는 ★★★★☆ 정도이지만..
쿨러를 교체하기 전과 비교하면 ★★★★★ 이정도다.
아주 대 만족이라는 말이지.

쿨러를 교체하고 PC를 켠지 약 3시간쯤 지났는데..
난 CMOS에서 Silence 모드로 설정해서 쓰기 때문에 RPM이 높지 않은편임에도 불구하고
메인보드,CPU,VGA,HDD 온도가 전체적으로 약 3~5도 정도 떨어졌다.
온도는 크게 달라진점이 없다고 생각하고...
확실히 달라진건 RPM이다.
CPU 4800RPM -> 1750RPM (92mm)
PAN1 2800RPM -> 1749RPM (80mm)
PAN3 1600RPM -> 882RPM (120mm)
오우.. 확실히 엄청나게 떨어진것을 볼 수 있다.
RPM이 저렇게 많이 떨어졌어도 온도가 오히려 하락했다는것은..
나를 매우 만족시켜주는 일이 아닐 수 없다.

위 수치를 바탕으로 각 쿨러사의 스펙을 비교해보니..
대략적으로 CPU는 23dB 정도 노이즈가 있고..
PAN1은 18dB 정도.. PAN3는 15dB 정도 노이즈가 있는듯 하다.
물론 정확한건 아니고 그냥 내가 대략적으로 계산한 수치다.

CPU 쿨러는 1300RPM에서 18.0dB, 2650RPM에서 27.5dB의 노이즈가 있고,
팬쿨러는 80mm가 2000RPM에서 19dB이고, 120mm가 1200RPM에서 17dB라고
각 회사의 제품스펙에 나와있었다.
그러니 대충 맞지 않겠뉘? ㅋㅋㅋㅋㅋㅋ
posted by 티니
:
Language 2007. 1. 24. 09:57
vsftpd가 나온지 수년이 흘렀지만.. 아직도 제대로 된 ftpwho가 없다.
구글링을 해봐도 ps ax의 조합이나 log를 이용해서 처리하는 방법뿐..
그럼 실시간 처리가 안돼잖아...
그래서 한번 만들어 봤다.
결과는??
대 만족 *^---------------------,.-----------------------^*

#!/bin/bash
 
##########################################################################
#  Script Name  : ftpwho                                                 #
#  Description  : ProFTPD의 ftpwho 와 비슷하게 구현된 스크립트           #
#  Version      : 1.0.3                                                  #
#  License      : Hyeok-Jung, KIM (Nick. 티니)                           #
#  WebSite      : LTN(Linux.Tini4u.Net)                                  #
#  E-Mail       : sky (at) tini4u.net                                    #
#  LastUpdate   : 2007. 01. 23.                                          #
#  Message      : 이 스크립트는 VsFTPD의 독립모드(Standalone) 기준으로   #
#                 제작되었습니다.                                        #
#                 사용/배포/수정은 자유이나, 이부분은 삭제하지 마십시요  #
##########################################################################
 
str_stat=`ps -ef | grep 'vsftpd' | grep 'LISTENER' | sed -e 's/.*vsftpd: //'`
 
if [ "$str_stat" ]; then
        usr_cnt=`ps -ef | grep 'vsftpd' | grep 'connected' | wc -l`
        if [ "$usr_cnt" != "0" ]; then
                echo "♧ 현재 접속된 사용자는 총 $usr_cnt 명 입니다."
                echo "-----------------------------------------------"
                ps -ewwf \
                        | grep 'vsftpd' \
                        | grep -v 'grep' \
                        | grep -v 'sed' \
                        | grep -v ': connected' \
                        | grep -v 'LISTENER' \
                        | sed -e 's/.*vsftpd: //' \
                        | sed -e 's/:/\t| Status:/' \
                        | sed -e 's/STOR/UpLoad =>/' \
                        | sed -e 's/RETR/DownLoad =>/' \
                        | sed -e 's/\<\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\>/IP: \1/' \
                        | sed -e 's/\//\t| ID: /'
        else
                echo "♧ 현재 접속된 사용자가 아무도 없습니다."
        fi
else
        echo "VsFTP 데몬이 실행되고 있지 않습니다. VsFTP 데몬을 실행해주시기 바랍니다."
fi
posted by 티니
:
리눅스 2006. 12. 6. 22:44
약 2개월간의 데이터 수집끝에 최근 아파치 access 로그에 남는 referer 수집이 대략적으로 끝났다.
이 referer를 참고해서 검색엔진들의 봇을 막을 수 있을 것이다.
(물론 이것은 일시적이고 한정적이기 때문에, 계속해서 추가되어져야 되겠지만 말이다.)

액세스 로그를 분석했을 경우 나오는 리스트
웹로그 분석기로 분석한 이름 = 실제로 액세스 로그에 남는 이름
MS Internet Explorer = MSIE
Firefox = Firefox
Opera = Opera
Netscape = Netscape
Firbird (Old Firefox) = Firbird
K-Meleon = K-Meleon
Nokia Browser (PDA/Phone browser) = Nokia
Konqueror = Konqueror
Safari = Safari
Curl = Curl
Wget = Wget
Unknown robot (identified by 'robot') = NaverBot
Yahoo Slurp = Yahoo! Slurp
ConveraCrawler = ConveraCrawler
EchO! = BonEcho
GigaBot = GigaBot
findlinks = findlinks
MSNBot = MSNBot
Unknown robot (identified by 'bot/' or 'bot-') = msnbot-media
Alexa (IA Archiver) = Alexa Toolbar
Python-urllib = Unknown (딱 한번 긁혔던데 로그가 지워져서 모르겠음-_-;)
SurveyBot = SurveyBot
psbot = psbot
Googlebot = Googlebot
Feedfetcher-Google = Feedfetcher-Google
OufoxBot = OufoxBot
Netcraft = Netcraft

대충 보면 알겠지만 MSIE부터 Wget까지는 정상적인 브라우저들이다.
봇의 시작은 NaverBot 부터..
이게 굉장히 웃긴게 웹로그 분석기(awstats 기준)에서 보여주는 이름과
실제로 액세스 로그에 남는 이름이 서로 다른것들이 가끔씩 있다.
따라서 웹로그 분석기에서 출력해주는 이름을 가지고 막으면 대략 낭패를 볼 수 있으므로
주의를 해야할 것이다.

현재 tini4u.net 서버는 아래와 같이 차단하고 있다.
## No Get.
BrowserMatch "WebZIP" go_out
BrowserMatch "Teleport" go_out
BrowserMatch "NamoWebEditor" go_out
BrowserMatch "WebSymmetrix" go_out
BrowserMatch "GetRight" go_out
BrowserMatch "WebCopier" go_out
BrowserMatch "FlashGet" go_out
BrowserMatch "Nimo" go_out
BrowserMatch "Googlebot" go_out
BrowserMatch "MSNBot" go_out
BrowserMatch "msnbot-media" go_out
BrowserMatch "Yahoo" go_out
BrowserMatch "Feedfetcher-Google" go_out
BrowserMatch "Alexa" go_out
BrowserMatch "OutfoxBot" go_out
BrowserMatch "Netcraft" go_out
BrowserMatch "Gigabot" go_out
BrowserMatch "findlinks" go_out
BrowserMatch "NaverBot" go_out

하나의 사이트에서도 여러개의 봇을 운영하는것을 느꼈는가?
검색엔진 잔인하다-_-;;

추가 -> BonEcho는 현재 Gentoo Linux에서 테스트로 사용중인 FireFox의 Compatible Name 이라고 하는군요.
posted by 티니
:
Language 2006. 11. 9. 05:46
내가 미친게지-_-;;
새벽에 할 일 없어서 perl로 백업스크립트 짜더니..
이젠 php로 증분백업을 (...) 미친게야....

#!/usr/bin/php

<?php
// 제외할 목록 함수
function noUser($id){
switch ($id){
case "lost+found" :
case "test" : return false; break;
default : return true;
}
}

$oneDay=86400; //60*60*24초
$tmpTime=time();

$nYear=date("Y",$tmpTime);
$nMonth=date("m",$tmpTime);
$nDay=date("d",$tmpTime);

$nTime=mktime(0, 0, 0, $nMonth, $nDay, $nYear);
$nWeek=date("D",$nTime);

// 전체 백업 날짜가 바뀌면 아래 $allBackupDay 의 요일과 switch 문의 x 값을 바꺼준다.
// x 값은 전체 백업요일는 7 그 다음요일은 1 그다음은 2 .... 식으로하며 전체 백업요일 전은 6이다.
// 예를 들어 전체 백업날이 월요일이면 다음과 같다.
// Mon:7, Tue:1, Wed:2, Thu:3, Fri:4, Sat:5, Sun:6
$allBackupDay="Mon";
switch($nWeek){
case "Mon" : $x=7; break;
case "Tue" : $x=1; break;
case "Wed" : $x=2; break;
case "Thu" : $x=3; break;
case "Fri" : $x=4; break;
case "Sat" : $x=5; break;
case "Sun" : $x=6; break;
}

// 전주 일요일 날자 구함, 지워질 날짜 구함
$tTime=$nTime-($oneDay*$x);
$delTime=$tTime-($oneDay*7);
$tWeek=date("D",$tTime);

// 오늘이 일요일이면 오늘 날짜를, 아니면 전주 일요일 날짜를
if($nWeek==$allBackupDay) $backup_dir=date("Y-m-d",$nTime);
else $backup_dir=date("Y-m-d",$tTime);

$backup_root="/backup/"; // 백업 폴더
$backup_dir2=date("m-d",$nTime); // 2차 백업 폴더
$list_root="/sys/crond/list/"; // 리스트 관리 폴더
$delete_dir=date("Y-m-d",$delTime); // 삭제할 날짜 폴더

// /backup/2004-01-01/01-01/ 생성
// home백업 디렉토리 생성
// db백업 디렉토리 생성
exec("mkdir -p ".$backup_root.$backup_dir."/".$backup_dir2."/home");
exec("mkdir -p ".$backup_root.$backup_dir."/".$backup_dir2."/db");
if(!file_exists($list_root)) exec("mkdir -p ".$list_root);

if($nWeek==$allBackupDay){ // 전체 백업 날짜이면 디렉토리 생성
exec("rm -rf ".$backup_root.$delete_dir); // 2주전 데이터 삭제
exec("rm -f ".$list_root."*"); // 리스트 삭제
}

//시작 측정 시작
$time=date("Ymd-H:i:s",time());
exec("touch ".$backup_root.$backup_dir."/".$backup_dir2."/start-$time");

/********************* 매일 실행 될 부분 시작 *********************/

// 유저리스트 불러옴
exec("ls /home > ".$list_root."user_list");
$userList=file($list_root."user_list");
for($i=0;$i<count($userList);$i++) $userList[$i]=trim(str_replace("\n","",$userList[$i]));
exec("rm -f ".$list_root."user_list");

// 디비 리스트 불러옴
// 파일의 내용을 한줄씩 읽어서 배열로 저장
// 줄바꿈표시와 좌우 여백 삭제
// 디비리스트 삭제
// 디비 저장
exec("ls /db > ".$list_root."db_list");
$dbList=file($list_root."db_list");
for($i=0;$i<count($dbList);$i++) $dbList[$i]=trim(str_replace("\n","",$dbList[$i]));
exec("rm -f ".$list_root."db_list");
for($i=0;$i<count($dbList);$i++){
exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/db/".$dbList[$i].".tar.gz /db/".$dbList[$i]." 2>/dev/null");
}

exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/usr.local.tar.gz /usr/local 2>/dev/null");
exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/etc.tar.gz /etc 2>/dev/null");
exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/var.tar.gz /var 2>/dev/null");
exec("tar -cpzf ".$backup_root.$backup_dir."/".$backup_dir2."/sys.tar.gz /sys 2>/dev/null");

/********************* 매일 실행 될 부분 끝 ***********************/

for($i=0;$i<count($userList);$i++){
if(noUser($userList[$i])){
exec("tar -g ".$list_root.$userList[$i]." -cvpzf ".$backup_root.$backup_dir."/".$backup_dir2."/home/".$userList[$i].".tar.gz /home/".$userList[$i]." 2>/dev/null");
}
}

exec("chmod -R 600 ".$backup_root.$backup_dir);

$time=date("Ymd-H:i:s",time());
exec("touch ".$backup_root.$backup_dir."/".$backup_dir2."/end-$time");
?>
posted by 티니
:
Language 2006. 11. 9. 02:32

그냥 새벽에 할 일도 없고, 심심해서 perl로 백업스크립트를 짜봤다.
다 짜놓고 보니.. 또 심심하군....-_-;

#!/usr/bin/perl

# 경로지정
$remove_date = "3";
$path = "/backup";
$backup_dir1 = "$path/sys_db";
$backup_dir2 = "$path/home_data";

# 백업하지 않을 디렉토리
$no_backup{"lost+found"}=1;
$no_backup{"test"}=1;

# 날짜 구하기
($day, $month, $year) = (localtime)[3,4,5];
$year = $year+1900;
$month = $month+1;
$date_dir = $year."-".$month."-".$day;
($D,$M,$Y) = (localtime(time - ($remove_date * 60 * 60 * 24)))[3,4,5];
$M++; $Y+=1900;
$old_date_dir = "$Y-$M-$D";

# Mount
system("mount /dev/sda1 $backup_dir1");
system("mount /dev/sdb2 $backup_dir2");
system("chattr -R -i $path");

# 지난 데이터 삭제
system("rm -rf $backup_dir1/$old_date_dir");
system("rm -rf $backup_dir2/$old_date_dir");

# 날짜에 맞는 디렉토리를 생성
system("mkdir -p $backup_dir1/$date_dir/db");
system("mkdir -p $backup_dir2/$date_dir");

# 시스템 디렉토리 백업
system("tar cfpz $backup_dir1/$date_dir/usr.local.tar.gz /usr/local 2>/dev/null");
system("tar cfpz $backup_dir1/$date_dir/etc.tar.gz /etc 2>/dev/null");
system("tar cfpz $backup_dir1/$date_dir/var.tar.gz /var 2>/dev/null");
system("tar cfpz $backup_dir1/$date_dir/sys.tar.gz /sys 2>/dev/null");

# DB를 사용자별로 백업
system("ls /var/lib/mysql > /sys/crond/db_list");
open(FILES,"/sys/crond/db_list");
@array = <FILES>;
system("rm -f /sys/crond/db_list");
foreach $d_list(@array){
chomp($d_list);
  system("tar cfpz $backup_dir1/$date_dir/db/$d_list.tar.gz /var/lib/mysql/$d_list 2>/dev/null");
}

# 홈데이터를 사용자별로 백업
system("ls /home > /sys/crond/ho_list");
open(FILES,"/sys/crond/ho_list");
@array = <FILES>;
system("rm -f /sys/crond/ho_list");
foreach $h_list(@array){
chomp($h_list);
next if $no_backup{$h_list};
system("tar cfpz $backup_dir2/$date_dir/$h_list.tar.gz /home/$h_list 2>/dev/null");
}

# 보안을 위해 퍼미션 조정
system("chmod -R 600 $backup_dir1 $backup_dir2");

#UnMount
system("chattr -R +i $path");
system("umount /dev/sdb1");
system("umount /dev/sdb2");

posted by 티니
:
Language 2006. 11. 7. 18:30

디쎄형이 만들어 달라고 했던 삽질 스크립트다..
이거 사실 코드 공개하기가 졸라 쪽팔릴정도로;; 삽질코드다 ㅠ_ㅠ

원하는 작업은 Year/Month/*.bin을 옮기는것이었는데, 조건이 경로를 살려야 된다.
샘플은 아래와 같다.

원본 디렉토리 내용:
/mnt/SAT_ORG_2/NOAATDF/Y1999/M05/foobar_01.bin
/mnt/SAT_ORG_2/NOAATDF/Y1999/M05/foobar_02.bin
/mnt/SAT_ORG_2/NOAATDF/Y1999/M05/foobar_01.txt
/mnt/SAT_ORG_2/NOAATDF/Y1999/M05/foobar_02.txt
/mnt/SAT_ORG_2/NOAATDF/Y1999/M06/foobar_03.bin
/mnt/SAT_ORG_2/NOAATDF/Y1999/M06/foobar_04.bin
/mnt/SAT_ORG_2/NOAATDF/Y1999/M06/foobar_03.txt
/mnt/SAT_ORG_2/NOAATDF/Y1999/M06/foobar_04.txt
/mnt/SAT_ORG_2/NOAATDF/Y2000/M05/foobar_01.bin
/mnt/SAT_ORG_2/NOAATDF/Y2000/M05/foobar_02.bin
/mnt/SAT_ORG_2/NOAATDF/Y2000/M05/foobar_01.txt
/mnt/SAT_ORG_2/NOAATDF/Y2000/M05/foobar_02.txt
/mnt/SAT_ORG_2/NOAATDF/Y2000/M06/foobar_03.bin
/mnt/SAT_ORG_2/NOAATDF/Y2000/M06/foobar_04.bin
/mnt/SAT_ORG_2/NOAATDF/Y2000/M06/foobar_03.txt
/mnt/SAT_ORG_2/NOAATDF/Y2000/M06/foobar_04.txt

이동 디렉토리 경로:
/mnt/SAT_ORG_3/NOAA/BIN/

처음엔 간단히 생각해서 처리하려고 했는데 이게 생각보다 삽질을 만들어 냈다.
순간적으로 생각난게 list를 뽑아서 걸러낸뒤에 그대로 복사시키면 된다고 생각을 했는데
생각해보니 경로를 그대로 살려야 한다는 조건이 붙어 있어서 awk를 쓰게 됐다.
완성된 코드는 아래와 같다.

#!/bin/sh

find /mnt/SAT_ORG_2/NOAATDF/ -type d -name '*.bin' > list.txt

cat list.txt | while read file
do
year=`echo $file | awk -F / '{print $5}'`
month=`echo $file | awk -F / '{print $6}'`
mkdir -p /mnt/SAT_ORG_3/NOAA/BIN/$year/$month
cp -pR $file /mnt/SAT_ORG_3/NOAA/BIN/$year/$month/
done

rm -f list.txt

posted by 티니
: