리눅스에서 버젼이나 사양을 확인하는 방법은 여러가지 있다.
가끔 필요하니, 리눅스 버젼 확인 명령어와 커널을 확인하는 명령어를 기록 해 두자.

 


 

OS 버젼 확인 1

가장 대표적인 방법이다.

  cat /etc/*release*

  CentOS release 6.5 (Final)
  LSB_VERSION=base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
  cat: /etc/lsb-release.d: 디렉터리입니다
  CentOS release 6.5 (Final)
  CentOS release 6.5 (Final)
  cpe:/o:centos:linux:6:GA

 

OS 버젼 확인 2

  cat /etc/issue

  CentOS release 6.5 (Final)
  Kernel \r on an \m

 

일반적인 커널 정보 확인

  uname -a
  Linux WAS2 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

 

OS bit 확인하기

  getconf LONG_BIT
  64
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] top  (0) 2021.05.06
[Linux] 리눅스 서버 60초 안에 상황 파악하기  (0) 2021.05.06
[Linux] find 명령어  (0) 2021.05.03
[Linux] 서버 동시 접속자 수 확인 명령어  (0) 2021.03.31
[Linux] 파일 압축 및 해제  (0) 2021.03.20

find는 리눅스에서 파일 또는 디렉토리를 계층구족로 검색할 때 사용함.
원하는 파일을 찾는데 오래 걸리긴 하지만 생각보다 활용도나 활용 빈도가 높아서 정리해 보기로 함.

 

명령어 구조

일반적인 리눅스 명령어와는 다르게 find 명령은 옵션보다 표현식이 더 많이 사용 됨.
검색 결과가 지정된 표현식의 조합에 따라 많이 달라짐.
(참조한 문서들에서 연산자 혹은 표현식, 명령어 등 표현이 다양해서 설명하다 용어가 바뀔 수 있음 주의.)

 

  find --help
  Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

  기본 경로로는 현재 디렉토리; 기본 표현식은 -print.
  표현식은 연산자, 옵션, 테스트 및 조치로 구성됨:

  연산자 (우선순위 감소; -다른 항목이 지정되지 않은 경우 암시적) :
        ( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2
        EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2

  위치 옵션 : -daystart -follow -regextype

  일반 옵션 (always true, 다른 표현식 앞에 지정됨):
        -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
        --version -xdev -ignore_readdir_race -noignore_readdir_race

  테스트 (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N
        -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME
        -ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN
        -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE
        -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN
        -readable -writable -executable
        -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N
        -used N -user NAME -xtype [bcdpfls]
        -context CONTEXT


  실행 옵션 : -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print 
        -fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
        -exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
        -execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;

 

옵션 DESC
-P 심볼릭 링크를 따라가지 않고, 심볼릭 링크 자체 정보 사용.
-L 심볼릭 링크에 연결된 파일 정보 사용.
-H 심볼릭 링크를 따라가지 않으나, Command Line Argument를 처리할 땐 예외.
-D 디버그 메세지 출력

 

표현식 DESC
-name 지정된 문자열 패턴에 해당하는 파일 검색.
-empty 빈 디렉토리 또는 크기가 0인 파일 검색.
-delete 검색된 파일 또는 디렉토리 삭제.
-exec 검색된 파일에 대해 지정된 명령 실행.
-path 지정된 문자열 패턴에 해당하는 경로에서 검색.
-print 검색 결과를 출력. 검색 항목은 newline으로 구분(기본값).
-print0 검색 결과를 출력. 검색 항목은 null로 구분.
-size 파일 크기를 사용하여 파일 탐색.
-type 지정된 파일 타입에 해당하는 파일 검색.
-mindepth 검색할 하위 디렉토리 최소 깊이 지정.
-maxdepth 검색할 하위 디렉토리 최대 깊이 지정.
-atime 파일 접근(access) 시각을 기준으로 파일 검색.
-ctime 파일 내용 및 속성 변경(change) 시각을 기준으로 검색.
-mtime 파일의 데이터 수정(modify) 시각을 기준으로 검색.

 

표현식 사용시 연산자를 이용하면 두 개 이상의 표현식 조합이 사용가능.
find 명령에서 두 개 이상의 표현식을 사용할 경우 연산자를 지정하지 않으면 기본적으로 AND 연산자가 적용됨.

표현식 DESC
(expression) expression 우선순위 지정.
!expression  
-not expression expression 결과에 NOT 연산
expression -a expression  
expression -and expression  
expression expression expression 간 AND 연산
expression -o expression  
expression -or expression expression 간 OR 연산

 


 

find 명령 사용 예제

현재 디렉토리 내에서 지정된 이름의 파일을 찾는 것은 간단함.
find 명령 뒤에 파일 이름을 지정하면 됨.

  [root@ASDF ~]# ls
  WAS-2.csv  anaconda-ks.cfg  install.log  install.log.syslog  watch.sh  공개  다운로드  문서  바탕화면  비디오  사진  음악  템플릿

  [root@ASDF ~]# find watch.sh
  watch.sh

보통 현재 디렉토리에서 파일을 찾을 땐 ls | grep 이거로 찾기 때문에 현재 디렉토리와 하위 디렉토리에 위치한 파일을 찾을 경우에는 find . -name "이거"를 사용함.

 

요약 예제

설명
find 현재 디렉토리에 있는 파일 또는 디렉토리 리스트 표시.
find [PATH] 대상 디렉토리에 있는 파일 또는 디렉토리 표시.
find . -name [FILE] 현재 디렉토리 및 하위 디렉토리에서 파일 또는 디렉토리 검색.
find / -name [FILE] 전체 파일 시스템에서 파일 검색.
find . -name "STR*" 이름이 특정 문자열로 시작하는 파일 검색.
find . -name "*STR" 이름이 특정 문자열로 끝나는 파일 검색.
find . -name "STR" 이름에 특정 문자열이 포함된 파일 검색.
find . -empty 크기가 0인 파일 또는 디렉토리 검색.
find . -name "*.EXT" -delete 특정 확장자를 가진 모든 파일 검색 후 삭제.
find . -name [FILE] -print0 검색된 리스트를 줄 바꿈 없이 이어서 출력
find . -name [FILE] -type f 파일 또는 디렉토리만 검색하기
find . -size +[N]c -and -size -[M]c 파일의 크기를 사용하여 파일 검색.
find . -name [FILE] -exec ls -l {} ; 검색됱 파일에 대한 상세 정보 출력.
find . -name [FILE] -exec grep "STR" {} ; 검색된 파일에서 문자열 찾기
find . -name [FILE] > [SAVE_FILE] 검색 결과를 파일로 저장.
find . -name [FILE] 2> /dev/null 검색 중 에러 출력하지 않기.
find . -maxdepth 1 -name [FILE] 하위 디렉토리 검색하지 않기.
find . -name [FILE] -exec cp {} [PATH] ; 검색된 파일 복사.

 

 


 

예제

 

현재 디렉토리에 있는 파일 및 디렉토리 리스트 표시

옵션 없이 find 명령만 사용하면 현재 디렉토리에 있는 모든 파일과 디렉토리(하위 디렉토리를 포함) 표시.
주로 디렉토리의 파일 리스트를 다른 명령으로 전달, 처리할 때 사용함.

  # 현재 디렉토리의 파일 및 디렉토리 출력.
  find

  # 현재 디렉토리의 모든 내용을 줄 바꿈 없이 출력.
  find -print0


대상 디렉토리에 있는 파일 및 디렉토리 리스트 표시

대상 디렉토리에 있응 파일 및 디렉토리 리스트 표시.

  find [PATH]


현재 디렉토리 아래 모든 파일 및 하위 디렉토리에서 파일 검색

현재 디렉토리에 포함 된 모든 하위 디렉토리 및 파일에서 지정된 파일을 검색.

  find . -name [NAME]


전체 파일 경로에서 검색

디렉토리 경로를 루트(/)로 지정하여 전체 경로에서 검색.

  find / -name "NAME"


파일 이름이 특정 문자열로 시작하는 파일 검색

특정 문자열로 시작하는 파일 검색.

  find . -name "STR*"


파일 이름에 특정 문자열을 포함하는 파일 검색

  find . -name "*STR*"


파일 이름이 특정 문자열로 끝나는 파일 검색

  find . -name "*STR"


빈 디렉토리 또는 크기가 0인 파일 검색

-empty 옵션을 넣으면 빈 디렉토리 또는 크기가 0인 파일 검색 가능.

  # 빈 디렉토리 또는 크기가 0인 파일 검색.
  find . -empty

  # STR 이라는 이름의 빈 디렉토리 또는 크기가 0인 파일 검색.
  find . -name STR -empty


특정 파일을 검색 후 삭제

-delete 옵션을 사용하면 검색된 파일 및 디렉토리를 삭제함.
검색 결과의 디렉토리가 비어있지 않으면 삭제되지 않음.

  find . -empty -delete


검색된 결과를 줄 바꿈 없이 이어서 출력

find의 기본 옵션이 -print인데, -print0 옵션을 주게 되면 줄 바꿈 없이 출력 가능.

  # 검색 결과를 줄 바꿈으로 구분하여 출력
  find .
  find . -print

  # 검색 결과를 줄 바꿈 없이 출력.
  find . -print0


파일 또는 디렉토리만 검색하기

-type 옵션을 사용하여, 파일의 종류를 지정할 수 있음.

  • d : directory special
  • f : regular file
  • l : symbolick link
  # 이름에 A가 포함되는 일반 파일 검색
  find . -name "*A*" -type f

  # 이름에 A가 포함되는 디렉토리 검색
  find . -name "*A*" -type d


파일의 크기를 이용하여 검색

-size 옵션을 사용하면 파일의 크기로 찾을 수 있음.
기본적으로 block 단위르 사용함. 파일 크기 뒤에 b, c, w, k, M, G 를 붙임으로 단위를 바꿔 조회 가능.

  • b : block
  • c : bytes
  • w : 2bytes
  • k : kb
  • M : MB
  • G : GB

크기 앞에 +(초과), -(미만)으로 범위 조건을 부여 가능하며, -size 옵션을 조합하여 크기의 범위를 사용 가능.

  # 파일 크기가 1024 bytes인 파일 검색.
  find . -size 1024c
  # 파일 크기가 1024 bytes를 초과하는 파일 검색.
  find . -size +1024c
  # 미만인 파일 검색.
  find . -size -1024c
  # 1024 초과, 2048 미만
  find . -size +1024c -size -2048c


검색된 파일에 대한 상세 정보 출력

-exec 옵션으로 검색된 결과를 이용해 다른 명령 실행 가능.

  ls
  BbsAuthorBindingInterceptor.class   LoginAuthorBindingInterceptor.class            ProgrmAuthorBindingInterceptor.class           TemplateBindingInterceptor.class              TemplateMainBindingInterceptor.class-bk_20210209
  ControllerInterceptor.class         NeoAuthorBindingInterceptor.class              ProgrmAuthorBindingInterceptor.class-20210320  TemplateBindingInterceptor.class-bk_20210203
  ControllerInterceptorAdapter.class  NeoAuthorBindingInterceptor.class-bk_20210407  StaffAuthorInterceptor.class                   TemplateMainBindingInterceptor.class

  # 현재 디렉토리에서 *.class 파일들의 상세정보 출력
  find . -name "*.class" -exec ls -al {} \;
  -rw-rw-r-- 1 user user 6475 2021-03-20 16:17 ./ProgrmAuthorBindingInterceptor.class
  -rw-r--r-- 1 user user 2273 2019-12-07 22:58 ./StaffAuthorInterceptor.class
  -rw-rw-r-- 1 user user 5819 2016-03-17 18:00 ./BbsAuthorBindingInterceptor.class
  -rw-rw-r-- 1 user user 1323 2015-08-24 16:54 ./ControllerInterceptor.class
  -rw-r--r-- 1 user user 4948 2021-01-15 12:33 ./LoginAuthorBindingInterceptor.class
  -rw-rw-r-- 1 user user 8673 2021-04-07 09:41 ./NeoAuthorBindingInterceptor.class
  -rw-r--r-- 1 user user 5455 2019-12-08 14:22 ./ControllerInterceptorAdapter.class
  -rw-rw-r-- 1 user user 3728 2021-02-09 15:56 ./TemplateMainBindingInterceptor.class
  -rw-r--r-- 1 root root 13309 2021-02-09 15:56 ./TemplateBindingInterceptor.class


검색된 파일의 라인 수 출력

find 명령과 wc 명령을 조합하여 검색된 파일의 문자 수 또는 라인수를 계산하여 출력 가능.

  ls -al
  합계 416
  -rw-r--r--.  1 root root   1462 2020-12-07 13:08 addrlink.js
  -rw-r--r--.  1 root root   1086 2015-08-06 15:41 admin.js
  -rw-r--r--.  1 root root  11208 2021-01-09 02:13 calendar.js
  -rw-r--r--.  1 root root   3027 2021-01-21 13:31 default.js
  -rw-r--r--.  1 root root   3027 2021-02-02 16:50 default.js-remote-20210202.js
  -rw-r--r--.  1 root root  97162 2020-12-07 13:08 jquery-1.12.4.min.js
  -rw-r--r--.  1 root root   2049 2020-02-18 14:28 lay_pop.js
  -rw-r--r--.  1 root root   2975 2017-09-28 10:59 map.js
  -rw-r--r--.  1 root root 136334 2020-03-23 11:10 program.js
  -rw-r--r--.  1 root root  82602 2020-03-23 11:10 program.min.js
  -rw-r--r--.  1 root root  10587 2015-08-06 15:41 tariff.js

  find . -name "*.js" -exec wc -l {} \;
  63 ./addrlink.js
  44 ./admin.js
  385 ./calendar.js
  146 ./default.js
  146 ./default.js-remote-20210202.js
  4 ./jquery-1.12.4.min.js
  73 ./lay_pop.js
  51 ./map.js
  2234 ./program.js
  0 ./program.min.js
  353 ./tariff.js


검색 된 파일에서 문자열 검색

find 과 grep을 조합해서, 검색된 파일안의 특정 문자열 찾기 가능.

  # .js 파일에 문자열 function이 있는지 검색
  find . -name "*.js" -exec grep "function" {} \;

  # .js 파일에 문자열 "reduce"가 있는 라인 표시
  find . -name "*.js" -exec grep -n "reduce" {} \;


검색중 에러 메세지 출력하지 않기

find 명령 실행중 접근 권한으로 에러가 나는 경우가 있음.
표준 에러 2가 발생할 경우 /dev/null로 redirection 시켜 출력을 하지 않을 수 있음.

  find / -name "*a*" 2> /dev/null


하위 디렉토리 검색하지 않기

-maxdepth 옵션을 사용하면 검색할 하위 디렉토리의 깊이 제한 가능함.
-maxdepth 옵션은 다른 옵션보다 먼저 사용해야 함.

  find / -maxdepth 1 -name "sys"


검색 된 파일 복사

cp 명령과 조합하여 검색 된 파일을 지정된 디렉토리에 복사 가능.

  find . -name "*.class" -exec sp {} /bk/ \;
728x90
반응형

?

제목을 어떻게 지어야 할지 모르겠어서 일단 이렇게 둔다.
한번에 작성 하기도 어렵고 작업한지도 좀 오래 되서 기억을 더듬어야 하므로 계속해서 업데이트 될 예정.

사건의 발단

현재 회사에서 맡고있는 프로젝트의 WAS 중 하나가 자꾸 죽는 문제가 생겼었다.
원인은 파악 안 되고, 평일, 휴일, 밤 낮 구분없이 셧다운이 되니 미칠 노릇이였고.
원인 해결이 우선이긴 하지만 먼저 WAS가 다운되면 일단 자동으로 다시 살리도록 하기로 했다.

 

  

  

cron으로 서버 상태 확인 shell,

서버 재시작 shell

tomcat 7문제

JVM의 GC 설정

728x90
반응형

'WEB > SERVER_SIDE' 카테고리의 다른 글

[Linux] Tomcat 재시작 하는 스크립트  (0) 2020.11.13
watch -n 1 'netstat -nap | grep :80 | grep ESTABLISH | wc -l'

 

728x90
반응형

아래 정규표현식은 html 태그를 제거하기 위한 식으로 모든 태그를 제거함.
html 태그가 포함된 src라는 문자열에서 <tag></tag>를 '' 빈 문자열로 치환해 줌.

  const extractTextPattern = /(<([^>]+)>)/gi;

 

모든 태그 제거하기

  <div id="target">
    <h1>This Content is target</h1>
    <span>to replace</span>
    .
  </div>

아래 코드로 위의 #target 엘리먼트를 innerHTML을 통해 하위 모든 문자열을 불러온 후 담은 태그들을 제거할 것임.

  let target = document.getElementById('target');

  let src = target.innerHTML;
  console.log( src );
  /**
   * ->
   * <h1>This Content is target</h1>
   * <span>to replace</span>
   * .
   */
  let extractedText = src.replace(extractTextPattern, '');
  console.log( extractedText );
  /**
   * ->
   * This Content is target
   * to replace
   * .
   */

모든 태그 요소가 제거되어 안의 텍스트만 꺼낼 수 있음.

 

원하는 태그만 제거하는 방법

모든 태그가 아닌 내가 원하는 태그만 선택하여 제거하는 방법도 있음.
h1 태그만 없애고 싶다면, 다음 패턴을 사용하면 됨.

  const extractSpanPattern = /<(\/h1|h1)([^>]*)>/gi;

  let eraseSpan = src.replace(extractSpanPattern, '');
  console.log( eraseSpan );
  /**
   * ->
   * This Content is target
   * <span>to replace</span>
   * .
   */

 

script 태그와 javascript 소스까지 제거하는 패턴

종종 script 태그와 js 소스까지 지워야 하는 경우도 있음.
이럴 경우에는 패턴을 다음과 같이 사용하면 됨.

  const jsPttrn = /<script[^>]*>((\n|\r|.)*?)<\/script>/gim;

참고로 css 태그와 css 소스까지 지우고 싶다면,

  const cssPttrn = /<style[^>]*>((\n|\r|.)*?)<\/style>/gim;

 

플래그를 사용한 정규표현식 고급 사용법

정규 표현식은 여섯 개의 옵션이 있음. 이를 통해 전역 검색 또는 대소문자 구분 없는 검색등을 할 수 있음.

options description
g 전역검색. 종종 g 옵션을 몰라서 replaceAll이라는 함수를 새로 만들어 사용한 코드도 있음.
i 대소문자 구분 없는 검색
m 다중행 (multiline) 검색
s . 에 개항 문자 매칭 (ES2018)
u 패턴을 유니코드 코드 포인트의 나열로 취급합.
y 'sticky' 검색 수횅. 문자열의 현재 위치부터 검색을 수행함.
728x90
반응형

압축

tar 압축

  tar -cvf [파일명.tar] [폴더|파일명]

  # a 라는 폴더를 a.tar로 압축
  tar -cvf a.tar a

tar 압축 해제

  tar -xvf [파일명.tar]

  # a.tar라는 tar 파일 압축해제 예시
  tar -xvf a.tar
option desc
-c compress 압축
-x extract 해제, 추출
-z gzip으로 작업
-v 작업 과정의 파일들 command line에 출력
-f 파일 이름 지정
-p 파일 권한 저장
-C 대상 경로 지정

tar.gz 압축

  tar -zcvf [파일명.tar.gz] [폴더|파일명]

  # a라는 폴더를 a.tar.gz으로 압축
  tar -zcvf a.tar.gz a

tar.gz 압축 해제

  tar -zxvf [파일명.tar.gz]

  # a.tar.gz라는 tar.gz 파일 압축 해제
  tar -zxvf a.tar.gz

zip 압축

  zip [파일명.zip] [폴더|파일명]

  # 현재폴더 전체를 a.zip으로 압축
  zip a.zip ./*

  # a.zip으로 압축하고 현재 폴더의 모든 것과 현재 폴더의 **하위 폴더들**도 모두 압축
  zip a.zip -r ./*

zip 압축 해제

  unzip [파일명.zip]

  # a.zip 압축 해제
  unzip a.zip

  # 특정 폴더에 압축 해제
  unzip a.zip -d ./경로

728x90
반응형

리눅스나 MacOS 는 tail 함수가 내장 되어 있기 때문에 서버의 로그를 실시간으로 보는 법은 간단하다.

Window의 경우는 cmd 상에서 명령어가 있긴 하지만, 버젼에 따라 없거나, 옵션 값도 달라지고 cli의 ux가 좋지 않기 때문에 차라리 써드파티 어플리케이션을 사용하는 게 낫다.

mtail 이라는 프로그램인데, 설치는 필요 없고, 아래 링크에서 다운로드 후 압축을 풀고 실행, 대상 파일을 불러와 주기만 하면 된다.

 

프로그램 다운로드 -> http://ophilipp.free.fr/op_tail.htm

728x90
반응형

linux에서 log 통계 내는 명령어

Linux 서버에서 서버를 운영하다 보면, 시간대별 유입 건수, 특정 ip의 접속 건수, http 에러가 몇 건인지 파악하기 위해 access 로그를 이용하여 접속 통계가 필요한 경우가 있다.

 

ip별 접속 건수 확인

cat 파일_이름 | awk '{print $1}' | sort | uniq -c | sort -n

awk '{print $1}'은 각 라인에서 첫번째 값(IP)을 의미 한다.
uniq -c는 해당 라인이 몇번 나오는지를 카운트 한다.

만약 line 수가 많아 일정 횟수 이상만 확인하고 싶다면, `| awk '$1 >= 500' 조건을 추가해 준다.

 

시간대별 접속 건수 확인

cat 파일_이름 | awk '{print $4}' | awk -F ":" '{print $2}' | uniq -c

awk '{print $4}'는 각 라인의 4번째 필드인 시간을 추출한 뒤,
추출한 필드를 다시 ":"를 구분자로 2번째 필드(시간)을 추출하여 그 카운트를 센다.

 

HTTP 결과 코드별 접속 건수 구하기

cat 파일_이름 | awk '{print $9}' | sort | uniq -c

awk '{print $9}' 9번째 필드인 http 결과 코드를 추출하여 정렬 후, 그 카운트를 센다.

 

완성 예제 스크립트 파일

  _date=`date "+%Y-%m-%d"`
  tgt=localhost_access_log.$_date.txt

  echo -e "\nTARGET FILE : $tgt\n"

  echo -e ":: COUNT OF ACCESS IP ::"
  cat $tgt | awk '{print $1}' | sort | uniq -c | sort -n | awk '$1 >= 500'

  echo -e "\n:: COUNT OF ACCESSER BY HOUR ::"
  cat $tgt | awk '{print $4}' | awk -F ":" '{print $2}' | uniq -c

  echo -e "\n:: COUNT OF HTTP STATUS CODE ::"
  cat $tgt | awk '{print $9}' | sort | uniq -c

  echo -e "\n\n"

 

이를 3일치를 뽑으면 다음과 같다.

  SET=$(seq 0 3)

  function dateLogPrinter() {
    local _date=$1

    echo -e "\n----- DATE : $_date -----"

    echo -e ":: COUNT OF ACCESS IP ::"
    cat localhost_access_log.$_date.txt | awk '{print $1}' | sort | uniq -c | sort -n | awk '$1 >= 500'

    echo -e "\n:: COUNT OF ACCESSER BY HOUR ::"
    cat localhost_access_log.$_date.txt | awk '{print $4}' | awk -F ":" '{print $2}' | uniq -c

    echo -e "\n:: COUNT OF HTTP STATUS CODE ::"
    cat localhost_access_log.$_date.txt | awk '{print $9}' | sort | uniq -c

    echo -e "\n\n"

  }


  for i in $SET
  do
    dateLogPrinter `date -d "-$i days" "+%Y-%m-%d"`
  done

기타

특정 기간 지난 로그 파일 찾아 지우기.

find -name '*.out' -mtime +200 | xargs rm
out으로 끝나는 파일중 200일이 지난 파일을 찾아 지운다.

  

압축된 로그파일 출력하기

catzcat 으로 바꿔서 위와 같은 명령을 수행하면 됨.

 


참고

728x90
반응형

조달청/나라장터 iframe 링크 생성

공공 SI를 진행하다 보면 조달청/나라장터 데이터를 iframe으로 넣어 달라는 요구 사항이 있다.
처음에는 어떻게 하는지 몰라서 한참 삽질 했는데,
나중에 알고보니 iframe용 url 생성하는 서비스가 따로 있었다.
그건 여기

728x90
반응형

인덱스 리빌드

DB의 쿼리 수행 속도 저하의 문제 중 하나는 쿼리 튜닝이 문제일 수도 있지만, 인덱스의 밸런스가 깨졌을 경우의 가능성도 있다.
인덱스 밸런스가 깨졌다는게 무슨 의미냐 하면,
DB는 ArrayList와 트리를 합쳐 놓은 구조와 비슷한 B+트리 구조인데, 트리 아래의 데이터들이 무작위로 수정되거나 삭제 되었을 경우 트리 구조가 불균형을 이루게 된다.

이런 경우 인덱스를 재구성 해주면 쿼리 수행 속도를 향상 시킬 수 있다.
(물론 튜닝이 잘 된 쿼리를 짜는게 중요하다.)

오라클의 인덱스 재설정 쿼리는 ALTER INDEX 인덱스명 REBUILD;이고,
인덱스 명을 조회하는 쿼리는 SELECT INDEX_NAME FROM USER_INDEXED;이다.
그리고 인덱스의 데이터 타입이 LOB이라면 인덱스 리빌드는 불가능 하다.

따라서 이 두 쿼리를 조합하고, 조건을 추가하면 리빌드 하는 쿼리는 다음과 같다.

SELECT 'ALTER INDEX ' || INDEX_NAME || ' REBUILD ;'
FROM USER_INDEXES
WHERE INDEX_TYPE != 'LOB'
;

경험상 CUBRID나 TIBERO 도 동일했던 것 같다.

참고 : https://docs.oracle.com/database/121/SPATL/alter-index-rebuild.htm#SPATL1017

 
 
728x90
반응형

+ Recent posts