반응형

폴더 내 모든 압축파일 풀기


폴더 내 모든 압축파일 해제
폴더 내 모든 파일 압축풀기

명령어
find . -name '*.bz2' -exec tar xvf {} \;
실행예시
[root@zetawiki temp]# ll
total 7772
-rw-r--r-- 1 root root  813976 Nov 17 02:50 apr-1.5.0.tar.bz2
-rw-r--r-- 1 root root  695303 Nov 17 02:52 apr-util-1.5.3.tar.bz2
-rw-r--r-- 1 root root 5004719 Nov 23 02:49 httpd-2.4.7.tar.bz2
-rw-r--r-- 1 root root 1440869 May 28 17:16 pcre-8.33.tar.bz2
[root@zetawiki temp]# find . -name '*.bz2' 
./httpd-2.4.7.tar.bz2
./pcre-8.33.tar.bz2
./apr-1.5.0.tar.bz2
./apr-util-1.5.3.tar.bz2
[root@zetawiki temp]# find . -name '*.bz2' -exec tar xvf {} \;
... (생략)
apr-util-1.5.3/ldap/apr_ldap.mak
apr-util-1.5.3/encoding/
apr-util-1.5.3/encoding/apr_base64.c
[root@zetawiki temp]# ll
total 7788
drwxr-xr-x 27     1000  1000    4096 Nov 14 01:14 apr-1.5.0
-rw-r--r--  1 root     root   813976 Nov 17 02:50 apr-1.5.0.tar.bz2
drwxr-xr-x 19     1000  1000    4096 Nov 14 01:41 apr-util-1.5.3
-rw-r--r--  1 root     root   695303 Nov 17 02:52 apr-util-1.5.3.tar.bz2
drwxr-xr-x 11 testuser games    4096 Nov 20 02:36 httpd-2.4.7
-rw-r--r--  1 root     root  5004719 Nov 23 02:49 httpd-2.4.7.tar.bz2
drwxr-xr-x  7     1169  1169    4096 May 28 18:14 pcre-8.33
-rw-r--r--  1 root     root  1440869 May 28 17:16 pcre-8.33.tar.bz2



반응형
LIST
반응형
리눅스 파일 각각 압축
tar 파일 각각 압축

현재 폴더의 모든 txt 파일을 bz2로 압축


명령어
find . -name '*.txt' -exec tar cjvf {}.bz2 {} \;
실행예시
[root@zetawiki test]# ll
total 20
-rw-r--r-- 1 root root 7875 Jun 15 20:45 1.txt
-rw-r--r-- 1 root root 9450 Jun 15 20:45 2.txt
[root@zetawiki test]# find . -name '*.txt' -exec tar cjvf {}.bz2 {} \;
./2.txt
./1.txt
[root@zetawiki test]# ll
total 28
-rw-r--r-- 1 root root 7875 Jun 15 20:45 1.txt
-rw-r--r-- 1 root root 1189 Jun 15 20:45 1.txt.bz2
-rw-r--r-- 1 root root 9450 Jun 15 20:45 2.txt
-rw-r--r-- 1 root root 1193 Jun 15 20:45 2.txt.bz2

각각 압축 후 삭제[편집]

현재 폴더의 모든 txt 파일을 bz2로 압축한 후 txt 파일은 삭제

명령어
find . -name '*.txt' -exec sh -c "tar cjvf {}.bz2 {}; rm -f {};" \;
실행예시
[root@zetawiki test]# ll
total 20
-rw-r--r-- 1 root root 7875 Jun 15 20:45 1.txt
-rw-r--r-- 1 root root 9450 Jun 15 20:45 2.txt
[root@zetawiki test]# find . -name '*.txt' -exec sh -c "tar cjvf {}.bz2 {}; rm -f {};" \;
./2.txt
./1.txt
[root@zetawiki test]# ll
total 8
-rw-r--r-- 1 root root 1189 Jun 15 20:51 1.txt.bz2
-rw-r--r-- 1 root root 1193 Jun 15 20:51 2.txt.bz2


    로그 압축/삭제 샘플

    #!/bin/sh

    path=/home/hong/daemons
    find $path/* -type f -name "*.log-*.log" -mtime 2 -exec sh -c "tar cjvfP {}.bz2 {}; rm -f {};" \;
    find $path/* -type f -name "*.bz2" -mtime 7 -exec rm -f {} \;


    반응형
    LIST
    반응형
    log file 주기적 정리

    관리하는 서버에..

    간혹 로그가 쌓여서 서비스가 안되는 경우가 있다.

    해서.. 주기적으로 일정기간이 지난 로그파일은 삭제를 하고 싶은데..

    이럴때 자주 사용하는 명령어가  find 명령어다. 이걸 사용해서 삭제하는 스크립트를 작성하고.. crontab에 등록해놓으면.. 주기적으로 로그파일 정리를 하게 된다.

     

    find 의 원래 용도는.. 단어 뜻 그대로.. 일정요건의 파일을 찾아주는 명령어.

    기본 사용법은...

    $ find . -name *.php

    이런식으로.. find 경로명 [조건] 식으로 하면 된다..

    여기에.. [조건] 항목에 여러가지 옵션을 쓸 수 있는데... 그중 mtime 를 사용하면.. 일정시간이 지난 파일을 찾을 수 있다..

    몇가지 예를 통해서.. 간단한 사용법을 익혀보자.

     

    첫번째 예로.. apache 로그중에..  30일이 지난 로그를 찾고자 한다면..

    =======

    $ find /usr/local/apache/logs -mtime +30

    =======

    이렇게 하면 된다.

     

    두번째 예로.. 30일 넘은 로그들을 삭제하고 싶다면..?

    crontab에 넣으려고.. 스크립트 파일로 만들었다.

    =======

    #!/bin/sh

    cd /usr/local/apache/logs

    find ./*.log -mtime +30 -exec rm -f {} \;

    =======

    (find에 경로명을 바로 써주어도 되나.. 디렉토리가 여러개이고, 해당 디렉토리에서 여러 명령어를 실행할 수 있으므로 cd로 해당 디렉토리로 이동해서 실행하도록 했다. 그리고, 경로명에는 경로뿐 아니라, 파일명까지 포함되도 된다.. 다른파일은 안건드리도록 log파일만 find하도록 했다.)

    옵션을 좀 설명하자면..

    find 옵션중 -exec 옵션을 사용해서 특정 명령어를 실행시킬수 있다. 사용법은 -exec [명령어] \; 의 형태이며..

    명령어 내용중에 {}를 넣어주면 해당위치에 find에서 찾은 파일이 들어간다. 그리고.. exec 옵션의 마지막을 알리기 위해 끝엔 \; 를 붙여준다.

     

    조금.. 응용해서.. 30일 넘은건 삭제하고...

    5일이 넘은건 압축하고 싶다.. 물론 쉽게 가능하다.

    한데..삭제를 할때.. *.log뿐만 아니라 압축파일(*.log.Z)도 삭제해야하므로... 삭제시 조건은 *.log* 가 된다.

    =======

    #!/bin/sh

    cd /usr/local/apache/logs

    find ./*.log* -mtime +30 -exec rm -f {} \;

    find ./*.log -mtime +5 -exec compress {} \;

    =======

     

    한가지 문제가 발생했다.

    다른곳을 봤더니 로그파일이.. access_log.20091217 이런식으로 쌓인다.. (rotatelogs를 사용할 경우 이렇게 생길수있다.)

    find조건을 달려고보니.. 삭제를 할때도 *_log.* 으로 찾아야되고.. 압축할때도 *_log.* 로 해야한다..

    문제는.. 압축할때 *_log.*로 찾으면 이미 압축항 파일도 찾아진다는것..

    물론 compress가 이미 압축된 파일이라고 skip할테지만.. 맘에 걸린다.

    이럴때 쓸 수 있는 옵션이.. -name 옵션과.. not을 뜻하는 ! 옵션..

    원하는 바는 다음과 같이 하면 된다.

    =======

    #!/bin/sh

    cd /usr/local/apache/logs

    find ./*_log.* -mtime +30 -exec rm -f {} \;

    find ./*_log.* ! -name '*.Z' -mtime +5 -exec compress {} \;

    =======

    원래 -name 옵션은.. 파일명이 맞는걸 찾는 옵션인다... 앞에 ! 가 붙어서 반대의 의미를 갖는다.

    즉 파일명이 *.Z를 만족하지 않는 파일을 찾겠다는 것이다.

    -name 옵션은 자주 쓰이는데... 한가지 주의해야할것이.. 이상하게 평소대로 하면 오류가 나면서 잘 작동하지 않는 경우가 있다.

    이럴때는.. -name 의 값을 작은따옴표로 묶어주면 정상적으로 작동한다.(이것땜시.. 삽질했었다..)

     

    마지막으로 하나 더 예를 들자면...

    로그가 여러종류가 쌓아는데..

    그중에 access_log 와 error_log 만 골라서 압축,삭제를 하고 싶다..

    이럴때는 위에 나왔던 -name 옵션과... or 을 뜻하는 -o 옵션을 이용하면 된다. 그리고 조건을 \(, \) 로 묶어준다.

    =======

    #!/bin/sh

    cd /usr/local/apache/logs

    find ./* \( -name 'access_log*' -o -name 'error_log*' \) -mtime +30 -exec rm -f {} \;

    find ./* \( -name 'access_log*' -o -name 'error_log*' \) ! -name '*.Z' -mtime +5 -exec compress {} \;

    =======

     

    반응형
    LIST
    반응형

    CentOS ulimit 값 변경 (Too many open files Tomcat Error and NoClassDefFoundError)


    Too many open files Tomcat Error and  NoClassDefFoundError 에러가 톰캣에서 발생할 때 해결하는 방법이에요

    OS에서 파일 갯수를 제한하고 있는데 이걸 늘려줌으로써 해결할 수 있어요


    centos 상에서 ulimit 값은 아래와 같이 디폴트로 설정되어있어요

    (ulimit -a 쳐보면 나와요) --> 현재 로그인 된 계정의 설정 값이 보임

        /proc/[pid]/limits : 이것을 통해 프로세스에 적용된 limit 정보도 확인 가능



    이 값은 실행중인 파일이나 프로세스가 증가함에 따라 문제가 일으킬 수 있어요

    open files 값이나 max user processes 값이 적어서 생기는 문제에요

    이럴땐 

    /etc/security/limits.conf로 들어가서

    제일마지막에

    root hard nofile 65535

    root soft nofile 65535

    root hard nproc 65535

    root soft nproc 65535

    이걸 추가해주고 centos를 재시작해주면 끝! --> 재시작 안해도 되는 듯 합니다.

    그럼 ulimit -a명령어를 쳤을 경우 아래처럼 값이 변경되요




    위의 방법은 user lever open file 갯수 조정하는 방법이고

    전체 조정 방법은

        최대 open file 갯수 조회 방법

          #cat /proc/sys/fs/file-max

          #sysctl fs.file-max

    로 조회가 가능하고

    vi /etc/sysctl.conf에 들어가서 fs.file-max=66536과 같은 방식으로 조정이 가능해요



    반응형
    LIST

    + Recent posts