Linux에서 라인 수 카운트 하기.

  wc -l

해당 명령을 |와 함께 사용하면 됨.

EX

localhost_access_log.2021-06-22.txt 파일의 총 라인 수 카운트

  $ cat localhost_access_log.2021-06-22.txt |  wc -l
  90916

localhost_access_log.2021-06-22.txt 파일에서 특정 문자열이 포함된 라인 수 카운트

  # cat localhost_access_log.2021-06-22.txt | grep contractList.do | wc -l
  82
728x90
반응형

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

[Raspberry PI] 초기 셋팅  (0) 2022.03.07
[Linux] There are stopped jobs  (0) 2021.05.28
[Linux] 인터넷 속도 확인  (0) 2021.05.28
[Linux] top  (0) 2021.05.06
[Linux] 리눅스 서버 60초 안에 상황 파악하기  (0) 2021.05.06
There are stopped jobs.

리눅스에서 이렇게 에러가 나면서 로그아웃이나 접속 종료가 되지 않는 경우가 있음.

fg %1

fg는 foreground의 약자로 위의 명령어는 포그라운드 프로세스로 복귀한는 명령어임.

해달 프로세스로 복귀해서 종료 시켜준뒤 로그아웃 또는 접속 종료하면 됨.

728x90
반응형

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

[Raspberry PI] 초기 셋팅  (0) 2022.03.07
[Linux] 라인 수 카운트 하기  (0) 2021.06.23
[Linux] 인터넷 속도 확인  (0) 2021.05.28
[Linux] top  (0) 2021.05.06
[Linux] 리눅스 서버 60초 안에 상황 파악하기  (0) 2021.05.06
  wget --no-check-certificate -O /dev/null  http://www.naver.com

 

728x90
반응형

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

[Linux] 라인 수 카운트 하기  (0) 2021.06.23
[Linux] There are stopped jobs  (0) 2021.05.28
[Linux] top  (0) 2021.05.06
[Linux] 리눅스 서버 60초 안에 상황 파악하기  (0) 2021.05.06
[Linux] 리눅스 버전 확인하기  (0) 2021.05.06

실시간으로 CPU 사용을 체크해 주는 명령어임.
시스템의 프로세스와 메모리 사용 상태, 리눅스 서버의 성능을 5초간격으로 업데이트 하면서 화면에 출력.
어떤 프로세스가 CPU를 과도하게 잡고있는디 파악할 때 필요함.


사용법

  top [option]
OPTION DESC
-b 배치모드로 정보 출력.
-d delay delay 값 만큼 초 단위로 정보를 업데이트. (기본 5)
-i idle 토글 값이 off 일 때, idle 프로세스나 좀비 프로세스 정보를 출력하지 않음.
-n num num 시간 만큼 업데이트 정보를 출력함.
-p pid 지정한 pid의 프로세스 정보만 출력.
-q 시간의 간격 없이 계속하여 업데이트 정보를 출력.
-s 몇 개의 대화식 명령을 비활성화.(뭘?)
-S 누적된 정보 출력.
  top

  top - 16:33:32 up 19 days,  1:39,  1 user,  load average: 0.00, 0.02, 0.00
  Tasks: 272 total,   1 running, 271 sleeping,   0 stopped,   0 zombie
  Cpu(s):  0.2%us,  0.1%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
  Mem:  16291780k total, 16078316k used,   213464k free,   220104k buffers
  Swap: 25165816k total,        0k used, 25165816k free, 15329424k cached

    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  16584 nobody    20   0 2023m  17m 3592 S  1.3  0.1 120:06.69 httpd
  2181  root      20   0  121m 2264 1856 S  0.3  0.0   0:40.52 nvcmgr
  15970 nobody    20   0 2023m  13m 3584 S  0.3  0.1  30:17.18 httpd
  16052 nobody    20   0 2023m  14m 3584 S  0.3  0.1  34:41.69 httpd
  29604 root      20   0 15168 1384  948 R  0.3  0.0   0:00.04 top
      1 root      20   0 19364 1540 1232 S  0.0  0.0   0:03.10 init
      2 root      20   0     0    0    0 S  0.0  0.0   0:00.04 kthreadd
  ...

옵션은 많지만 보통은 옵션 없는 명령이나 pid 정도만 확인함.
실행 후 h 를 입력하면 사용할 수 있는 단축키를 확인할 수 있음.


표출 데이터 : 첫 번째 줄

리눅스 컴퓨터의 정보와 시스템 부하율를 출력함.
top - 16:33:32 up 19 days, 1:39, 1 user, load average: 0.00, 0.02, 0.00

  • 16:33:32 :
    시스템 현재 시간
  • up 19 days, 1:39 :
    시스템이 부팅된 후 현재까지 운영된 시간.
  • 1 user :
    현재 로그인된 사용자의 수.
  • load average :
    0.00, 0.02, 0.00 최근 1분, 5분, 15분 각각의 시스템 평균 부하율.


표출 데이터 : 두 번째 줄

프로세스들의 종합적인 상황정보 출력.
Tasks: 272 total, 1 running, 271 sleeping, 0 stopped, 0 zombie

  • Tasks: 272 total :
    전체 실행중인 프로세스 수.
  • 1 running :
    현재 실행된 프로세스 수.
  • 271 sleeping :
    유휴상태에 있는 프로세스 수.
  • 0 stopped :
    종료된 프로세스 수.
  • 0 zombie :
    좀비 프로세스 수.
    • 대부분의 프로세스는 부모프로세스가 종료되면 자식프로세스들은 자동종료됨.
      부모프로세스가 종료되었음에도 남아있는 자식프로세스를 좀비프로세스라고 하며, 시스템이 느려지는 원인이 됨.
      대부분의 좀비 프로세스는 init 프로세스에 의해 관리되며, kill 명령으로 강제종료 시켜도 무방함.


표출 데이터 : 세 번째 줄

CPU의 사용 및 실행 상태를 출력.
Cpu(s): 0.2%us, 0.1%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st

  • Cpu(s): 0.2%us :
    사용자가 실행시킨 프로세스들의 CPU 사용율.
  • 0.1%sy :
    시스템에서 사용하는 프로세스들의 CPU 사용율.
  • 0.0%ni :
    noce 정책에 의해 사용되고 있는 CPU 사용율.
  • 99.8%id :
    사용되지 않고 남은 CPU 사용율.
  • 0.0%wa :
    입출력 대기상태의 CPU 사용율.
  • 0.0%hi :
    IRQs에 사용된 CPU.
  • 0.0%si :
    softIRQs에 사용된 CPU.
  • 0.0%st :
    다른 인스턴스 실행에 주어진 time, steal 값


표출 데이터 : 네 번째 줄

메모리 사용 상태 출력.
Mem: 16291780k total, 16078316k used, 213464k free, 220104k buffers

  • Mem: 16291780k total :
    실제메모리의 사용량.
  • 16078316k used :
    프로세스에 의해 사용되고 있는 메모리 사용량.
  • 213464k free :
    사용되지 않고 남아있는 메모리 양.
  • 220104k buffers :
    버퍼링된 메모리 양.


표출 데이터 : 다섯 번째 줄

스왑 메모리의 상태 출력.
Swap: 25165816k total, 0k used, 25165816k free, 15329424k cached

  • Swap: 25165816k total :
    전체 메모리 스왑 양.
  • 0k used :
    프로세스에 의해 사용된 스왑메모리 양.
  • 25165816k free :
    남아있는 스왑메모리양.
  • 15329424k cached :
    캐싱 메모리양.

현재 시스템의 스왑메모리 운용 상황이므로 스왑메모리가 많이 사용되고 있다라는 의미는 실제 메모리가 부족하는 것의 증거임.


표출 데이터 : 여섯 번째 줄

전체 개별 프로세스들의 시스템 자원 사용현황과 실행상태를 파악할 수 있음.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

  • PID :
    해당 프로세스의 유일한 프로세스 번호(Process ID, 키 값)
  • USER :
    프로세스를 실행시킨 사용자.
  • PR :
    프로세스의 우선순위(Priority, 키값 : H)
  • NI :
    프로세스의 NICE 값 (Nice Value, 키값 : I), Minus(-)를 가질수록 높은 우선순위를 갖고, Plus(+)를 가질수록 낮은 우선순위를 가짐.
    0 값은 우선순위가 적용되지 않음.
  • VIRT :
    해당 프로세스가 사용한 가상메모리의 총량 (Virtual(kb), 키값 : o)
  • RES :
    해당 프로세스의 물리적인 메모리 사용량 (Resident Size(kb), 키값 : q)
  • SHR :
    해당 프로세스에 의해 사용된 공유 메모리의 총량(Shared Mem Size(kb), 키값 : t)
  • S :
    프로세스의 상태를 나타냄.
    • S : sleeping
    • R : running
    • W : swapped out process
    • Z : zombies
  • %CPU :
    프로세스가 사용하는 CPU 사용율.
  • %MEM :
    프로세스가 사용하는 메모리 사용율.
  • COMMAND :
    실행된 명령어.


top 실행 후 단축키 명령어

CMD DESC
space 정보 업데이트
shift + p CPU 사용율 내림차순 정렬
shift + m 메모리 사용율 내림차순 정렬
shift + t 프로세스 작동 시간 내림차순 정렬
k pid 프로세스 종료
a 메모리 사용량에 따라 정렬
b batch 모드
c cli, 프로그램 이름 토글
h 매뉴얼
n or # 출력할 프로세스 수 지정
s 출력할 정보의 업데이트 시간 조정
q top 종료
728x90
반응형

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

[Linux] There are stopped jobs  (0) 2021.05.28
[Linux] 인터넷 속도 확인  (0) 2021.05.28
[Linux] 리눅스 서버 60초 안에 상황 파악하기  (0) 2021.05.06
[Linux] 리눅스 버전 확인하기  (0) 2021.05.06
[Linux] find 명령어  (0) 2021.05.03

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

 


 

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
반응형
watch -n 1 'netstat -nap | grep :80 | grep ESTABLISH | wc -l'

 

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
반응형

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
반응형

웹 서버

  • 학습 개요
    웹 서버의 동작 원리를 알아보고 리눅스 환경에서 웹 서버 구성을 위하여 널리 사용죄는 APM을 학습.
    Apache 웹 서버, PHP 처리기, MySQL을 각각 설치하고 Apache의 설정 방법을 알아봄.

  • 학습 목표

    1. 웹 서버의 동작 방법과 HTTP 프로토콜 설명 가능.
    2. Apache 웹 서버, PHP 처리기, MySQL 설치 가능.
    3. Apache 웹 서버의 주요 설정 항목을 설명 가능.
    4. APM을 이용하여 웹 서비스 제공 가능.

웹서버

  • 클라이언트의 HTTP 요청을 처리하여 웹 페이지의 내용을 클라이언트에게 제공하는 서버 프로그램.
    • 웹 페이지를 요청하고 보여주는 웹 브라우져는 클라이언트.
    • 서버와 클라이언트는 네트워크를 통해 연결 되므로, 웹 서버와 웹 브라우져 사이에 통신을 위한 프로토콜이 필요함.
  • 많이 사용되는 웹 서버 - Apache, ISS Nginx 등.
    • W3Techs에서 조사된 시장 점유율.
      • Apache 48.4%, Nginx 35.6%, IIS 10.7%

HTTP (HyperText Trasfer Protocol)

  • 웹 환경에서 서버와 클라이언트 간에 정보를 주고 받기 위한 프로토콜.
  • 요청(request)와 응답(response) 프로토콜.
    • 클라이언트가 서버에 특정 자원에 대한 요청(GET, POST 등)을 보냄.
    • 클라이언트의 요청에 대해 서버가 응답.
      • 응답코드 (200 OK, 404 Not Found 등)와 함께 요청한 자원을 전달.
  • 대부분 TCP를 사용하며, 포트(port)번호는 일반적으로 80번을 사용함.

APM (Apache, PHP, MySQL)

  • Apache HTTP 서버, PHP 스크립트 처리기, MySQL DB 관리시스템을 지칭
    • 동적으로 웹 페이지를 만들고, 웹 페이지 생성에 필요한 데이터를 관리할 수 있는 프로그램이 필요함
  • 모두 공개 소프트웨어로 웹 사이트 구축을 위한 비용절감의 방법으로 많이 사용.
  • 리눅스 시스템에서 많이 사용됨. LAMP(Linux, Apache, MySQL, PHP)이라고도 함.

APM을 이용하는 웹 서버의 동작 과정

  • 클라이언트가 웹 문서를 Apache 웹 서버에 요청.
  • 웹 문서 내에 있는 PHP 스크립트가 PHP 모듈 등에 의해 처리되어 HTML 문서가 생성되어 클라이언트에게 응답.
  • PHP 스크립트 처리 과정 중 MySQL DB에 접근하여, query를 수행.

PHP (HyperText Processor) 스크립트 처리기

  • PHP는 동적으로 웹 페이지를 생성할 수 있는 스크립트 언어.
  • 서버에서 실행되며 HTML 파일에 포함하여 사용함.
  • PHP 대신 다른 스크립트 언어인 Perl이나 Python을 이용하여 APM 구축 가능.

MySQL DBMS

  • DBMS로 C/C++, C#, Java, PHP 등의 언어에서 사용할 수 있도록 API를 제공.
  • PHP에서 MySQL을 사용하려면 'php-mysql' 패키지를 설치해야 함.

APM 설치

  • 대부분의 리눅스 배포판이 APM을 포함하고 있음.
  • 다음 명령으로 설치 여부 확인 가능.
    • yum list installed | grep httpd
    • yum list installed | grep mysql
    • yum list installed | grep php
  • httpd는 Apache HTTP 서버 프로그램 이름으로 http deamon을 의미.
  • 설치 순서
    1. 최신 파일을 이용한 설치 명령.
      • yum -y install httpd
    2. Apache update 명령.
      • yum -y update httpd
    3. Apache 설치 후 MySQL 설치 명령.
      • yum -y install mysql mysql-server
    4. MySQL 설치 후, PHP 설치.
      • yum -y install php
      • yum -y install php-mysql
  • 데스트톱 메뉴의 패키지 관리도구(시스템 > 관리 > 소프트웨어 추가/제거)에서도 설치 가능.

Apache, PHP 설치 확인 방법

  • 방화벽 설정(tcp 80 port)와 httpd 실행 여부 확인.
  • Apche
    • 브라우져에서 http://localhost 접속.
  • PHP
    • /var/www/html/test.php
    •   <?php
          phpinfo();
        ?>
    • 브라우져에서 http://localhost/test.php 접속.

Apache 설정

  • Apache 설정 파일은 /etx/httpd/conf/httpd.conf
    • 전역의 기본 설정을 가지며 1000 라인이 넘음.
    • /etc/httpd/conf.d 디렉토리도 기타 설정 파일이 위치함.
  • 설정을 변경한 후에는 Apache 서버를 다시 시작해야 적용됨.
    • service httpd restart
  • 현재 런레벨에서 서비스 활성화 방법.
    • 부팅 시 자동으로 서비스를 시작하게 하는 방법.
    • chkconfig httpd on
  • 요청과 응답
    • /var/www/html/ 디렉토리에 index.html 파일 생성.
    • http://localhot/index.html 요청하여 확인.

Apache 설정 파일에서 지시어 목록 참고

  • 참고
  • 이후의 내용은 httpd.conf 파일에서 사용되는 지시어를 설명함.

ServerTokens

  • 서버의 응답 헤더 설정
value ex
Prod Server: Apache
Major Server: Apache/2
Minor Server: Apache/2.0
Min Server: Apache/2.0.41
OS Server: Apache/2.0.41 (Unix)
Full Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2

ServerRoot

  • Apache 서버가 설치된 디렉토리.
    • 서버가 설정 파일이나 로그 파일을 보관하는 디렉토리.
    • 설정 파일에서 파일을 참조할 때의 기준 디렉토리.
  • 일반적으로 기본값 /etc/httpd

Timeout

  • 클라이언트로부터 수신을 기다리는 최대 대기 시간을 초 단위로 설정.
  • 설정값이 60인 경우.
    • 서버는 60초 이내에 클라이언트로 부터 TCP 패킷을 모두 받거나,
      클라이언트에 데이터를 보낸 후 60초 이내에 클라이언트로부터 확인(ACK) 패킷을 받아야 함.

PidFile

  • 주 서버 프로세스로 httpd의 PID가 기록되는 파일을 설정함.
  • run/httpd.pid로 설정된 경우
    • 서버가 실행 중이라면, 해당 파일에 httpd의 PID로 31038이 저장되어 있음.

KeepAlive

  • 클라이언트가 한 번 연결로 서버와 여러 번의 요청과 응답을 주고받을 수 있도록 지속적인 연결을 허용할지 여부를 On 또는 Off 로 설정.
    • HTTP/1.0 까지는 한 쌍의 요청과 응답이 끝나면 TCP 연결이 끊어짐.
    • HTTP/1.1 ~ 이후에는 KeepAlive를 On으로 설정하면 클라이언트가 한 번의 연결로 서버에 여러 번 요청후 응답 받을 수 있음.

MaxKeepAliveRequests

  • KeepAlive가 On으로 설정된 경우, 클라이언트가 지속적인 연결을 유지하며 보낼 수 있는 최대 요청의 수를 설정.
  • 서버의 성능을 극대화 시키기 위해서 큰 값으로 설정함.
  • 기본값은 100, 0으로 설정하면 제한 없이 요청 받음.

KeepAliveTimeout

  • 연결을 끊지 않고 다음 요청을 대기하는 최대 시간
    • KeepAlive가 On으로 설정된 경우, 연결을 유지하면서 클라이언트의 다음 요청을 기다리는 최대 대기 시간을 초 단위로 설정.
    • 15로 설정하면 15초 동안 클라이언트로부터 요청을 기다림.
    • 큰 값으로 설정하는 경우에는 서버 성능에 문제가 발생될 수 있음.

StartServers

  • 초기에 생성하는 자식 서버 프로세스의 수를 설정.
  • 8로 설정된 경우, PidFile에서 PID가 같은 httpd가 8개의 자식 프로세스를 초기에 생성함.

MinSpareServers & MaxSpareServers

  • 유휴 자식 서버 프로세스 수의 최솟값, 최댓값 설정
    • 유휴 자식 프로세스 수가 부족하거나 초과시, 자식 서버 프로세스를 생성하거나 종료시키는 기준이 됨.
  • 최솟값이 5, 최댓값이 20으로 설정된 서버
    • 유휴 자식 서버 프로세스가 5라면, 5개를 유지하기 위해 클라이언트의 요청이 있을 때 자식 서버 프로세스를 계속 생헝.
    • 유휴 자식 서버 프로세스가 20이라면, 20개를 유지하기 위해 클라이언트의 요청이 끝날 때 자식 서버 프로세스를 계속 삭제.

MaxClients

  • 동시에 접속 가능한 클라이언트 수의 최댓값.

MaxRequestsPerChild

  • 1개 자식 서버 프로세스가 종료 전까지 처리할 수 있는 최대 요청 수.
  • 설정 값이 4000인 경우.
    • 자식 서버 프로세스가 처리한 요청 수가 4000을 초과하면 해당 자식 서버 프로세스를 종료함.
    • 설정 값이 0인 경우는 요청 수에 제한이 없음을 의미.

Listen

  • 서버가 사용할 TCP 포트 번호 설정.
    • 일반적으로 80
    • port 또는 ip:port를 지정함.
    • ex )
      • 모든 네트워크 인터페이스로부터 오는 80번 포트에 대한 요청을 받아들이며 다른 포트를 추가지정 가능.
      •   Listen 80
          Listen 8080
      • 특정 IP만 허용하는 방법
          Listen x.x.x.x:80

LoadModule

  • 웹 서버의 기능을 확장시키는 DSO(Dynamic Shared Object)모듈을 설정
    • Apache 웹 서버의 특징 -> 모듈화.
    • 모듈을 추가로 로드함으로 새로운 기능 추가 가능.
  • 설정 값 형식
    • 모듈 이름을 먼저 쓰고, 그 다음 해당하는 파일명을 씀.
  • 여러 모듈을 로드하려면 다음과 같이 각각의 줄로 설정.
    •   LoadModule a_module a_module_dir
        LoadModule b_module b_module_dir
        LoadModule c_module c_module_dir

User와 Group

  • Apache 서버의 실행에 사용되는 사용자와 그룹.
    • 서버 프로세스의 사용자와 그룹을 지정함.
  • 서버는 초기에 root 계정으로 실행되나, 일단 실행 된 후에는 낮은 권한의 계정으로 실행되어야 함.
    • 기본적으로 사용자와 그룹 이름은 apache.
    • 서버 프로세스가 root 권한으로 실행되면, 악의적인 클라이언트에 의한 요청이 root 권한으로 실행되어 보안문제가 발생함.
    • User와 Group을 root로 지정하면 안됨.

ServerAdmin

  • 웹 서버 관리자의 이메일 주소를 설정.
    • 서버에 문제가 생겼을 때, 클라이언트로 보내지는 오류 메세지에 포함되는 메일 주소.

DocumentRoot

  • 웹 서버가 웹 콘텐츠를 저장하는 루트 디렉토리.
    • 사용자 요청에 의해 웹 서버가 웹 페이지를 찾을 때의 루트 디렉토리
  • 기본 설정 값은 /var/www/html
    • http://localhost/test.html에 대한 웹 페이지 요청은 서버 컴퓨터에서 /var/www/html/test.html 파일에 대한 요청임.

UserDir

  • 클라이언트 요청에서 ~ userid가 있는 경우의 처리 여부를 설정.
    • 루트 사용자 이외의 다른 사용자가 자신의 계정으로 홈페이지를 만들 때의 기본 디렉토리를 설정.
  • 설정 값이 public_html 인 경우.
  • 설정 값이 disabeld로 설정된 경우.
    • 사용자 계정의 홈 디렉토리로 변환하지 않음.
  • public_html로 설정하였으나 해당 사용자의 웹 페이지가 열리지 않는다면, 사용자 디렉토리의 mod를 확인 해야 함.
    • 홈 디렉토리인 ~ userid는 711, ~ userid/public_html음 755여야 함.
    • 설정이 잘몬 될 경우 403 에러가 남.

DirectoryIndex

  • 클라이언트가 디렉토리를 요청한 경우, 기본으로 사용할 웹 페이지의 파일 이름을 설정.
    • 일반적으로 index.html을 설정.
  • http://localhost/docs/를 요청한 경우.
    • /var/www/html/docs/index.html 파일이 있으면 이것을 보냄.
    • 없다면 디렉토리 목록을 보여줌.

ErrorLog

  • 웹 서버의 에러 로그가 기록될 파일을 설정
  • 설정 값이 logs/error_log인 경우, ServerRoot의 설정 값에 더해져서 /etc/httpd/logs/error_log 파일에 에러 로그가 기록 됨.
    • /var/log/httpd/access_log 파일에는 엑세스 정보가 기록 됨.

AddLanguage

  • 웹 서버를 통해 서비스되는 웹 문서의 지원 언어를 설정
    • 웹 서버가 다국어 페이지를 제공하는 경우.
  • 한국어를 추가하는 경우 ko .ko를 설정 값으로 추가하면 됨.
    • 언어와 파일 확장자를 표시.
  • 언어를 추가할 때마다 다음과 같이 새로운 줄로 설정.
  AddLanguage ca .ca
  AddLanguage cs .cz .cs
  AddLanguage ko .ko

AddDefaultCharset

  • 웹 서버에서 제공하는 응답 문서의 Content-Type이 text/plain 또는 text/html인 경우 기본 문자 집합을 설정.
    • 설정 값이 UTF-8인 경우, 응답 헤더에 Content-Type:text/html;charset=UTF-8 과 같은 것이 만들어 짐.
  • 기본 문자 집합을 설정하지 않으려면 설정 값을 Off로 지정.

APM을 이용한 웹 서비스

PHP 설정

  • /etc/httpd/conf.d/php.conf
    • APM과 관련한 PHP 스크립트 처리기의 설정 파일
    • php.conf의 설정들은 Apache 서버의 설정에 추가되는 것들로, httpd.conf에서 사용하는 설정명을 따름.
    • PHP 자체의 기본 설정 파일로 /etc/php.ini가 존재함.

MySQL 설정

  • /etc/my.cnf
    • MySQL 설정 파일
      • datadir=... : 데이터 디렉토리 설정
      • socket=... : 사용할 소켓 파일 설정
      • user=... : 사용할 계정 설정
  • /usr/share/mysql
    • 시스템 규모에 따른 다양한 설정 파일 제공됨.
  • 추가 설정
    • mysql_secure_installation 을 실행하여 다음 설정 진행.
    • root 계정의 비밀번호 설정.
    • 익명 사용자 허용 여부, root 계정의 원격 로그인 허용.
    • test Data의 제거 여부.
728x90
반응형

+ Recent posts