CVS 설정중...


나는 하나도 틀린게 없는데....;;;


저런 Error가 났음....


그걸로 우리 친구 네이버와 상담한 결과...


NOD32 iMON 문제....


NOD32 IMON을 내리고 리붓하면 해결됨.

Posted by [czar]
,
http://www.netcraft.com


서버정보 확인 사이트
Posted by [czar]
,

서랍에 옷을 넣을 때는 세워서

옷을 서랍에 넣을 때 너무 차곡차곡 개어놓으면 눌리기도 하고밑에 있는 옷을 찾을 때 뒤적거릭 되어 개킨 모양이 헝클어지면서 불편하다. 이럴 때는 옷을 포개어 놓지말고 줄을 맞춰서 세워놓도록 한다. 어린아 옷이라면 세번으로 접고, 어른들 옷은 네번 정도 접어서 넣으면 서랍 높이에 알맞게 된

호스는 비스듬히 잘라 끼워야

호스를 수도 꼭지에 끼우려고 해도 좀처럼 잘 끼워지지 않아 곤란한 경우가 많다. 억지로 끼워놓아도 물을 틀고 쓰다보면 금세 빠져버리면서 옷이 젖기 일쑤다. 그러나 이것은 호스를 잘못 잘랐기 때문이다. 앞으로는 수도꼭지에 끼울 부분을 비스틈히 잘라서 끼워보자. 이렇게 하면 잘 끼워지고 또 좀처럼 빠지는 일도 없다.

생선을 맛있게 졸이려면

정어리, 전갱이 같은 생선은 졸이다 보면 살이 잘 부스러진다. 생선이 잠길 만큼 국물을 넉넉하게 붓고, 냄비에 맞는 뚜껑을 덮은 다음에 약한 불에서 졸여야 부스러지지 않는다. 또한 붕어 같은 민물고기는 직접 졸이기보다, 양념을 하지 않고 살짝 구어서 국물에 넣어 졸이면 맛있다. 비린 생선은 생강을 잘게 썰어 넣으면 비린내가 없어진다.

간 접시는 우유에 담가 끓인다

사실 요즘같은 절약 시대에 그릇에 약간 금이 갔다고 해도 큰 문제는 아니지만, 아무래도 보기에 좋지 않은 것은 사실이다. 이럴 때는 우유를 이용해서 지활용해 보자. 냄비에우유를 적당하게 붓고 금이 간 접시와 찻잔을 넣은 다음, 4~5분 정도 끓인 뒤 꺼내보면 금이 눈에 잘 띄지 않는다. 우유의 단백질이 틈새에 들어가 응고되었기 때문이다.

만두피가 터지지 않게 하려면

미리 빚은 만두를 상위에 한참 놓아두면, 아무리 밀가루를 뿌려 두었어도 사용하려고 떼어내다보면 만두피가 터지는 경우가 종종있다. 이럴 때는 상위에다 갱지 한장을 깔아놓고, 그 위에 밀가루를 뿌려서 만두를 놓아두면 된다. 이와 같은 방법은 칼국수와 같은 다른 밀가루음식의 보관에도 똑같이 이용할 수 있다.

집안 먼지 제거에는 스타킹 활용

집안 청소를 하면서 유난히 먼지가 많아 고민하는 주부들이 많다. 먼지가 많은 거실과 안방 등의 바닥을 빗자루로 쓸 때는 빗자루에 헌 스타킹을 씌우고 분무기로 물을 약간 뿌린 뛰 쓰면 먼지가 날리지않고 붙어 나온다. 청소를 마친 다음에는 스타킹만 벗겨내면 되므로 깔끔하게 뒷정리를 할 수 있어 편리하다.

핸드백을 오랫동안 보관할 경우

철 지난 핸드백을 그대로 장롱 안에 보관하면, 모양이 변해 볼품없이 되면서 다시 사용하기가 망설여진다.
핸드백의 모양이 일그러지지않게 하기 위해서는 그 속에 플라스틱제 유산균 병을 가득 넣어둔다. 또 보관할 때 핸드백 속에 화장 비누 포장지를 넣어두면, 다시 사용할 때 까지 향긋한 냄새가 배어있어 좋다.

가스레인지 벽 주변의 기름기 제거

주방 가스레인지의 뒷벽에는 기름이튀어 묵은 때가 끼기 쉽다. 걸레로 닦아도 잘 지워지지 않는다. 이럴때는 키친타월을 이용해보자.먼저 키친 타월에 세제를 묻힌 뒤 더러움이 심한 곳에 붙인다. 그리고 금방 마르는 것을 막기위해 랩으로 한 겹 더 씌운다. 팩을 하는 것 같은 효과가 나타나면서 아주 깨끗해진다.

Posted by [czar]
,

아래는 자바스크립트 원문입니다.

<html>
<head>
<script language=javascript>
<!--
var downLayerId;
var dropDegree = 10; //스크롤 속도
var doDirect;
var DirectTerm = 4000; //스크롤 지연시간
var curDropIdx = 0;
       
function DirectDown()
{
        clearInterval(doDirect);
        clearInterval(downLayerId);
       
        for(i = curDropIdx ;i < document.all["DropHit"].length + curDropIdx;i++){
                document.all["DropHit"][i%document.all["DropHit"].length].style.posTop = document.all["DropHit"][i%document.all["DropHit"].length].style.posHeight * (-1*((i-curDropIdx)%document.all["DropHit"].length));
        }
        var temp = 'setInterval("DownLayer()",20)';
        downLayerId = eval(temp);
        direction = "down";
}
function DownLayer()
{
        if(document.all["DropHit"][curDropIdx].style.posTop < document.all["DropHit"][curDropIdx].style.posHeight){
                for(j = curDropIdx ;j < document.all["DropHit"].length + curDropIdx;j++){
                        document.all["DropHit"][j%document.all["DropHit"].length].style.posTop += dropDegree;
                }
        }else{
                clearInterval(downLayerId);
                for(j = curDropIdx ;j < document.all["DropHit"].length + curDropIdx;j++){
                        document.all["DropHit"][j%document.all["DropHit"].length].style.posTop = document.all["DropHit"][j%document.all["DropHit"].length].style.posHeight *((-1*((j-curDropIdx)%document.all["DropHit"].length))+1);
                }
                curDropIdx = (curDropIdx + 1) ;
                curDropIdx = curDropIdx > document.all["DropHit"].length-1 ? curDropIdx%document.all["DropHit"].length:curDropIdx;
                var temp = 'setInterval("DirectDown()",DirectTerm)';
                doDirect = eval(temp);
        }
}
function DirectUp()
{
        clearInterval(doDirect);
        clearInterval(downLayerId);
        var tempIdx = 0;
        for(i = 0;i<document.all["DropHit"].length;i++){
                tempIdx = (document.all["DropHit"].length + curDropIdx - i) %document.all["DropHit"].length;
                document.all["DropHit"][tempIdx].style.posTop = i*document.all["DropHit"][tempIdx].style.posHeight;
        }
        var temp = 'setInterval("UpLayer()",20)';
        downLayerId = eval(temp);
        direction = "up";
}
function UpLayer()
{
        var tempIdx = 0;
        if(document.all["DropHit"][curDropIdx].style.posTop < document.all["DropHit"][curDropIdx].style.posHeight && document.all["DropHit"][curDropIdx].style.posTop > document.all["DropHit"][curDropIdx].style.posHeight * (-1)){
                for(j = 0 ;j < document.all["DropHit"].length;j++){
                        tempIdx = (document.all["DropHit"].length + curDropIdx - j) %document.all["DropHit"].length;
                        document.all["DropHit"][tempIdx].style.posTop -= dropDegree;
                }
        }else{
                clearInterval(downLayerId);
                for(j = 0;j<document.all["DropHit"].length;j++){
                        tempIdx = (document.all["DropHit"].length + curDropIdx - j) % document.all["DropHit"].length;
                        document.all["DropHit"][tempIdx].style.posTop = (j-1)*(document.all["DropHit"][tempIdx].style.posHeight);
                }
                curDropIdx = (curDropIdx - 1) ;
                curDropIdx = curDropIdx < 0 ? document.all["DropHit"].length-1:curDropIdx;
                var temp = 'setInterval("DirectUp()",DirectTerm)';
                doDirect = eval(temp);
        }
}
//-->
</script>
</head>
<body>
<table cellspacing=0 cellpadding=0 border=0>
<tr>
        <td>
                <div style="left:0px; overflow:hidden; width:380px; position:relative; top:0px; height:200px">
                        <div id=DropHit style="width:375px; height:200px; position:absolute; left:0px; top:0px; z-index:1; visibility:visible;">
                                <table border=0 cellpadding=0 cellspacing=0 width=375>
                                <tr>
                                        <td><a href=http://www.happycgi.com><img border=0 src=http://home.cein.or.kr/~homepy/js/js464/img01.gif width=125 height=200></a></td>
                                        <td><a href=http://www.happycgi.com><img border=0 src=http://home.cein.or.kr/~homepy/js/js464/img02.gif width=125 height=200></a></td>
                                        <td><a href=http://www.happycgi.com><img border=0 src=http://home.cein.or.kr/~homepy/js/js464/img03.gif width=125 height=200></a></td>
                                </tr>
                                </table>
                        </div>
                        <div id=DropHit style="width:375px; height:200px; position:absolute; left:0px; top:-200px; z-index:1; visibility:visible;">
                                <table border=0 cellpadding=0 cellspacing=0 width=375>
                                <tr>
                                        <td><a href=http://www.happycgi.com><img border=0 src=http://home.cein.or.kr/~homepy/js/js464/img04.gif width=125 height=200></a></td>
                                        <td><a href=http://www.happycgi.com><img border=0 src=http://home.cein.or.kr/~homepy/js/js464/img05.gif width=125 height=200></a></td>
                                        <td><a href=http://www.happycgi.com><img border=0 src=http://home.cein.or.kr/~homepy/js/js464/img06.gif width=125 height=200></a></td>
                                </tr>
                                </table>
                        </div>
                        <script language=javascript>DirectDown();</script>
                </div>
        </td>
        <td>
                <table cellspacing=0 cellpadding=0 width=13 border=0>
                <tr><td><a href="javascript:DirectUp()"><img border=0 src=http://home.cein.or.kr/~homepy/js/js464/scroll_up.gif></a></td></tr>
                  <tr><td align=center><img height=173 src=http://home.cein.or.kr/~homepy/js/js464/scroll_line.gif></td></tr>
                <tr><td><a href="javascript:DirectDown()"><img border=0 src=http://home.cein.or.kr/~homepy/js/js464/scroll_down.gif></a></td></tr>
                </table>
        </td>
</tr>
</table>

</body>
</html>

Posted by [czar]
,
출처 ":http://glotalk.egloos.com/1111105

웹 문서를 만들 때마다 IE와 FF의 차이로 인해서 곤혹스럽다. 그럴 때마다 한 번쯤 검토, 정리 해야겠다는 생각을 해보지만 역시나 귀차니즘 때문에 미뤄왔다. 하지만 계속되는 시간낭비로 더 이상 미룰 수만은 없다는 생각에 인터넷에서 수집한 자료들과 실험을 통해 그 동안의 숙제였던 IE와 FF의 랜더링의 차이에 대해 정리해 보려한다.

이 문서는 지속적으로 수정, 보완할 예정이다.
한번에 다 쓰려니 검토할 사항이 많아서 틈나는 대로 조금씩 작성하려고 한다.


실험방법
3개의 블럭을 다음과 같이 배치하고 각 블럭의 CSS Style을 정의한 후 값을 바꿔가면서 IE와 FF에서 확인하는 방식으로 진행하였다.

버전정보
MSIE: 6.0.2900    FF: 2.0.0.11

실험에 사용된 소스
HTML:

<div id="container">
    <div class="box1">
        <span style="background-color: blue">text1 <br />
            text2 </span>
    </div>
    <div class="box2">
        <span style="background-color: blue">text1&nbsp;<br />
            text2&nbsp;</span>
    </div>
</div>

CSS:

body {
    margin: 0px 0px 0px 0px;
    padding: 0px 0px 0px 0px;
}
#container {
    font-family: 굴림;
    font-size: 9pt;
    color: #a8a8a8;
    text-align: left;

    background-color: #f5f5f5;
    float: none;

    border-top: #aaaaaa 8px solid;
    border-right: #aaaaaa 8px solid;
    border-bottom: #aaaaaa 8px solid;
    border-left: #aaaaaa 8px solid;

    width: 240px;
    height: 240px;

    margin: 0px 0px 0px 0px;
    padding: 4px 4px 4px 4px;
}
#container div.box1 {
    border-top: #cccccc 8px solid;
    border-right: #cccccc 8px solid;
    border-bottom: #cccccc 8px solid;
    border-left: #cccccc 8px solid;

    margin: 8px 8px 8px 8px;
    padding: 0px 0px 0px 0px;
}
#container div.box2 {
    border-top: #cccccc 8px solid;
    border-right: #cccccc 8px solid;
    border-bottom: #cccccc 8px solid;
    border-left: #cccccc 8px solid;

    margin: 16px 16px 16px 16px;
    padding: 8px 8px 8px 8px;
}


첫번째

문서상단에 다음 <!DOCTYPE>의 유무에 따라 결과가 달라졌다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

위의 <!DOCTYPE>을 기입하지 않으면

위의 <!DOCTYPE>을 기입하면


[결과]

<!DOCTYPE>을 기입하지 않으면
IEwidthheightborder-widthpadding을 포함하고(margin은 포함하지 않음)
FFwidthheightborder-widthpadding을 포함하지 않는다.

<!DOCTYPE>을 기입하면
IE는  기입하지 않았을 때에 비해 FF의 랜더링에 상당히 근접한 결과를 보여 주었다.
FF는 기입하지 않았을 때와 동일한 결과를 보여 주었다.
width, border-width 그리고 padding의 관계가 IEFF에 대해 동일한 결과를 보여 주었다.


두번째

실험에 사용된 소스에 스타일을 추가 또는 변경하면서 변화를 관찰했다.

기본 스타일 (수정하기 전)



동일한 문서를 IE와 FF에서 각각 보았을 때 폭과 높이를 지정한 conatiner의 경우는 같은 크기를 보여주지만
그 안에 포함된 box1과 box2는 내부의 텍스트의 높이를 다르게 해석해서인지 서로 다른 높이를 보여준다.

수평방향으로는,
IE, FF 둘 다 container padding 4px과 box1 margin 8px의 합인 12px의 간격을 보여준다.
수직방향으로는,
IE의 경우, container padding 4px과 box1 margin 8px중 큰 값인 8px의 간격을 보여주지만
FF의 경우, container padding 4px과 box1 margin 8px의 합인 12px의 간격을 보여준다.

box1과 box2의 간격을 보면,
IE, FF 둘 다 box1 margin 8px과 box2 margin 16px중 큰 값인 16px의 간격을 보여준다.

body {
    margin: 8px 8px 8px 8px;
}



IE, FF 둘 다 수평, 수직으로 8px의 간격을 보여준다.

#container {
    margin: 4px 4px 4px 4px;
}



수평방향으로는
IE, FF 둘 다 body margin 8px과 container margin 4px의 합인 12px의 간격을 보여준다.
수직방향으로는
IE의 경우, body margin 8px과 container margin 4px의 합인 12px의 간격을 보여주지만
FF의 경우, body margin 8px과 container margin 4px중 큰 값인 8px의 간격을 보여준다.

#container {
    margin: 16px 16px 16px 16px;
}



마진의 통합에 대한 실험을 위해 container margin을 body margin 8px보다 큰 값인 16px로 늘려 보면

수평방향으로는
IE, FF 둘 다 body margin 8px과 container margin 16px의 합인 24px의 간격을 보여준다.
수직방향으로는
IE의 경우, body margin 8px과 container margin 16px의 합인 24px의 간격을 보여주지만
FF의 경우, body margin 8px과 container margin 16px중 큰 값인 16px의 간격을 보여준다.

#container {
    float: left;
}



container의 float: none을 float: left로 수정하면,

IE의 경우, 수평방향으로 body margin 8px과 container magin 16px의 두배인 32px의 합인 40px의 간격을 보여준다.
수직방향으로는 변화 없다.
FF의 경우, 수직 방향으로 body margin 8px과 container margin 16px의 합인 24px의 간격을 보여준다.
수평방향으로는 변화 없다.

#container div.box1 {
    float: left;
}



box1에 float: left를 추가하면,

#container div.box2 {
    float: left;
}



box2에 float: left를 추가하면,




[결과]
수평방향에서는 차이가 없다. (CSS2에서 수평 마진들은 절대로 통합되지 않는다.)
수직방향에서는 차이가 있다. (수직 마진들은 박스들 사이에서 통합될 수 있다)
  1. box margin들이 인접한 부분
    FF: 통합된다.  IE: 통합된다.
    box marginbody margin이 인접한 부분
    FF: 통합된다.  IE: 통합되지 않는다.

  2. box marginbox padding이 인접한 부분
    FF: 통합되지 않는다.  IE: 통합된다.
    box marginbody padding이 인접한 부분
    FF: 통합되지 않는다.  IE: 통합된다.

  3. floatbox margin과 인접한 부분
    FF: 통합되지 않는다.  IE: 통합되지 않는다. 수평방향으로 마진이 두배가 되는 버그 있다.

(주의) "통합된다"는 뜻은 두 개의 박스가 인접해 있을 때 각 박스의 마진 중 큰 값을 두 박스의 간격으로 한다는 뜻이다. 모 사이트의 글을 보니 이것을 "포개진다"는 말로 표현하고 있었다. 더 쉽게 의미가 와 닿는 것 같다.



세번째

[기타 ]
padding-top을 0으로 했을 때 텍스트의 세로방향의 시작 위치가 다르다. (1px 정도)

텍스트의 background-color을 지정해서 보면 동일한 폰트임에도 IEFF간에 배경으로 칠해지는 영역의 높이가 다르다. (1px정도)

line-height
를 기입하지 않으면 줄간격이 IEFF간에 서로 틀리다. (line-height를 지정하면 같아진다)

<span style="background-color: blue">text1 <br />text2 </span>
IE에서는 "text1" "text2"에 대해 배경이 파란색으로 칠해지지만 FF의 경우는 "text1 " "text2"에 대해 배경이 파란색으로 칠해진다. IEFF에 대해 동일하게 배경이 파란색으로 칠해지도록 하려면 다음과 같이 해주면 된다.
<span style="background-color: blue">text1&nbsp;<br />text2&nbsp;</span>


* height와 min-height

* overflow: hidden


Referances

Sites
  1. Trio
    보이는 양식화 모델의 소개
    마진들의 통합
    마진, 패딩, 테두리의 예제
  2. Mozilla 개발 센터 자료
  3. cadvance: Simplicity is the BEST for me...
  4. 나라디자인
    Quirks Mode 렌더링과 DTD.
  5. Henri Sivonen’s pages
    Activating the Right Layout Mode Using the Doctype Declaration
  6. Cross-Browsing : 브라우저간 호환성 확보
Q&A
  1. mozilla.or.kr
    DIV태그에 대한 IE와 FF의 해석차이...
    IE에서는 잘 나오는데 FF와 OPERA에서.
  2. phpschool.com
    CSS질문입니다 (IE랑 FF에서 다르게보이는 문제...)
    브라우저별 CSS 적용 문제
    [SW기술] 스타일제외)IE,FF 를 둘 다 지원하는것이 어렵습니까?
    FF IE 에서의 float
    FF에서는 안보이는 여백이 IE에서는 보일때
    DIV 테이블에서 IE와 FF의 결과물이 같아 보이려면?
    DIV, CSS, IE와 FF에서 다르게 보이는 문제점..
Posted by [czar]
,
1. MySQL의 기본테이블
MySQL은 처음 설치시에 'mysql'이라는 데이타베이스를 생성한다. 이 데이타베이스는 db,host,user,
tables_priv,columns_priv, function라는 기본테이블을 가지고 있다. 이 테이블들은 MySQL의 권한과
관련이 있다.

2. MySQL의 기본테이블과 권한
(1) user테이블 : 전체서버에 적용되는 권한정보를 포함하고 있다.
(2) host테이블 : 호스트전체에 대한 서버의 접근권한을 부여한다.
(3) db테이블 : 각각의 데이타베이스에 접근 권한을 설정한다.
(4) tables_priv : 테이블에 대한 접근권한을 설정한다.
(5) columns_priv : 행에 대한 접근 권한을 설정한다.
(6) function : 사용자정의 mysql함수가 등록되는 테이블이다.

3. user테이블
(1) 개요: 전체 서버에 우선적으로 적용되는 테이블고 사용자별 권한 정보를 담고 있는 테이블이다.
(2) 특징
    MySQL서버에 사용자 계정을 만들고 패스워드를 부여하는 테이블이다. user테이블의 권한과
   db테이블의 권한은 상당한 차이가 있다. user테이블에서 권한을 허가하는 것은 전체
   데이터베이스에서 모든 권한을 허가하는 것과 같다. 따라서, 기본값으로 'N'을 주어야 한다.
(3) 기본구조
    mysql> show columns from user;
   +-----------------+-----------------+------+-----+---------+-------+
   | Field           | Type            | Null | Key | Default | Extra |
   +-----------------+-----------------+------+-----+---------+-------+
   | Host            | char(60) binary |      | PRI |         |       |
   | User            | char(16) binary |      | PRI |         |       |
   | Password        | char(16) binary |      |     |         |       |
   | Select_priv     | enum('N','Y')   |      |     | N       |       |
   | Insert_priv     | enum('N','Y')   |      |     | N       |       |
   | Update_priv     | enum('N','Y')   |      |     | N       |       |
   | Delete_priv     | enum('N','Y')   |      |     | N       |       |
   | Create_priv     | enum('N','Y')   |      |     | N       |       |
   | Drop_priv       | enum('N','Y')   |      |     | N       |       |
   | Reload_priv     | enum('N','Y')   |      |     | N       |       |
   | Shutdown_priv   | enum('N','Y')   |      |     | N       |       |
   | Process_priv    | enum('N','Y')   |      |     | N       |       |
   | File_priv       | enum('N','Y')   |      |     | N       |       |
   | Grant_priv      | enum('N','Y')   |      |     | N       |       |
   | References_priv | enum('N','Y')   |      |     | N       |       |
   | Index_priv      | enum('N','Y')   |      |     | N       |       |
   | Alter_priv      | enum('N','Y')   |      |     | N       |       |
   +-----------------+-----------------+------+-----+---------+-------+
(4) user테이블의 범위 필드값
   1) Host :  호스트 이름이나 IP주소를 입력할 수 있다. 디폴트는 localhost이다. '%'라는 와일드
            값을 사용한다. '%'는 일반적인 운영체제의 '*'와 유사하다. 특정한 이름이 주어지지
            않으면 모든 이름을 포괄한다. 즉 어떠한 호스트로부터도 접근 가능합니다.
   2) User : 와일드 값을 허용하지 않는다. 모든 유저에 해당하는 공백으로 지정할 수는 있다. 연결
            하려는 목록에 공백 사용자 이름이 있다면 클라이언트에서 실제로 지정한 이름 대신에
            그 사용자는 익명 사용자, 이름이 없는 사용자로서 간주된다.
   3) Password : 공백으로 둘 수 있다. 이것은 아무 비밀번호나 사용할 수 있다는 것을 의미하는 것
                이 아니라, 사용하는 비밀번호를 지정하지 않고 연결해야 한다는 의미이다.
(5) 접근권한
   Select_priv   : select문을 수행할 수 있는 권한
   Insert_priv   : insert문을 수행할 수 있는 권한
   Update_priv   : update문을 수행할 수 있는 권한
   Delete_priv   : delete문을 수행할 수 있는 권한
   Create_priv   : create문을 수행하거나 테이블을 생성할 수 있는 권한
   Drop_priv     : drop문을 수행하거나 데이타베이스를 삭제할 수 있는 권한
   Reload_priv   : mysqladmin reload명령을 이용하여 접근정보를 다시 읽을 수 있는 권한
   Shutdown_priv : mysqladmin shutdown명령을 이용하여 서버를 종료시킬 수 있는 권한
   Process_priv  : 서버 프로세스를 관리할 수 있는 권한
   File_priv     : select into outfile과 load data infile과 같은 명령을 이용하여 파일에 읽고
                  쓸 수 있는 권한
   Grant_priv    : 자신의 권한을 남에게 부여할 수 있는 권한
   References_priv : 사용하지 않음
   Index_priv    : 인덱스를 만들거나 삭제할 수 있는 권한
   Alter_priv    : alter table문을 수행할 수 있는 권한

(참고) 접근권한에서 유의할점
  (1) select_priv는 테이블에서 데이터를 가져오는 권한만을 지정한다. select 2+3;과 같은 select
     에는 해당하지 않는 권한이다.
  (2) 일반사용자에게는 file_priv권한을 주지 않는 것이 좋다. 특히 MySQL서버를 시스템의 root
     사용자로 실행중일 때는 일반 사용자에게 특히 주지 말아야 한다.
  (3) process_priv도 일반 사용자에게 권한을 주지 않는 것이 좋다.
  (4) shutdown_priv는 권한이 있는 사용자에게 MySQL서버 종료를 하게 해주므로 유의해야 한다.
  (5) 단순히 테이블에서 데이터를 가져올 목적인 사용자에게는 update, delete, drop, alter권한은
     주지 않는 것이 좋다.

4.db테이블
(1) 개요: 보통 여러 개의 데이타베이스가 존재하는 데 db테이블은 각각의 데이타베이스에 대한
          퍼미션을 설정한다.
(2) 기본구조
   mysql> show columns from db;
   +-----------------+-----------------+------+-----+---------+-------+
   | Field           | Type            | Null | Key | Default | Extra |
   +-----------------+-----------------+------+-----+---------+-------+
   | Host            | char(60) binary |      | PRI |         |       |
   | Db              | char(64) binary |      | PRI |         |       |
   | User            | char(16) binary |      | PRI |         |       |
   | Select_priv     | enum('N','Y')   |      |     | N       |       |
   | Insert_priv     | enum('N','Y')   |      |     | N       |       |
   | Update_priv     | enum('N','Y')   |      |     | N       |       |
   | Delete_priv     | enum('N','Y')   |      |     | N       |       |
   | Create_priv     | enum('N','Y')   |      |     | N       |       |
   | Drop_priv       | enum('N','Y')   |      |     | N       |       |
   | Grant_priv      | enum('N','Y')   |      |     | N       |       |
   | References_priv | enum('N','Y')   |      |     | N       |       |
   | Index_priv      | enum('N','Y')   |      |     | N       |       |
   | Alter_priv      | enum('N','Y')   |      |     | N       |       |
   +-----------------+-----------------+------+-----+---------+-------+
(3) 특징: user테이블과 매우 유사하고, 차이점은 password행 대신에 이 테이블은 db행을 갖는다.
          이 테이블은 특정한 데이타베이스에서 어떠한 사용자의 권한을 관리한다. user 테이블
          퍼미션은 전체서버에 영향을 미치기 때문에 user테이블의 권한이 db테이블의 권한보다
          우선하게 된다. 즉 user테이블에 insert권한이 있다면, 이 사용자는 전체 데이타베이스의
          db테이블에 insert권한을 가지게 된다.

(참고) 효과적인 사용자관리
user테이블에서는 퍼미션을 갖지 않는 사용자를 생성하고, 사용자db테이블에서 권한을 얻어야 효과적
이다.

5. host테이블
(1) 기본구조
   mysql> show columns from host;
   +-----------------+-----------------+------+-----+---------+-------+
   | Field           | Type            | Null | Key | Default | Extra |
   +-----------------+-----------------+------+-----+---------+-------+
   | Host            | char(60) binary |      | PRI |         |       |
   | Db              | char(64) binary |      | PRI |         |       |
   | Select_priv     | enum('N','Y')   |      |     | N       |       |
   | Insert_priv     | enum('N','Y')   |      |     | N       |       |
   | Update_priv     | enum('N','Y')   |      |     | N       |       |
   | Delete_priv     | enum('N','Y')   |      |     | N       |       |
   | Create_priv     | enum('N','Y')   |      |     | N       |       |
   | Drop_priv       | enum('N','Y')   |      |     | N       |       |
   | Grant_priv      | enum('N','Y')   |      |     | N       |       |
   | References_priv | enum('N','Y')   |      |     | N       |       |
   | Index_priv      | enum('N','Y')   |      |     | N       |       |
   | Alter_priv      | enum('N','Y')   |      |     | N       |       |
   +-----------------+-----------------+------+-----+---------+-------+
(2) 특징: host테이블은 사용자에게 호스트단위로 기본권한을 설정할 수 있도록 한다. MySQL이
          수행권한을 검사할 때 db테이블에서 사용자이름과 호스트를 검사한다. 만약 호스트필드가
          비어있는 사용자를 만나게 되면, host테이블을 검사하여 두 가지 각각의 권한들이
          중첩되는 권한을 부여하게 된다.

6. tables_priv와 columns_priv테이블
이 두개의 테이블은 db테이블이 수행하는 일들을 보다 세분화시킨 것이다. 즉, 어떠한 오퍼레이션이
먼저 db테이블을 참조하고 다음에 table_priv, 마지막으로 columns_priv를 참조하게 된다. 만약 이중
하나라도 허가가 되어 있으면 오퍼레이션이 허가된다. 이 두개의 테이블을 이용하여 사용자의 권한을
행단위까지 자세하게 세분화할 수 있다. 이 테이블의 내용은 SQL에서 grant와 revoke를 이용하여 조작
할 수 있다.

7. 권한부여의 단계
(1) MySQL은 user테이블에서 사용자가 연결해오는 호스트이름과 사용자이름을 찾는다.
(2) 명령어가 입력되면 user테이블의 정보와 일치하는 것이 존재하고 권한이 허가되어 있으면 요청
    한 작업은 바로 수행된다. 그렇지 않는 경우에는 db테이블=> tables_priv => columns_priv 순서
    로 권한을 찾는다.
Posted by [czar]
,
gimp 한글 버전을 설치했는데

메뉴는 한글로 나온다.

그러나 다른 부분은 모두 한글이 깨진다.

기본설치시

"c:\Program Files\Common Files\GTK\2.0\lib\gtk-2.0\2.4.0\engines\libwimp.dll" 파일을 삭제하거나 이름을 변경한다.

한글이 잘 나온다.
Posted by [czar]
,

Picasa Web Export Template
Picasa Web Export Template 찾아보다가 괜찮은 놈 몇개 찾았다.

-. Simple Viewer
   http://www.airtightinteractive.com/simpleviewer/
사용자 삽입 이미지
 
-. Paul van Roekel 아저씨의 종합선물 셋트~
   http://www.paulvanroekel.nl/picasa/

  1. Lightbox Photo Gallery and Slideshow Template 1.2 (zip, 60 Kb) demo
  2. Thickbox Photo Gallery Template 1.1 (zip, 50 Kb) demo
  3. XFade Simple Slideshow Template 1.0 (zip, 10 Kb) demo
  4. Simple Scroller Gallery Template 1.0 (zip, 35 Kb) demo
  5. HighSlide Photo Gallery Template 1.0 (zip, 130 Kb) demo

Posted by [czar]
,

http://www.youtube.com/watch?v=daF9oUMVNbY

YTN

 

정말 대단하네요~~


Posted by [czar]
,
출처  :  http://www.linuxholic.com/256

웹호스팅 사용자를 위한 스크립트를 짜봤습니다.
알지로넷(http://rgro.net) 에서 회원서비스 제공을 목적으로 개발을 한것을 공개 합니다.

주요기능
① 계정(SSH/Telnet) 암호 변경
② 계정(HDD) 사용량 조회
③ 계정(HDD) 백업
④ 데이타베이스(MySQL) 암호변경
⑤ 데이타베이스(MySQL) 백업
⑥ 데이타베이스(MySQL) 복구
⑦ 데이타베이스(MySQL) 초기화
⑧ 알지보드설치
⑨ 제로보드설치

태터툴즈 자동설치 기능도 넣었지만 허락을 받지 못해 일단 메뉴에서만 제외 되어 있습니다.
제로보드도 문제가 될지....
보시고 많은 조언 부탁 드립니다.

출처 : http://rgboard.com/

#!/bin/bash

##############################################################################
#
# 프로그램명 : RGRO Shell Manager
# 버전 : 1.1
# 최종수정일 : 2004년 6월 24일
#
# 제작자 : 윤범석 (알지보드)
# 홈페이지 : http://rgboard.com , http://rgro.net
# 본 프로그램은 비상업적인 목적으로 사용 가능합니다.
#
##############################################################################

##############################################################################
# 각종변수 설정
##############################################################################
# 버전
VERSION="1.1"
# mysql 경로
MYSQL_EXEC="mysql"
# mysqldump 경로
MYSQLDUMP_EXEC="mysqldump"
# 알지보드파일
RGBOARD_FILE=""
# 제로보드파일
ZEROBOARD_FILE=""
# 테터툴즈파일
TATTER_FILE=""
# 웹절대경로
WEB_ROOT=""

# 계정명
USER=`whoami`
# 절대경로
PWD=`cd ~;pwd`

if [ "$USER" = "" ]; then
  echo "계정명을 알수없습니다.
서버관리자에게 문의하세요."
  exit 1
fi

##############################################################################
# 웹절대경로를 찾는다 우선순위 www , public_html , 계정루트
##############################################################################
WEB_ROOT=$PWD
# public_html 디렉토리가 있다면
if [ -d "$PWD/public_html" ]; then
  WEB_ROOT="$PWD/public_html"
fi

# www 디렉토리가 있다면
if [ -d "$PWD/www" ]; then
  WEB_ROOT="$PWD/www"
fi
##############################################################################

##############################################################################
# 계정암호를 변경
##############################################################################
PASSWORD_CHANG() {
  clear
  echo "===================================================================
                           계정 암호변경
===================================================================
1. Telnet/SSH/FTP 암호가 동시에 변경됩니다.
2. 데이타베이스(Mysql) 암호는 변경되지 않습니다.

3. 암호변경방법
  (current) UNIX password: [현재암호입력]
  New password: [변경할암호 입력]
  Retype new password: [변경암호 재입력]

4. 입력한 암호는 표시되지 않습니다.
5. 영문자와 숫자로 6자 이상 연속된문자 제외하고 입력하세요.
";
  passwd
  if [ "$?" = "0" ]; then
    echo "정상적으로 변경되었습니다."
  else
    echo "암호변경시 에러가 발생했습니다."
  fi
}

##############################################################################
# 계정 사용량 조회
##############################################################################
HDD_QUOTA() {
  clear
  echo "===================================================================
                         계정(HDD) 사용량 조회
===================================================================
"
  quota -s
  echo "
1. blocks : 현재 사용중인 용량
2. 첫번째 quota : 현재 사용자가 사용할수 있는 용량
3. 첫번째 limit : 현재 사용자가 사용할수 있는 한계치
4. 용량표시가 없는경우 Kbyte 단위입니다.";
}

##############################################################################
# 계정 백업
##############################################################################
HDD_BACKUP() {
  clear
  echo -n "===================================================================
                          계정(HDD) 백업
===================================================================
1. 새로 만들어질 백업파일의 크기가 남은 HDD사용량을 초과 할 경우
   에러가 발생할수 있습니다. 사용하지않는 파일을 삭제후 백업하세요.

2. 일부 업로드된 파일은 에러가 발생할 수 있습니다.

3. 기존 backup- 으로 시작하는 파일은 삭제가 됩니다.

백업하시겠습니까 [yes]/no : "
  read key

  if [ "$key" == "" ]; then
    key="yes"
  fi

  if [ "$key" != "yes" ]; then
    echo "취소하셨습니다."
    return 1
  fi

  BACKUP_FILE_NAME="backup-"`date +%Y%m%d`".tar.gz"
  BACKUP_FILE="$WEB_ROOT/$BACKUP_FILE_NAME"
  echo "백업파일명 : $BACKUP_FILE_NAME"
  echo "백업중 ... (백업이 끝날때까지 기다려주세요)"
  cd ~
  if [ -f "$BACKUP_FILE_NAME" ]; then
    rm $BACKUP_FILE_NAME
  fi

  for file in $WEB_ROOT/backup-*
  do
    if [ -f "$file" ]; then
      rm $file
    fi
  done

  tar zcf $BACKUP_FILE_NAME *
  echo "백업종료 ..."
  mv $BACKUP_FILE_NAME $BACKUP_FILE
  echo "$BACKUP_FILE 으로 백업되었습니다."
  echo "다운로드 위치 : http://도메인명/$BACKUP_FILE_NAME"
}

##############################################################################
# 데이타베이스(MYSQL) 암호변경
##############################################################################
MYSQL_PASSWORD_CHANG() {
  clear
  echo "===================================================================
                    데이타베이스(MYSQL) 암호변경
===================================================================
1. 암호는 공백없이 영문자, 숫자로 입력하세요

2. 암호를 변경시 MYSQL을 사용하는 프로그램의 설정도 변경해야 합니다.

3. 암호는 화면에 표시되지 않습니다.
"
  echo -n "데이타베이스 유저아이디 [$USER] : "; read DBUSER
  echo -n "데이타베이스 기존암호 : "; read -s DBPASSWORD; echo
  echo -n "데이타베이스 새암호 : "; read -s DBNEWPASSWORD1; echo
  echo -n "데이타베이스 암호확인 : "; read -s DBNEWPASSWORD2; echo

  if [ "$DBUSER" == "" ]; then
    DBUSER="$USER"
  fi

  if [ "$DBPASSWORD" == "" ]; then
    echo "기존암호를 입력하세요."
    return 1
  fi

  if [ "$DBNEWPASSWORD1" == "" ]; then
    echo "새암호를 입력하세요."
    return 1
  fi

  if [ "$DBNEWPASSWORD1" != "$DBNEWPASSWORD2" ]; then
    echo "새암호가 동일하지 않습니다."
    return 1
  fi

  $MYSQL_EXEC -u$DBUSER -p$DBPASSWORD -e "set password=password('$DBNEWPASSWORD1');"

  if [ "$?" = "0" ]; then
    echo "정상적으로 변경되었습니다."
  else
    echo "암호변경시 에러가 발생했습니다."
  fi
}

##############################################################################
# 데이타베이스(MYSQL) 백업
##############################################################################
MYSQL_BACKUP() {
  clear
  echo "===================================================================
                    데이타베이스(MYSQL) 백업
===================================================================
1. 새로 만들어질 백업파일의 크기가 남은 HDD사용량을 초과 할 경우
   에러가 발생할수 있습니다. 사용하지않는 파일을 삭제후 백업하세요.

2. 기존 mysql- 으로 시작하는 파일은 삭제가 됩니다.

3. 암호는 화면에 표시되지 않습니다.

백업하시겠습니까 [yes]/no : "
  read key

  if [ "$key" == "" ]; then
    key="yes"
  fi

  if [ "$key" != "yes" ]; then
    echo "취소하셨습니다."
    return 1
  fi

  echo -n "데이타베이스 유저아이디 [$USER] : "; read DBUSER
  echo -n "데이타베이스 암호 : "; read -s DBPASSWORD; echo

  if [ "$DBUSER" == "" ]; then
    DBUSER="$USER"
  fi

  if [ "$DBPASSWORD" == "" ]; then
    echo "기존암호를 입력하세요."
    return 1
  fi

  BACKUP_FILE_NAME="mysql-"`date +%Y%m%d`".sql"
  BACKUP_FILE="$WEB_ROOT/$BACKUP_FILE_NAME"
  echo "백업파일명 : $BACKUP_FILE_NAME"
  echo "백업중 ... (백업이 끝날때까지 기다려주세요)"
  cd ~
  if [ -f "$BACKUP_FILE_NAME" ]; then
    rm $BACKUP_FILE_NAME
  fi

  for file in $WEB_ROOT/mysql-*
  do
    if [ -f "$file" ]; then
      rm $file
    fi
  done

  $MYSQLDUMP_EXEC -u$DBUSER -p$DBPASSWORD $DBUSER > $BACKUP_FILE_NAME

  if [ "$?" != "0" ]; then
    echo "에러가 발생했습니다."
    return 1
  fi

  echo "백업종료 ..."
  mv $BACKUP_FILE_NAME $BACKUP_FILE
  echo "$BACKUP_FILE 으로 백업되었습니다."
  echo "다운로드 위치 : http://도메인명/$BACKUP_FILE_NAME"
}

##############################################################################
# 데이타베이스(MYSQL) 복구
##############################################################################
MYSQL_RESTORE() {
  clear
  echo "===================================================================
                    데이타베이스(MYSQL) 복구
===================================================================
1. 백업파일은 계정의 루트 또는 웹디렉토리에 올려주세요.

2. 복구할 데이타베이스 백업파일을 입력하세요.

3. 중복된 테이블이 있을경우 에러가 발생하므로 데이타베이스를
   초기화 하신후 복구 하십시요.

4. 암호는 화면에 표시되지 않습니다.
"
  echo -n "데이타베이스 유저아이디 [$USER] : "; read DBUSER
  echo -n "데이타베이스 암호 : "; read -s DBPASSWORD; echo
  echo -n "데이타베이스 백업파일명 : "; read SQL_FILE;

  if [ "$DBUSER" == "" ]; then
    DBUSER="$USER"
  fi

  if [ "$DBPASSWORD" == "" ]; then
    echo "기존암호를 입력하세요."
    return 1
  fi
 
  BACKUP_FILE=""

  if [ -f "$WEB_ROOT/$SQL_FILE" ]; then
    BACKUP_FILE="$WEB_ROOT/$SQL_FILE"
  fi

  if [ -f "$PWD/$SQL_FILE" ]; then
    BACKUP_FILE="$PWD/$SQL_FILE"
  fi

  if [ "$BACKUP_FILE" == "" ]; then
    echo "백업파일을 찾을수 없습니다. 파일명을 확인하세요."
    return 1
  fi

  echo "복구 파일명 : $BACKUP_FILE"
  echo -n "복구하시겠습니까 [yes]/no : "
  read key

  if [ "$key" == "" ]; then
    key="yes"
  fi

  if [ "$key" != "yes" ]; then
    echo "취소하셨습니다."
    return 1
  fi

  echo "복구중 ... (끝날때까지 기다려주세요)"

  $MYSQL_EXEC -u$DBUSER -p$DBPASSWORD $DBUSER < $BACKUP_FILE

  if [ "$?" != "0" ]; then
    echo "에러가 발생했습니다."
    return 1
  fi

  echo "복구성공 ..."
}

##############################################################################
# 데이타베이스(MYSQL) 초기화
##############################################################################
MYSQL_ALL_TABLE_DELETE() {
  clear
  echo "===================================================================
                    데이타베이스(MYSQL) 초기화
===================================================================
1. 데이타베이스내의 모든 테이블을 삭제하오니 신중히 실행 하십시요

2. 암호는 화면에 표시되지 않습니다.
"
  echo -n "데이타베이스 유저아이디 [$USER] : "; read DBUSER
  echo -n "데이타베이스 암호 : "; read -s DBPASSWORD; echo

  if [ "$DBUSER" == "" ]; then
    DBUSER="$USER"
  fi

  if [ "$DBPASSWORD" == "" ]; then
    echo "기존암호를 입력하세요."
    return 1
  fi
 
  TABLE_LIST=`$MYSQL_EXEC -u$DBUSER -p$DBPASSWORD $DBUSER -e "show tables" | grep -v "Tables_in_"`

  if [ "$?" != "0" ]; then
    echo "이미 초기화된 상태이거나 에러가 발생했습니다."
    return 1
  fi

  if [ "$TABLE_LIST" == "" ]; then
    echo "이미 초기화된 상태입니다."
    return 1
  fi

  echo -n "모든 테이블을 삭제하시겠습니까 yes/[no] : "
  read key

  if [ "$key" != "yes" ]; then
    echo "취소하셨습니다."
    return 1
  fi
 
  echo "삭제중 ... (끝날때까지 기다려주세요)"

  for TABLE in $TABLE_LIST
  do
#    echo "테이블 삭제 => $TABLE"
    $MYSQL_EXEC -u$DBUSER -p$DBPASSWORD $DBUSER $dbname -e "drop table $TABLE"
  done
 
  if [ "$?" != "0" ]; then
    echo "에러가 발생했습니다."
    return 1
  fi

  echo "$DBUSER 이 성공적으로 초기화 되었습니다"
}

##############################################################################
# 알지보드설치
##############################################################################
RGBOARD_INSTALL() {
  clear
  echo -n "===================================================================
                          알지보드설치
===================================================================
1. 알지보드를 설치합니다.
2. 이미 설치 되어있다면 덮어쓰게 됩니다.

설치하시겠습니까 [yes]/no : "
  read key

  if [ "$key" == "" ]; then
    key="yes"
  fi

  if [ "$key" != "yes" ]; then
    echo "취소하셨습니다."
    return 1
  fi

  if [ ! -f "$RGBOARD_FILE" ]; then
    echo "알지보드 설치파일을 찾을수 없습니다."
    return 1
  fi

  cd $WEB_ROOT
  tar zxf $RGBOARD_FILE
  chmod 707 rgboard/data

  echo "성공적으로 설치되었습니다.
http://도메인명/rgboard/admin/install.php 으로 접속하세요.
관리자 페이지 : http://도메인명/rgboard/admin

자세한 사용법은 홈페이지(http://rgboard.com) 를 참고하십시요."
}

##############################################################################
# 제로보드설치
##############################################################################
ZEROBOARD_INSTALL() {
  clear
  echo -n "===================================================================
                          제로보드설치
===================================================================
1. 제로보드를 설치합니다.
2. 이미 설치 되어있다면 덮어쓰게 됩니다.

설치하시겠습니까 [yes]/no : "
  read key

  if [ "$key" == "" ]; then
    key="yes"
  fi

  if [ "$key" != "yes" ]; then
    echo "취소하셨습니다."
    return 1
  fi

  if [ ! -f "$ZEROBOARD_FILE" ]; then
    echo "제로보드 설치파일을 찾을수 없습니다."
    return 1
  fi

  cd $WEB_ROOT
  tar zxf $ZEROBOARD_FILE
  chmod 707 bbs

  echo "성공적으로 설치되었습니다.
http://도메인명/bbs/install.php 으로 접속하세요.
관리자 페이지 : http://도메인명/bbs/admin.php

자세한 사용법은 홈페이지(http://nzeo.com) 를 참고하십시요."
}

##############################################################################
# 블로그(테터툴즈)설치
##############################################################################
TATTER_INSTALL() {
  clear
  echo -n "===================================================================
                         블로그(테터툴즈)설치
===================================================================
1. 블로그(테터툴즈)를 설치합니다.
2. 이미 설치 되어있다면 덮어쓰게 됩니다.

설치하시겠습니까 [yes]/no : "
  read key

  if [ "$key" == "" ]; then
    key="yes"
  fi

  if [ "$key" != "yes" ]; then
    echo "취소하셨습니다."
    return 1
  fi

  if [ ! -f "$TATTER_FILE" ]; then
    echo "테터툴즈 설치파일을 찾을수 없습니다."
    return 1
  fi

  cd $WEB_ROOT
  tar zxf $TATTER_FILE
  chmod 707 tt

  echo "성공적으로 설치되었습니다.
http://도메인명/tt/install.php 으로 접속하세요.
관리자 페이지 : http://도메인명/tt/admin/article.php

자세한 사용법은 홈페이지(http://tattertools.com) 를 참고하십시요."
}

##############################################################################
# 웹절대경로변경
##############################################################################
WEB_ROOT_CHANGE() {
  clear
  echo -n "===================================================================
                         웹절대경로설정변경
===================================================================
1. 홈페이지 절대경로를 수정합니다.
2. 홈페이지를 올리시는 실제경로를 입력하세요.
3. 실제 홈페이지 경로가 변경되는 것은 아닙니다.
4. 현재 $WEB_ROOT 로 설정되어 있습니다.

경로변경 : $PWD/"
  read WEB_PATH

  if [ ! -d "$PWD/$WEB_PATH" ]; then
    echo "$PWD/$WEB_PATH 를 찾지 못했습니다."
    echo "경로가 수정되지 않았습니다."
    return 1
  fi

  if [ "$WEB_PATH" != "" ]; then
    WEB_PATH="$PWD/$WEB_PATH"
  else
    WEB_PATH="$PWD"
  fi

  echo -n "$WEB_PATH 로 수정하시겠습니까 [yes]/no:"
  read key

  if [ "$key" == "" ]; then
    key="yes"
  fi

  if [ "$key" == "yes" ]; then
    WEB_ROOT="$WEB_PATH"
    echo "$WEB_ROOT 로 변경되었습니다."
   else
    echo "변경되지 않았습니다."
  fi
}

while [ : ]
do
  clear
  echo -n "===================================================================
   RGRO Shell Manager V$VERSION (번호를 선택하세요)
===================================================================
   계정명 : $USER, 웹절대경로 : $WEB_ROOT
===================================================================
  1. 계정(SSH/Telnet) 암호 변경 |  4. 데이타베이스(MySQL) 암호변경
  2. 계정(HDD) 사용량 조회      |  5. 데이타베이스(MySQL) 백업
  3. 계정(HDD) 백업             |  6. 데이타베이스(MySQL) 복구
                                |  7. 데이타베이스(MySQL) 초기화
  8. 알지보드설치
  9. 제로보드설치

11. 웹절대경로 설정변경            쉘매니저 강제 종료 : Ctrl + C
99. 쉘매니저종료                   글수정 : Ctrl+Backspace
===================================================================
  번호를 입력하세요 : "
  read menu

  case "$menu" in
    "1") PASSWORD_CHANG;;
    "2") HDD_QUOTA;;
    "3") HDD_BACKUP;;
    "4") MYSQL_PASSWORD_CHANG;;
    "5") MYSQL_BACKUP;;
    "6") MYSQL_RESTORE;;
    "7") MYSQL_ALL_TABLE_DELETE;;
    "8") RGBOARD_INSTALL;;
    "9") ZEROBOARD_INSTALL;;
    "10") TATTER_INSTALL;;
    "11") WEB_ROOT_CHANGE;;
    "99") break;;
    *) echo "다시 선택해주세요.";;
  esac
  echo
  echo -n "[Enter]키를 눌러주세요.";read
done

clear
echo "RGRO Shell Manager V$VERSION 을 종료합니다."
echo "완전이 종료를 하시려면 Ctrl+D 또는 exit 명령을 입력하십시요."
echo
Posted by [czar]
,