[table 용량확인]


SELECT
concat(table_schema,'.',table_name),  
concat(round(table_rows/1000000,2),'M') rows,  
concat(round(data_length/(1024*1024*1024),2),'G') DATA,  
concat(round(index_length/(1024*1024*1024),2),'G') idx,  
concat(round((data_length+index_length)/(1024*1024*1024),2),'G') total_size,  
round(index_length/data_length,2) idxfrac   
FROM
information_schema.TABLES 
where table_name = '테이블명' ;

==========================================================
출처:http://blog.naver.com/juner84?Redirect=Log&logNo=100150510663

2012/03/01 20:33 2012/03/01 20:33
샤이 이 작성.

당신의 의견을 작성해 주세요.

솔라리스에서는 netstat -p 옵션을 사용할 수 없어 열려있는 포트의 pid를 확인할 수 없으며

아래와 같은 방법으로 확인이 가능합니다.

다음 소스의 FindPort(80); 부분을 찾고자 하는 포트로 수정한 후 port.c로 작성하여 컴파일 합니다.

#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <dlfcn.h>
#include <procfs.h>
#include <dirent.h>

/* Flags accepted by Pgrab() */
#define PGRAB_RETAIN    0x01    /* Retain tracing flags, else clear flags */
#define PGRAB_FORCE     0x02    /* Open the process w/o O_EXCL */
#define PGRAB_RDONLY    0x04    /* Open the process or core w/ O_RDONLY */
#define PGRAB_NOSTOP    0x08    /* Open the process but do not stop it */

/* Error codes from Pcreate() */
#define C_STRANGE   -1  /* Unanticipated error, errno is meaningful */
#define C_FORK      1   /* Unable to fork */
#define C_PERM      2   /* No permission (file set-id or unreadable) */
#define C_NOEXEC    3   /* Cannot execute file */
#define C_INTR      4   /* Interrupt received while creating */
#define C_LP64      5   /* Program is _LP64, self is _ILP32 */
#define C_NOENT     6   /* Cannot find executable file */

/* Error codes from Pgrab(), Pfgrab_core(), and Pgrab_core() */
#define G_STRANGE   -1  /* Unanticipated error, errno is meaningful */
#define G_NOPROC    1   /* No such process */
#define G_NOCORE    2   /* No such core file */
#define G_NOPROCORCORE  3   /* No such proc or core (for proc_arg_grab) */
#define G_NOEXEC    4   /* Cannot locate executable file */
#define G_ZOMB      5   /* Zombie process */
#define G_PERM      6   /* No permission */
#define G_BUSY      7   /* Another process has control */
#define G_SYS       8   /* System process */
#define G_SELF      9   /* Process is self */
#define G_INTR      10  /* Interrupt received while grabbing */
#define G_LP64      11  /* Process is _LP64, self is ILP32 */
#define G_FORMAT    12  /* File is not an ELF format core file */
#define G_ELF       13  /* Libelf error, elf_errno() is meaningful */
#define G_NOTE      14  /* Required PT_NOTE Phdr not present in core */
#define G_ISAINVAL  15  /* Wrong ELF machine type */
#define G_BADLWPS   16  /* Bad '/lwps' specification */
#define G_NOFD      17  /* No more file descriptors */


typedef struct ps_prochandle* (*Pgrab_t)(pid_t pid, int flags, int *perr);
typedef int (*pr_getsockname_t)(struct ps_prochandle *Pr, int sock, struct sockaddr *name, socklen_t *namelen);
typedef int (*pr_stat_t)(struct ps_prochandle *Pr, const char *path, struct stat *buf);
typedef int (*pr_fstat_t)(struct ps_prochandle *Pr, int fd, struct stat *buf);
typedef void (*Prelease_t)(struct ps_prochandle *P, int flags);

int FindPort(int nPort);
int FindPortFromSockAddr(struct sockaddr *sa, socklen_t len, const int nFindPort);
const char *GetProcNameByPID(const int pid);
const char *Pgrab_error(int error);

int main(int argc, char **argv)
{
    FindPort(80);
    return 0;
}

int FindPort(int nPort)
{
    int nCurPID = 0, nMyPID = 0, nCurFD = 0, nErr = 0;
    void *handle = 0;
    Pgrab_t Pgrab = NULL;
    pr_getsockname_t pr_getsockname = NULL;
    pr_fstat_t pr_fstat = NULL;
    Prelease_t Prelease = NULL;
    DIR *dir = NULL, *subdir = NULL;
    socklen_t len;
    char sockBuff[512] = {0};
    char szPath[0xFF] = {0};
    struct sockaddr *sa = (struct sockaddr *)sockBuff;
    struct dirent *entry = NULL, *subentry = NULL;
    struct stat stFile;
    struct ps_prochandle *Pr = NULL;
   
    nMyPID = (int)getpid();

    if ( (handle = dlopen("libproc.so", RTLD_NOW)) == NULL )
    {
        printf("fail to dlopen, %s\n", dlerror());
        return 0;
    }

    if ( (Pgrab = dlsym(handle, "Pgrab")) == NULL )
    {
        printf("fail to Pgrab, %s\n", dlerror());
        dlclose(handle);
        return 0;
    }

    if ( (pr_getsockname = dlsym(handle, "pr_getsockname")) == NULL )
    {
        printf("fail to pr_getsockname, %s\n", dlerror());
        dlclose(handle);
        return 0;
    }
   
    if ( (pr_fstat = dlsym(handle, "pr_fstat")) == NULL )
    {
        printf("fail to pr_fstat, %s\n", dlerror());
        dlclose(handle);
        return 0;
    }  
   
    if ( (Prelease = dlsym(handle, "Prelease")) == NULL )
    {
        printf("fail to Prelease, %s\n", dlerror());
        dlclose(handle);
        return 0;
    }
   
    if ((dir = opendir("/proc/")) == NULL)
    {
        dlclose(handle);
        return 0;
    }
   
    while ( (entry = readdir(dir)) != NULL )
    {
        if ( (nCurPID = atoi(entry->d_name)) <= 0 )
            continue;

        /* pid 1, 2, 3 is system process */
        if ( nCurPID == nMyPID || nCurPID < 4 )
            continue;

        if ( (Pr = Pgrab((pid_t)nCurPID, PGRAB_FORCE, &nErr)) == NULL )
        {
            printf("fail to Pgrab [pid %d], %s\n", nCurPID, Pgrab_error(nErr));
            continue;
        }
       
        snprintf(szPath, sizeof(szPath)-1, "/proc/%d/fd", nCurPID);

        if ((subdir = opendir(szPath)) == NULL)
        {
            printf("fail to opendir, %s\n", szPath);
            Prelease(Pr, 0);
            Pr = NULL;
            continue;
        }
       
        while ( (subentry = readdir(subdir)) != NULL )
        {
            if ( (nCurFD = atoi(subentry->d_name)) <= 0 )
                continue;
           
            if ( (nErr = pr_fstat(Pr, nCurFD, &stFile)) == -1 )
            {
                printf("pr_fstat [%d], nCurFD [%d], Pr[%p]\n", nErr, nCurFD, Pr);
                continue;
            }
           
            if ( (stFile.st_mode & S_IFMT) != S_IFSOCK )
                continue;
           
            len = sizeof(sockBuff);
            if (pr_getsockname(Pr, nCurFD, sa, &len) != 0)
                continue;
           
            switch ( FindPortFromSockAddr(sa, len, nPort) )
            {
            case AF_INET:
printf("Port number %d is used by '%s' (pid : %d, AF_INET)\n", nPort, GetProcNameByPID(nCurPID), nCurPID);
                break;
            case AF_INET6:
printf("Port number %d is used by '%s' (pid : %d, AF_INET6)\n", nPort, GetProcNameByPID(nCurPID), nCurPID);
                break;
            default:
                break;
            }
        }
       
        Prelease(Pr, 0);
        Pr = NULL;
        closedir(subdir);
    }
   
    closedir(dir);
    dlclose(handle);
    return 0;
}

const char *GetProcNameByPID(const int pid)
{
    int nFD = 0;
    char szPath[0xFF] = {0};
    static char szProcessName[0xFF];
    struct psinfo pinfo;
   
    snprintf(szPath, sizeof(szPath)-1, "/proc/%d/psinfo", pid);
    szProcessName[0] = 0;
   
    if ( (nFD = open(szPath, O_RDONLY)) > 0 )
    {
        if ( read(nFD, (void *)&pinfo, sizeof(struct psinfo)) > 0 )
            snprintf(szProcessName, sizeof(szProcessName)-1, "%s", pinfo.pr_fname);

        close(nFD);
    }
   
    return szProcessName;
}

int FindPortFromSockAddr(struct sockaddr *sa, socklen_t len, const int nFindPort)
{
    struct sockaddr_in *so_in = (struct sockaddr_in *)(void *)sa;
    struct sockaddr_in6 *so_in6 = (struct sockaddr_in6 *)(void *)sa;
    struct sockaddr_un *so_un = (struct sockaddr_un *)sa;
   
    switch (sa->sa_family)
    {
    case AF_INET:
        if ( nFindPort == ntohs(so_in->sin_port) )
            return AF_INET;
        break;
    case AF_INET6:
        if ( nFindPort == ntohs(so_in6->sin6_port) )
            return AF_INET6;
        break;
    default:
        break;
    }
   
    return -1;
}

const char *Pgrab_error(int error)
{
    const char *str = NULL;
 
    switch (error)
    {
    case G_NOPROC:          str = "no such process";                break;
    case G_NOCORE:          str = "no such core file";              break;
    case G_NOPROCORCORE:    str = "no such process or core file";   break;
    case G_NOEXEC:          str = "cannot find executable file";    break;
    case G_ZOMB:            str = "zombie process";                 break;
    case G_PERM:            str = "permission denied";              break;
    case G_BUSY:            str = "process is traced";              break;
    case G_SYS:             str = "system process";                 break;
    case G_SELF:            str = "attempt to grab self";           break;
    case G_INTR:            str = "operation interrupted";          break;
    case G_LP64:            str = "program is _LP64, self is not";  break;
    case G_FORMAT:          str = "file is not an ELF core file";   break;
    case G_ELF:             str = "libelf error";                   break;
    case G_NOTE:            str = "core file is corrupt or missing required data";  break;
    case G_STRANGE:         str = "unanticipated system error";     break;
    case G_ISAINVAL:        str = "wrong ELF machine type";         break;
    case G_BADLWPS:         str = "bad lwp specification";          break;
    case G_NOFD:            str = "too many open files";            break;
    default:                str = "unknown error";                  break;
    }

    return (str);
}

컴파일 방법

# gcc -o port port.c -lnsl -lsocket -ldl

컴파일 후 port 실행

참고 : http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/ptools/pfiles/pfiles.c
참고 : http://blog.daum.net/aswip/8429248

2011/07/12 18:08 2011/07/12 18:08
샤이 이 작성.

당신의 의견을 작성해 주세요.

http://www.net-snmp.org/
 * 소스 버전 net-snmp-5.4.2.1 설치 절차
 

OS: SunOS 5.10 x86
 gcc Version: 3.4.6
 net-snmp Version: 5.4.2.1
 

-----------------------------------------------------
 -- OS 설치 시 자동 설치된 snmp check.
 

1. 데몬 프로세스 확인.
 # ps -ef | grep snmp
 35:   636 ?        S  0:03 /usr/sfw/sbin/snmpd
 43: 12815 ?        S  0:00 /usr/lib/snmp/snmpdx -y -c /etc/snmp/conf
 45: 12839 ?        S  0:00 /usr/lib/dmi/snmpXdmid -s sgn
 

2. 서비스 등록 확인.
 # svcs | grep dmi
 113:online          8월_03  svc:/application/management/dmi:default
 
# svcs | grep snmp
 120:online         15:01:37 svc:/application/management/snmpdx:default
 
# svcs | grep sma
 112:online          8월_03  svc:/application/management/sma:default
 

3. svcadm 명령으로 disable 시킨다.
 # svcadm disable svc:/application/management/dmi:default
 # svcadm disable svc:/application/management/snmpdx:default
 # svcadm disable svc:/application/management/sma:default
 

4. ps 및 svcs 명령으로 정상적으로 중지되었는지 확인한다.
 # ps -ef | grep snmp
 # svcs | grep dmi
 # svcs | grep snmp
 # svcs | grep sma
 

-----------------------------------------------------
 -- 설치
 

1. install
 -- root 로 로그인.
 -- gcc 설치.
 
# gunzip net-snmp-5.4.2.1.tar.gz
 # tar -xvf net-snmp-5.4.2.1.tar
 # cd net-snmp-5.4.2.1
 
# ./configure
 # make
 # make install
 

2. conf 설정
 -- EXAMPLE.conf를 /usr/local/share/snmp/snmpd.conf 로 복사하여 수정하여 사용한다.
 # cp EXAMPLE.conf /usr/local/share/snmp/snmpd.conf
 # vi /usr/local/share/snmp/snmpd.conf
 

3. 시스템에 맞게 수정한다
 # NETWORK -> IP Address 대역으로 수정 (예: NETWORK -> 192.168.2.0)
 # COMMUNITY -> Manager 연동할 인증 문자열로 수정 (예: COMMUNITY -> public)
 #       sec.name  source          community
 com2sec local     localhost       public
 com2sec mynetwork 192.168.2.0/24  public
 
-- OMS(Manager)와 해당 서버(Agent)가 192.168.2.XXX 대로 연동이 가능하면 “192.168.2.0/24” 로 설정하시면 되고,
 -- 외부 망으로만 연동이 가능하다면 “공인IP.0/24” 로 설정하시면 됩니다.
 
-- (1) 192.168.2.xxx 대역으로 연동 가능 시: com2sec mynetwork 192.168.2.0/24    public
 -- (2) 외부 망으로만 연동 가능 시:           com2sec mynetwork 공인IP.0/24 public
 

4. 시스템에 맞게 수정한다
 syslocation Seoul Korea
 syscontact aaa@bbb.com
 

5. 아래 부분을 찾아 관리 대상이 되는 프로세스를 등록한다.
 # Process checks.
 #
 #  The following are examples of how to use the agent to check for
 #  processes running on the host.  The syntax looks something like:
 #
 #  proc NAME [MAX=0] [MIN=0]
 #
 #  NAME:  the name of the process to check for.  It must match
 #         exactly (ie, http will not find httpd processes).
 #  MAX:   the maximum number allowed to be running.  Defaults to 0.
 #  MIN:   the minimum number to be running.  Defaults to 0.
 proc aaaProck 1 1
 proc bbbProc 1 1
 proc cccProc 1 1
 

6. 아래 부분을 찾아 관리 대상이 되는 Disk를 등록한다.
 # disk checks
 #
 
# The agent can check the amount of available disk space, and make
 # sure it is above a set limit.
 
# disk PATH [MIN=DEFDISKMINIMUMSPACE]
 #
 # PATH:  mount path to the disk in question.
 # MIN:   Disks with space below this value will have the Mib's errorFlag set.
 #        Default value = DEFDISKMINIMUMSPACE.
 disk / 10000
 

7. 자동 실행 스크립트 작성
 -- 시스템이 부팅 될때 실행한다.
 -- 스크립트 작성 후 한번 실행시킨다.
 
# cd /etc/rc3.d
 # vi S78net-snmp
 

#!/sbin/sh
 #
 # /etc/rc3.d/S78net-snmp
 #
 # pkill has moved over the years so we need to find it
 #
 LD_LIBRARY_PATH=/usr/lib:/lib:/usr/share/lib:/usr/local/lib:/usr/local/ssl/lib
 PATH=/sbin:/usr/sbin:/bin:/usr/bin
 export PATH LD_LIBRARY_PATH
 
X=`which pkill`
 
case "$1" in
 'start')
     /usr/local/sbin/snmpd
     ;;
 
'stop')
     $X -TERM -x -u 0 snmpd
     ;;
 
*)
     echo "Usage: $0 { start | stop }"
     exit 1
     ;;
 esac
 exit 0
 

# chmod +x S78net-snmp
 

8. 기존에 설치된 snmp 부팅시 로드 되는 부분 제거.
 /var/svc/profile/generic_open.xml
 enabled='false' 로 수정.
 
  <service name='application/management/sma' version='1' type='service'>
     <instance name='default' enabled='false' />
   </service>
   <service name='application/management/dmi' version='1' type='service'>
     <instance name='default' enabled='false' />
   </service>
   <service name='application/management/snmpdx' version='1' type='service'>
     <instance name='default' enabled='false' />
   </service>

 ====================================================================
출처: http://childeye.tistory.com/208

2011/07/11 09:45 2011/07/11 09:45
샤이 이 작성.

당신의 의견을 작성해 주세요.


사용자 삽입 이미지

















 

만남을 소중이 여기는 사람과 사랑을 하세요.

그래야 행여 당신에게 이별이 찾아와도

당신과의 만남을 잊지않고 기억해 줄 테니까요
.




사랑을 할 줄 아는 사람과 사랑을 하세요.

그래야 행여 익숙지 못한 사랑으로

당신을 떠나보내는 일이 없을 테니까요.




무언가를 잃어본 적이 있는 사람과 사랑을 하세요

그래야 행여 무언가를 잃어버릴 때가 와도

잃어버린다는 것의 아픔을 알고 더이상 잃어버리고

싶어하지 않을 테니까요




기다림을 아는 이와 사랑을 하세요.

그래야 행여 당신이 방황을 할 때

그저 이유없이 당신을 기다려 줄 테니까요.




슬픔을 아는 이와 사랑을 하세요

그래야 행여 당신이 슬퍼질 때

당신의 슬픔을 함께 해줄 수 있을 테니까요




항상 가까이에 있어 줄 수 있는 사람과 사랑을 하세요.

그래야 행여 어느 때 갑자기 보고 싶어지더라도

뛰쳐나가 만날 수 있을 테니까요




가슴이 따뜻한 이와 사랑을 하세요

그래야 행여 가슴이 시린 겨울이 찾아와도

그대의 따뜻한 가슴에 몸을 녹일 수 있을 테니까요




진실된 사람과 사랑하세요

그래야 행여 그대가 나의 거짓된 모습을 보더라도

그대의 진실로 나를 감싸줄 테니까요




진실로 자신의 모든 것을 사랑해 줄 수 있는 이와 사랑을 하세요

그래야 행여 당신의 한 모습이 나빠보이더라도

사랑하는 이의 다른 모습을 보며 감싸안을 수 있을 테니까요




그리고 진실로 진실로 자기 자신을 사랑할 줄 아는 이와 사랑하세요

자기 자신을 사랑할 줄 아는 사람이 남 또한

사랑할 줄 안데요..




-김남조
2011/07/06 23:11 2011/07/06 23:11
샤이 이 작성.

당신의 의견을 작성해 주세요.

리눅스와 윈도우가 인식하는 \n(개행문자)에는 차이가 있다.

윈도우는 엔터키를 눌러 개행문자입력할 경우 해당 개행문자는 Carriage Return(CR)과 Line Feed(LF)가 함께 들어가게 된다. 즉, CR과 LF가 함께 들어가야만 하나의 라인이 끝난것으로 인식을 하는것이다.

하지만 리눅스는 Carriage Return(CR) 하나만으로 윈도우의 CR+LF기능을 함께 처리 한다.
따라서 윈도우에서 작성한 텍스트 파일 또는 소스파일을 그대로 Linux 시스템에 올리게 되면 해당 파일이 정상적인 작동을 하지 않는 경우가 발생 할 수 있는 것이다.

이는 윈도우에서 작성할때 입력된 CR은 VI에서 인식이 되나 LF가 인식이 되지 않기 때문이며, LF코드값을 삭제해 주면 정상적인 사용이 가능하다.

LF 코드값은 리눅스에서는 Vi 라는 에디터 프로그램을 이용하여 간단히 수정할 수 있다.

Vi에서 해당 파일을 오픈할때 그냥 오픈할 경우 LF값이 보이지 않으므로 바이너리(Binary)로 열어 코드값을 치환한다.


Ex ) vi -b 파일명


이걸 몰라 삽질을 20분!!! ㅜ_ㅜ 완전 안습쓰나미다... ㅜ_ ㅜ


PS. vi -b 파일명으로 열었을때 ^M 문자가 보이는 경우 정상적으로 스크립트가 실행되지 않을때가 있습니다. 이럴땐 ^M 문자를 없애야 하는데 이걸 어떻게 없애야 할지 걱정스러울 때가 있을 것 입니다. (아시는 분은 패에에에스~ ~)

vi에서 제일 아래 행으로 내리세요 (Shift + G)
: 를 누르셔서 실행창을 띄우신 후 아래와 같이 입력 하시면 됩니다.

: 1, s/^M//g
여기서 ^M을 입력하는 방법은 Ctrl키를 누르신 상태에서 V와 M을 순서대로 누르시면 입력이 가능 합니다.

vi 편집기에서(바이너리 모드가 아닌 일반모드) 다음 명령어로 각 os 개행문자를 수정할 수 있습니다.

:set ff=dos
:set ff=unix

=======================================================================
출처:http://blog.lovetonight.net
추가:샤이
2011/07/06 10:56 2011/07/06 10:56
샤이 이 작성.

당신의 의견을 작성해 주세요.

: 1 : ... 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : ... 27 :