블로그 이미지
초딩입맛제주아재
하고 싶은 것만 하며 살고 싶다

calendar

          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            
2007. 3. 5. 19:47 Programing/아뜰리에
리눅스 명령어중 du는 디스크 사용량을 알려준다.
그런데 du만으로는 뭔가 부족하다.
50메가 이상 사용중인 디렉토리 목록을 보고 싶은데 help를 봐도 내가 원하는 옵션은 없는것 같다.
혹, 나만 모르고 있는 방법이 있을지도 모르겠다.
리눅스가 워낙 막강하니...

그래서 만들었다.
du를 활용해서 내가 원하는 50메가 이상 사용중인 디렉토리를 볼 수 있는 '커스터마이징 du'!!

#!/usr/local/php/bin/php -q
<?php
/**
* filename : mydu(.php)
* author   : asrada2001@hotmail.com
* date     : 2007-03-05
* desc     : 디스크 사용량(du)체크
*
* 사용법 *
*
* chmod로 실행권한(755)을 주면 프롬프트에서 mydu를 타이핑 하는 것으로 실행이 된다.
*
* ~root]# mydu [opt]
* [opt]: 옵션=값
*
* 옵션
* su : 인자 값으로 받은 사이즈보다 큰 결과만 출력
* sd : 인자 값으로 받은 사이즈보다 작은 결과만 출력
* md : max depth
**/

function get_num($val){
 
$temp = '';
  for(
$i=0,$max=strlen($val); $i<$max; $i++){
     
$txt = substr($val,$i,1);
      if(
is_numeric($txt) == true){
         
$temp .= $txt;
      }else if(
$txt == '.' && $temp != ''){
         
$temp .= $txt;
      }
  }
  return
$temp;
}

function
to_kb($val){
 
$num = get_num($val);
 
$unit = strtoupper(substr($val,-1));
  switch(
$unit){
      case(
'M'):
          return
$num * 1024;
      break;
      case(
'G'):
          return
$num * 1024 * 1024;
      break;
      case(
'K'):
          return
$num;
      break;
  }
}

function
print_help(){
  echo
"\n\t[Options]\n"
     
."\tsu=size : size 보다 큰 결과만 출력합니다.\n"
     
."\tsd=size : size 보다 작은 결과만 출력합니다.\n"
     
."\tmd=depth : 출력할 하위 디렉토리 단계를 설정합니다.\n\n"
     
."\t\t예)mydu sd=10M md=4\n\n";
}

$opt = '';

if(
sizeof($argv) > 1){
  for(
$i=1,$max=sizeof($argv); $i<$max; $i++){
     
$tmp_opt = explode('=',$argv[$i]);
     
$tmp_name = $tmp_opt[0];
     
$tmp_value = $tmp_opt[1];
      switch(
$tmp_name){
          case(
'md'):
             
$opt .= ' --max-depth='.$tmp_value;
          break;
          case(
'su'):
             
$size_up = to_kb($tmp_value);
          break;
          case(
'sd'):
             
$size_down = to_kb($tmp_value);
          break;
          case(
'/?'):
             
print_help();
              exit;
          break;
          default:
              echo
"\n[".$tmp_name."] is invalid option...\n";
             
print_help();
              exit;
          break;
      }
  }
}

$command = 'du -h'.$opt;
exec($command,$result);

foreach(
$result as $data){
 
$data_size = substr($data,0,strpos($data,"\t"));

  if(
$size_up != ''){
      if(
$size_up <= to_kb($data_size)){
          echo
$data."\n";
      }
  }else if(
$size_down != ''){
      if(
$size_down >= to_kb($data_size)){
          echo
$data."\n";
      }
  }else{
      echo
$data."\n";
  }
}
?>




php, 역시 속도가 문제다.
C를 잘한다면 du소스를 직접 수정해서 컴파일하겠건만...-_-;;
늘 그렇듯 리팩토링의 여지는 남겨둔다...(귀차니sm)
posted by 초딩입맛제주아재
TAG du

댓글을 달아 주세요

2007. 1. 26. 21:09 Programing/아뜰리에

사용자 삽입 이미지

메모보드 열기



Drag & Drop 중 Drop을 뺀
메모보드입니다.



소스파일 다운로드

- 소스파일 받아 가시는것에 제한은 없습니다. 흔적만 남겨주세요 ^^;



:log:
======================================================
2007-02-01
 로그인 기능 완성(관리자에 한함)
  ->관리자 로그인만 허용하며, 관리자 로그인이 이루어지면 관리자가 작성한 메모 로드.
  ->로그아웃하면 관리자가 작성한 메모만 화면에서 제거

2007-01-31
  로그인 버튼과 로그인창 추가
  ->개인별 메모 관리 기능을 추가 하기 위함

2007-01-26
  메모 삭제 DB연동
  LOCK 버튼 클릭시 메모 좌표 DB저장

2007-01-22
DB연동
  -> 메모지 정보(좌표,내용 ) Save/Load

2007-01-20
  메모 내용 수정 완료 버튼 추가
  -> 수정후 완료 버튼 누르면 textarea 는 사라지고 내용을 파싱해서 HTML 태그로 만들어 메모지에 붙임.

2007-01-19
  메모 이동시 다른 메모에 의해 방해 받는 문제 수정
  -> 이동중인 메모의 zIndex를 최대치로 설정하고 이동이 끝나면 원래 zIndex로 설정.

2007-01-17
  HTML,JavaScript 코딩 시작.
  메모 Drag
  메모 기본위치 설정/원위치
  메모 생성
  메모 삭제
  메모 수정 모드(저장안됨)

2007-01-16
  기본 구성 설계

posted by 초딩입맛제주아재

댓글을 달아 주세요

  1. 달룟 2007.01.20 01:13  Addr Edit/Del Reply

    포스트잇같은 건가요?

  2. 어디서 사용할지 참 궁금해진 ^^

    • BlogIcon 물결 2007.01.21 11:14  Addr Edit/Del

      개인용이에요~
      포스트잇프로그램을 쓰자니 가는데 마다 설치를 해야 하는 번거로움이 있고(네X트 '메모짱' 같은..)
      웹으로 만들면 윈도우 바탕화면에 띄워서 쓸 수 있으니 ^^

    • BlogIcon 파도소리 2007.01.21 15:38  Addr Edit/Del

      아!. 바탕화면이로군요 ^^

      좋은 아이디어네요

      저도 끌리는데요? 완성되면 공개하심이.. ㅋ

    • BlogIcon 물결 2007.01.22 10:15  Addr Edit/Del

      데이터 save/load 까지만 만들고 소스 올리겠습니다.
      오늘이나 내일 중으로 마무리가 될거 같네요.
      그 후는 입맛대로 커스터마이징하셔서 쓰시면 되겠죠~^^

  3. BlogIcon 물결 2007.01.28 19:00  Addr Edit/Del Reply

    기본기능인 메모의 저장/불러오기, 위치 기억 기능만 완성이 됐습니다.
    코드를 좀 다듬어야 할 필요성은 있지만 소스를 올리기로 결정했습니다.
    사용하시는 분들 께서 입맛대로 커스터마이징 하세요~~^^

  4. BlogIcon akddd 2007.01.29 09:43  Addr Edit/Del Reply

    스쿨에서 링크 타고 왔습니다.
    개인적으로 한번 만들어 볼까 생각만 하고 있었는데 먼저 만드셨네요 ㅎㅎ
    감사히 잘쓰겠습니다. ~

    • BlogIcon 물결 2007.01.29 10:06  Addr Edit/Del

      소스를 보시면 엉망일겁니다~
      이쁘게 고쳐주세요~^^

  5. 현태풍 2007.01.29 11:36  Addr Edit/Del Reply

    이런 메모홈피때매 왔는데 본홈피... 깔끔하고 이뿌네요^^;; 홈피를 즐겨찾기 해야겠다는..ㅋㅋ
    보고 공부열심히 하겠습니다.

  6. 저도 스쿨에서 링크타고 왔습니다. 멋진 메모장을 만드셨네요^^
    지금 설치하려고 했는데 db_conn.php와 db schema가 없어서 좌절 중입니다. OTL...

    • BlogIcon 물결 2007.01.29 19:41  Addr Edit/Del

      DB스키마를 안넣었군요~

      필드 종류 Null 기본값
      --------------------------------------------------
      id int(11) 아니오
      member varchar(20) 예 NULL
      memo text 아니오
      reg_date datetime 아니오 0000-00-00 00:00:00
      open_type char(1) 예 NULL
      leftpos int(4) 아니오 0
      toppos int(4) 아니오 0


      member나 open_type은 사용자 구분과 공개 여부등을 적용하기 위한 필드입니다.
      없어도 됩니다^^

  7. BlogIcon 물결 2007.01.30 09:40  Addr Edit/Del Reply

    혹시라도 소스 다운 받으시는 분들은 본문 링크에 걸려있는 소스를 받으신 후 메모보드를 열고
    소스 보기를 한 후 소스를 긁어서 memo.html 파일에 덮어 쓰시기 바랍니다.
    생각날때마나 소스를 수정하거든요 :)
    디비 스키마나 서버쪽 소스는 수정을 안하고 html과 javascript쪽만 수정을 하니 긁어다 붙이는걸로 업데이트는 끝납니다~

    • BlogIcon 물결 2007.02.02 15:58  Addr Edit/Del

      어제 부터 로그인 관련 작업으로 서버쪽 스크립트에 손을 대기 시작했습니다.
      애초에 혼자 쓰려던걸 공개해버렸는데 많은 분들이 오셔서 부득이하게 로그인 기능을 첨가할 필요성이 생겼네요.^^;
      로그인 작업 끝나기 전까지는 기존에 올려진 소스파일로만 정상작동이되니 소스 받아가시는 분들은 이점 참고하시기 바랍니다.~

  8. 건빵쥔광이씨 2007.01.30 09:57  Addr Edit/Del Reply

    필요한 기능 구현해 볼려고 문서 서핑 중이었는데 마침 구현하셨네요~ ^^

    감사합니당...

    소스 오픈까지 해주시고 복받으실꺼에요~~

  9. 달룟 2007.02.01 00:33  Addr Edit/Del Reply

    다운은 받았는데 어떻게 해야할지 모르겠네요. ^^ 소스만 대충읽어보았습니다.

  10. 댕기 2007.02.01 13:58  Addr Edit/Del Reply

    phpschool에서 따라왔는데..
    좋은 자료 참고하겠습니다..^^

  11. kana 2007.02.02 15:47  Addr Edit/Del Reply

    저도 phpschool에서 보고 왔는데 멋지네요 ^^
    좋은 자료 감사합니다.

  12. ㅋㅋㅋ 2007.02.03 11:38  Addr Edit/Del Reply

    감사합니다~~ 좋은 자료 정말 감사합니다.

  13. 진이 2007.02.09 11:49  Addr Edit/Del Reply

    와~ 감사히 쓰겠습니다^^

  14. 잘쓸게요 넘우 감사합니다. `~~

  15. 구차니즘 대왕 2007.06.04 18:03  Addr Edit/Del Reply

    저도 phpschool에서 보고 왔습니다.
    좋은 자료 감사합니다. 잘 사용 하겠습니다.

  16. pim 2007.08.20 17:36  Addr Edit/Del Reply

    제로보드에서 보구가요 -ㅂ-

    잘 쓰겠습니당

    • BlogIcon 물결 2007.08.21 12:21  Addr Edit/Del

      감사합니다.
      개선해야 할 부분이 있으면 피드백 부탁드립니다^^

  17. 이슬공주 2008.01.08 20:02  Addr Edit/Del Reply

    ajax 공부하려고 phpschool에서 자료를 찾던 중 이곳으로 왔습니다..
    잘 쓰겠습니다..^^
    감사합니다..

2006. 12. 12. 15:05 Programing/아뜰리에
친구의 부탁으로 간단하게 만들어보았다.
실행권한을 주고 CLI모드에서 실행하면 된다.

간단하게 인자 두개를 입력 받는데
첫번째 인자값은 찾을 확장자,
두번째 인자값은 바꿀 확장자이다.

./file_rename.php php php4
이렇게 하면 현재 디렉토리 내의 확장자가 php인 모든 파일의 확장자가 php4로 바뀐다.


코드는 무척 간단하다...

#!/usr/local/php/bin/php -q
<?php
/**
* filename : file_rename.php
* author   : asrada2001@hotmail.com
* date     : 2006-12-12
* desc     : 현재 디렉토리에 존재하는 파일의 확장자 일괄 변경
**/

if(sizeof($argv) < 3 || $argv[1] == Null || $argv[2] == Null){
  echo "require two arguments...\n\n";
  exit;
}

$dir = '.';

$searchExt = '.'.$argv[1];
$replaceExt = '.'.$argv[2];

if($handle = opendir($dir)){
  while (false !== ($file = readdir($handle))){
       if($file != '.' && $file != '..' && strpos($file,$searchExt) > 0){

           $fname   = substr($file,0,strrpos($file,$searchExt));
           $newName = $fname.$replaceExt;

           if(rename($file,$newName) == true){
               echo $file.' -> '.$newName." [OK]\n";
           }else{
               echo $file.' -> '.$newName." [FALSE]\n";
           }
       }
  }

  closedir($handle);
}
?>


주의 할 것은 소스파일의 맨 윗줄을 공백으로 두면 안된다는것이다.
친구놈이 소스코드를 메신져로 던져줬더니 붙여넣기 하면서 한줄을 공백으로 비워두고는
안된다고 타박을 해댔다 -_-;;

필요에 의한 개발은 언제나 재밌다.
posted by 초딩입맛제주아재

댓글을 달아 주세요

  1. BlogIcon LazyGyu 2010.02.17 23:45  Addr Edit/Del Reply

    뭔가 필요에 의해서 개발하신 거라 생각하지만 혹시나 해서..

    rename .php .php4 *.php

    이 명령어를 써도 같은 효과를 낼 수 있지 않을까요?

2006. 11. 10. 10:40 Programing/아뜰리에
http://asrada2001.mireene.com/asrada/calender/calender.php

이걸 언제 만들었더라...-_-
posted by 초딩입맛제주아재

댓글을 달아 주세요

2006. 8. 21. 21:02 Programing/아뜰리에

이번에 국제전화카드 쇼핑몰 프로젝트를 끝내고
로그파일을 하루 종일 지켜보고 있어야 하는 상황에서
출근하자마자 그날의 로그파일을 새로 tail -f 로 모니터링 해야했다.
그일이 불편하여 자동으로 새로운 로그파일을 모니터링 할 스크립트를 만들어봤다.

사용법 :
우선 해당 소스를 실행 모드로 설정 : chmod 777 LogViewer
LogViewer 실행
끝~

코드를 보자.
tail -f 를 직접 구현하고자 하니 여간 어려운게 아니었다.
쉬워보여서 뛰어든건데 -_-
하지만 막상 구현이 끝나니...
이게 뭐야 -_-;;;

아무튼 소스는 주석의 내용만으로 충분히 이해가 갈듯하다.

#!/usr/local/php5/bin/php -q
<?php
/**
* FILE_NAME : LogViewer
* AUTHOR    : asrada2001@hotmail.com
* DATE      : 2006-08-21
* DESC      : 로그파일 자동 뷰어
               - 일별 또는 월별 등 날짜로 명명되어진 로그파일을 보여준다.
               - 날짜 변경시 자동으로 다음 로그파일을 보여준다.
* LICENSE   :
**/

$filehead = 'logfile head';     //로그파일구성 = 헤드(유무) + 날짜(항목은 상황에 맞게 설정)
$basic_readline = 5;
$current_file = Null;
$firstopen = true;

while(true){

  $filetail   = date('Ymd');
  $filename   = $filehead.$filetail;

  if($current_file != $filename){
       echo "===============================================================\n";
       echo "##  New LogFile Watching -- ".$filetail."\n";
       echo "===============================================================\n";

       $current_file = $filename;
       $last_pos = Null;
       $firstopen = true;
  }

  if(file_exists($filename) == true){

       if(filesize($filename) == 0){
           continue;
       }

       $readline   = 0;
       $first_pos  = Null;
       $result     = Null;

       $fp = fopen($filename,'r');

       $pos       = -2;                //파일의 마지막 문자가 \n 이므로 -2 부터 시작
       $char      = Null;

       while(fseek($fp,$pos,SEEK_END) == 0){
           $char = fgetc($fp);

           if($char == "\n" || $char == "\r"){
               $str = fgets($fp);
               $this_pos = ftell($fp);

               if($this_pos == false){
                   break;
               }

               $readline++;

               //열려진 파일의 최초 검색된 new line(\n) 의 포인터 위치를 저장하여
               //다음번 로딩시에 이 포인터 이전의 내용은 검색을 제한한다.
               if($first_pos == Null){
                   $first_pos = $this_pos;
               }

               //이전 파일의 마지막 포인터의 위치
               //현재 포인터가 이전 파일의 마지막 포인터와 같은 값을 갖을때 검색을 중지한다.
               if($last_pos == $this_pos){
                   break;
               }

               //출력되어질 로그파일의 내용
               $result = $str.$result;

               //최초 파일 오픈할때는 마지막 5라인 출력
               if($firstopen == true){
                   //echo "============= first_line cashing....".$readline." ========================\n";

                   if($readline == $basic_readline){
                       $firstopen = false;
                       $readline = 0;
                       break;
                   }
               }else{
                   if($last_pos == Null){
                       break;
                   }else{
                       if($this_pos <= $last_pos){
                           break;
                       }
                   }
               }
           }

           $pos--;
       }

       $last_pos = $first_pos;

       if($result != Null){
           echo $result;
       }

       fclose($fp);
       unset($fp);

       sleep(1);

  }
  else{
       echo $filename." << file not found...\n";
       sleep(10);
  }
}
?>

필요에 의한 개발...
필요라는 동기가 무척이나 중요한것 같다.
만약 이번 프로젝트가 없었다면
언제 이런걸 만들어볼까~~~

posted by 초딩입맛제주아재
TAG cli, log, php

댓글을 달아 주세요

prev 1 next