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

 


 

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

대상 서버의 포트가 열려있는지 확인하는 방법

부제 ) telnet 없이 포트 오픈 확인하는 방법

대부분의 서버는 보안 문제로 ssh나 http, telnet 을 사용할 수 없는 경우가 있다.

이런 경우에 대상 버의 포트가 열려 있는지 확인 하는 방법에 대해서 삽질하다, 잊으면 안될것 같아서 남겨본다.

Linux의 경우이다.

echo > /dev/tcp/IP/PORT

bash의 내장 기능으로 자세한 내용은 여기 에서 확인 할 수 있다.
포트가 열린 경우라면, 아무 메세지가 나오지 않는다. echo $? 해보면 정상적인 프로세스의 종료를 의미하는 0이 나온다.
포트가 닫힌 경우라면, 에러메세지가 나오고 echo $?의 결과가 1이 나온다.

포트가 열린 경우

    $ echo > /dev/tcp/127.0.0.1/22
    $ echo $?
    0

포트가 닫힌 경우

    $ echo > /dev/tcp/127.0.0.1/10002
    bash: connect: 연결이 거부됨
    bash: /dev/tcp/127.0.0.1/10002: 연결이 거부됨
    $ echo $?
    1

curl -v telnet://IP:PORT

curl의 파라미터중 url에 telnet 스키마가 허용된다.

포트가 열린 경우

    $ curl -v telnet://IP:PORT
    * About to connect() to IP port PORT (#0)
    *   Trying IP... connected
    * Connected to IP (IP) port PORT (#0)

포트가 닫힌 경우

    $ curl -f telnet://IP:PORT
    curl: (7) couldn't connect to host
728x90
반응형

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

[Linux] 파일 압축 및 해제  (0) 2021.03.20
[Linux etc tip] 접속 로그 분석 하기  (0) 2021.02.15
[Linux] 웹 서버  (0) 2020.12.13
[Linux] 원격 관리  (0) 2020.12.13
[Linnux] 네트워크 설정 및 점검  (0) 2020.12.05

웹 서버

  • 학습 개요
    웹 서버의 동작 원리를 알아보고 리눅스 환경에서 웹 서버 구성을 위하여 널리 사용죄는 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
반응형

원격관리

  • 학습 개요
    telnet, ftp, rcp 등 원격 관리를 위한 전통적 방법을 알아보고 문제점을 파악해 보자.
    암호화를 이용하는 SSH 서비스에 관해 알아보고, OpenSSH 퍀지의 설치 여부와 방화벽 설정 및 서비스 실행 여부를 확인해 보자.
    ssh, sftp, scp 등 다양한 SSH 클라이언트 프로그램의 사용법을 알아보자.

  • 학습 목표

    1. telnet, ftp, rcp의 보안 취약점을 설명 가능.
    2. OpenSSH 패키지 설치.
    3. 방화벽 설정과 서비스 설정, SSH 서버 운영 가능.
    4. ssh, sftp, scp 클라이언트 프로그램 사용 가능.

전통적인 방법

전통적 원격 접속 방법

  • telnet, rlogin, rsh, ftp, rcp 등.
  • 전통적인 방법들은 암호화가 되지 않은 데이터를 주고 받음.
    • 도청이나 위변조 등 보안에 취약함.
  • 현재 거의 쓰지 않음.

telnet

  • 원격 컴퓨터에 telnet 프로토콜로 접속하는 프로그램
    • 사용자 계정, 비밀번호를 이용하여 원격으로 로그인 함.
  • telnet [-l user] host || telnet user@host
    • -l 생략 할 경우 호스트로부터 사용자 계정을 요구 받음.
    • -l 옵션 대신 @을 이용, 사용자 계정을 제시할 수도 있음.
  • 사용이 끝나면 logout 또는 exit을 이용하여 로그아웃.

ftp

  • 원격에서 터미널로 접속하여 파일을 업로드하거나 다운로드 할 수 있는 파일 전송 프로토콜 또는 프로그램

rcp

  • 원격의 컴퓨터와 서로 파일을 복사하는 프로그램
    • cp 명령과 유사
  • rcp [-r] source_file target_file
    • source_file을 target_file로 복사함.
    • ex) rcp a.txt jeaha@aws.ip:.
    • target_file이 디렉토리라면 해당 디렉토리에 source_file을 복사함.
    • -r 옵션을 사용하면 source_file이 디렉토리이며,
      그 안의 모든 서브 디렉토리도 함께 target_file 디렉토리로 복사함.
    • 원격 파일의 경우 [user@]host[:remote_file]의 형태.
  • rcp는 ftp와 달리 일회성으로 파일을 전송함.

Secure Shell (SSH)

  • telnet, ftp, rcp 등의 서버와 클라이언트 간 연결을 통해 주고 받는 모든 명령과 결과 및 계정 정보 등이 암호화 되지 않는 문제가 있음.
  • SSH는 원격 로그인이나 원격 데이터 통신에 사용되는 프로토콜로 패킷을 암호화하여 전홍
    • 전통적인 원격 관리 방법들의 문제점을 해결함.
  • 서버 / 클라이언트 구조로 동작하며, 보통 TCP 포트 22를 사용하여 서로 통신함.
    • 보안을 위해 우선 전자서명을 이용하여 서버와 클라이언트 간 연결을 인증하고, 그 후 서버와 클라이언트 간에 주고받는 메세지를 모두 암호화 함.
  • SSH를 사용하기 위해 필요한 프로그램
    • Server : sshd가 deamon 형태의 프로세스로 동작 중이어야 함.
    • Client : 사용 목적에 따라 ssh, sftp, scp 등이 필요.

OpenSSH 패키지

  • SSH 프로토콜을 사용하는 패키지로 공개 소스 프로그램.
    • 암호화된 안전한 통신을 제공하는 네트워크 연결 도구의 집합.
      • server : sshd
      • client : scp, sftp, ssh
  • 현재 대부분의 리눅스 배포판에 OpenSSH가 포함되어 있음.
    • 설치 확인 : yum list installed | grep openssh
    • 서버 설치 : yum -y install openssh openssh-server
    • 클라 설치 : yum -y install openssh-clients
    • 업데이트 : yum -y update openssh
  • 전역 설정 파일은 /etc/ssh/ 디렉토리에 저장됨.
  • 개별 사용자 설정 파일은 ~/.ssh/ 디렉토리에 저장됨.

SSH 서버의 실행

  • SSH를 이용하기 위해서는 sshd 데몬이 실행 중이어야 함.
    • 실행 : service sshd start
    • 중지 : service sshd stop
    • 상태 : service sshd status
  • 부팅 시 자옫으로 데몬을 시작시킬 수 있음(활성화).
    • 런레벨 별 서비스의 활성화 여부 확인은 chkconfig --list sshd.
    • 부팅 시 자동 실행 방법은 chkconfig sshd on.

서비스 설정 도구

  • 데스크탑 메뉴에서 '시스템 관리 > 관리 > 서비스' 실행.
  • '서비스 설정'창을 연 후 sshd를 찾아서 활성화 및 활성 상태를 확인하고 변경 가능.

방화벽 설정

  • 방화벽을 사용 중이라면, 설정을 확인한 후 사용하려는 서비스의 해당 포트와 프로토콜을 열어둬야 함.
    • 원격의 사용자가 어떤 서비스를 사용할 수 있는지를 제어할 수 있음
    • 방화벽 설정 파일은 /etc/sysconfig/iptables
  • 데스크탑 메뉴에서 '시스템 > 관리 > 방화벽'
    • 방화벽 설정 창에서 [신뢰하는 서비스] 선택, 해당 서비스를 선택, 적용.
    • [비활성화]는 방화벽을 사용하지 않는다는 뜻.

가상 머신의 SSH 서버에 접속하기

  • 호스트 PC 또는 외부 가상 머신에 설치된 sshd 또는 httpd에 접속.
    • 호스트 PC는 네트워크 인터페이스를 가지고 있음.
    • 가상 머신은 별도의 가상 네트워크 인터페이스를 가짐.
    • 가상 머신의 IP 주소는 기본적으로 10.0.2.15로 할당 됨.
  • 방법
    • 가상 머신의 리눅스에서 방화벽 설정 확인.
    • 가상 머신 리눅스에서 서버 프로세스 실행 여부 확인.
  • Port Forwarding 설정
    • 호스트 PC의 IP 주소와 Port 로 접속할 때,
      가상 머신의 IP 주소와 Port로 연결.

SSH 클라이언트 - 원격 접속

  • ssh는 SSH 서버에 원격으로 접속하기 위한 클라이언트 프로그램
    • 사용자 계정과 비밀번호를 이용하여 로그인하고, 이후에는 컴퓨터에 직접 로그인한 것과 동일하게 이용할 수 있음.
    • telnet, rlogin, rsh 등을 대체
  • [-l user] host || ssh user@host
    • ssh -l jeaha 192.168.0.10과 같이 실행.
    • ssh에서는 telnet과 같이 리눅스 명령어의 사용이 가능함.
    • exit, logout 명령으로 로그아웃.
  • 클라이언트 컴퓨터에서는 ~/.ssh/know_hosts 파일에
    원격으로 접속했던 호스트의 호스트 명, 암호의 종류, 원격 호스트 공개 키를 저장.
  • 윈도우에서는 공개 소프트웨어인 Putty 또는 Xshell을 클라이언트 프로그램으로 이용해서 접속 가능.

SSH 클라이언트 - 원격 파일 전송 : sftp

  • sftp는 서버에 원격 접속하여 파일을 업로드 하거나 다운로드 할 수 있는 클라이언트 프로그램.
    • 암호화된 연결릉 제외하면 사용 방법은 ftp와 같음.
  • sftp [user@]host
    • sftp jeaha@192.168.0.20
    • 원격 호스트 접속에 성공하면 지정된 사용자 계정의 호스트를 이용할 수 있음.
      • 업로드 : put localfile
      • 다운로드 : get remotefile
  • sftp 명령
CMD DESC
help sftp에서 사용할 수 있는 명령 조회
ls 원격 작업 디렉토리 조회
cd path 원격 작업 디렉토리 변경
mkdir path 원격 디렉토리 생성
chmod mode path 파일 path에 대한 권한을 mode로 변경
get 파일을 원격 서버에서 로컬 클라이언트로 받음
put 파일을 로컬 에서 원격으로 보냄
mget 여러 파일을 원격으로 부터 로컬로 받음. 파일 이름에 wildcard 가능
mput 여러 파일을 로컬에서 원격으로 보냄. wildcard 가능.
bye, exit, quit 종료

SSH 클라이언트 - 원격 파일 복사 : scp

  • 원격의 컴퓨터와 서로 파일을 복사하는 명령
  • scp [-r] source_file target_file
    • 소스(또는 타겟) 파일이 원격에 존재하는 경우
  • sftp로도 scp 기능을 수행할 수 있음.
    • 대화식이 아닌 일회성으로 파일을 전송하는 것이 가능.
728x90
반응형

네트워크 설정 및 점검

  • 학습 개요
    네트워크 인터페이스와 네트워킹과 관련이 있는 시스템 서비스를 확인해 보자.
    네트워크 설정을 확인하거나 설정을 바꾸는 명령을 학습하고 네트워크 설정 정보를 가지고 있는 파일에 관해 살펴보자.
    네트워크의 상태를 점검하는 명령의 기능과 사용법을 알아보자.

  • 학습 목표

    1. ifconfig 명령의 사용법과 출력 결과의 이해.
    2. 네트워크 설정 파일을 나열.
    3. 네트워크 상태를 점검하는 명령을 나열하고 설명.

네트워크 설정

네트워크 인터페이스

  • 컴퓨터와 네트워크 간의 연결을 제공하는 장치.
  • 네트워크 인터페이스 카드(NIC)에 위치함.
    • 랜(LAN) 카드 또는 이더넷(Ethernet) 카드라고도 불림.
  • 개별 네트워크 인터페이스 카드는 고정된 이더넷 주소(MAC ADDR)를 가지고 있으며 IP 주소를 할당 받을 수 있음.

ifconfig

  • 네트워크 인터페이스 정보를 확인하거나 설정하는 명령.

    • 이더넷 주소와 IP 주소를 확인할 수 있음.
    • 관리자는 IP 주소를 설정할 수 있음.
    • 네트워크 인터페이스 설정이나 통계를 확인할 수 있음.
      [ec2-user@AWS ~]$ ifconfig
      eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
            inet  172.31.0.0 (IP)  netmask 255.255.240.0 (class c의 주소)  broadcast 172.31.0.0
            inet6 0::0:0:0:0  prefixlen 64  scopeid 0x20<link>
            ether 0:0:0:0:0:0  txqueuelen 1000  (Ethernet)
            RX    packets 1516448  bytes 525514468 (501.1 MiB)
            RX    errors 0  dropped 0  overruns 0  frame 0
            TX    packets 1250885  bytes 169586125 (161.7 MiB)
            TX    errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
      lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
          inet  127.0.0.1  netmask 255.0.0.0
          inet6 ::1  prefixlen 128  scopeid 0x10<host>
          loop  txqueuelen 1000  (Local Loopback)
          RX    packets 12  bytes 848 (848.0 B)
          RX    errors 0  dropped 0  overruns 0  frame 0
          TX    packets 12  bytes 848 (848.0 B)
          TX    errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    • eth : 이더넷.
    • lo : (loop back interface) 같은 컴퓨터 내에서 가상의 네트워크 인터페이스.
  • ifconfig [-a] [interface]

    • 옵션 -a는 모든 네트워크 인터페이스에 대한 정보를 보여줌.
    • 네트워크 인터페이스를 지정하면 해당 정보만 보여줌.
  • ifconfig interface [IP_ADDR] [NETMASK_ADDR] [BROADCAST_ADDR] [UP|DOWN]

    • interface : 네트워크 이름(ex: eth0).
    • IP_ADDR : 설정하려는 IP 주소.
    • NETMASK_ADDR : 설정하려는 서브넷 마스크.
    • BROADCAST_ADDR : 설정하려는 브로드캐스트 주소.
    • UP | DOWN : 해당 네트워크 인터페이스를 활성화 또는 비활.

네트워킹 관련 서비스

  • network 서비스
    • 네트워킹의 사용을 위해 반드시 필요하며 네트워크 카드의 활/비활을 담당.
    • 부팅시 수행되는 /etc/rc.d/init.d/network 스크립트를 의미.
  • NetworkManager 서비스.
    • 네트워크 설정의 편리한 관리를 위해 필요.
      • 네트워크의 자동 연결 또는 네트워크 설정의 변경을 즉시 인지하여 처리함.
    • 부팅시 수행되는 /etc/re.d/init.d/NetworkManager 스크립트를 의미.

ifconfig 명령으로 확인 가능한 네트워크 인터페이스 정보

INFO DESC
MAC 주소 Ethernet H/W 주소 또는 어댑터 주소라고도 하며 48bit 구성
IP 주소 32bit 구성
broadcast 주소 같은 네트워크에 속한 모두에게 메세지를 보낼 때 사용하는 주소. ARP(Address Resolution Protocol), DHCP(Dynamic Host Configuration Protocol) 등에 사용
subnet mask 서브 네트워크의 범위를 나타내는 값
MTU 패킷의 최대 크기, 보통 1500
RX packets 받은 패킷 수
TX packets 보낸 패킷 수
RX bytes 받은 바이트 수
TX bytes 보낸 바이트 수
Interrupt 주소 인터럽트 주소

네트워크 관리를 위한 GUI

  • GNOME -> '시스템 > 기본 설정 > 네트워크 연결'
    • '네트워크 연결' 창이 나타남.
    • 여기서 네트워크 인터페이스 정보를 확인하거나 변경 가능.
    • 데스크톱 패널에서 NetworkManager 아이콘을 사용할 수 있음.

네트워크 설정 파일

  • 네트워크를 사용하기 위해 필요한 여러 가지 정보를 저장.
    • 네트워크 기능이 정확하게 동작하기 위해 필요함.
    • 여러 네트워크 설정 파일이 존재함.
  • 네트워크 설정 파일은 대부분 /etc 디렉토리에 위치함.
    • 또는 /etc/sysconfig 디렉토리에 위치함.
  • /etc/sysconfig/network-scripts/ 디렉토리에 존재하는 ifcfg-eth0과 같은 인터페이스 설정 파일도 있음.
    • 개별로 인터페이스에 대한 IP 주소, 넷마스크, 브로드캐스트 주소와 네트워트 파라미터를 설정.

/etc/sysconfig/network

  • 네트워킹의 활성화 여부, 호스트 명, 기본 게이트웨이 등 기본적 네트워크 설정을 포함한 파일
    • 모든 네트워크 인터페이스에 적용됨.
    • 파일을 변경했다면 네트워크 서비스나 시스템을 재시작해야 효과가 나타남.
  • 라인별로 설정할 대상과 값을 표시함
    •   NETWORKING=yes
        HOSTNAME=unix.knou.ac.kr
        GATEWAY=192.168.0.1
    • NETWORKING : ... 네트워크 설정이 되어 있으면 yes
    • HOSTNAME : ... 호스트명. 도메인명으로 나타냄
    • GATEWAY : ...는 기본 네트워크 게이트웨이의 IP 주소

/etc/resolv.conf

  • DNS 서버를 지정하며 사용할 도메인명과 도메인 검색 경로 등도 지정.
    • 네임서버 설정이 없으면 숫자로 된 IP 주소를 사용해야 함.
  • 라인 별로 설정할 대상과 값을 표시 함.
    nameserver 192.168.0.1
    nameserver 192.168.0.1
    domain jeaha.dev
    search jeaha.dev abc.dev asdf.dev
    • nameserver :
      • DNS 서버의 IP 주소를 지정.
      • 만약 DNS 서버를 추가로 설정할 경우에는 새로운 줄에 nameserver와 함께 IP 주소를 기록.
      • 첫 번째 네임 서버에 문제가 생기면 다음 네임서버를 사용 함.
    • domain :
      • 로컬 도메인명을 기록
    • search :
      • 불완전하게 호스트명만 사용하는 경우, 도메인명으로 사용할 수 있는 것을 설정.
        • 기본적으로 로컬 도메인명이 사용됨.
        • 빈칸을 구분하여 최대 6개까지 지정할 수 있음.

/etc/hosts

  • 호스트명과 IP 주소 및 별명을 설정한 파일.
    • 보통 첫 줄에 루프백 인터페이스에 대한 정보를 포함하고 있음.
    • 파일에 설정된 IP 주소는 DNS를 사용하지 않고 직접 전송함.
      127.0.0.1   localhost localhost.localdomain
      192.168.0.1 www.jeaha.dev

/etc/hosts.allow

  • host.deny 파일과 함께 '호스트 엑세스 제어 파일'이라 함.
  • 현재 시스템의 TCP/IP 서비스를 이용할 수 있는 호스트들을 설정.
  • 라인 별로 서비스와 호스트를 지정함
      sshd: 12.34.56.67, 192.168.0.
      httpd: ALL

/etc/hosts.deny

  • 현재 시스템의 TCP/IP 서비스를 이용할 수 없는 호스트들을 설정함
      sshd: 12.34.56.77
      in.telnetd: ALL
  • 두 파일 /etc/hosts.allow와 /etc/hosts.deny가 모두 있는 경우는 다음과 같이 처리 됨.
    • 우선 hosts.allow 파일 검사.
    • 매칭이 발생하면 첫 번째 것을 따름.
    • 두 파일에서 모두 매칭이 일어나지 않으면 허용 됨.

네트워크 점검

ping

  • ICMP(Internet Control Message Protocol)의 에코(echo)를 이용하여
    원격 호스트와의 연결 여부와 네트워크 상태 정보를 점검함.
  • ping [option] destination
    • destination은 호스트명 또는 IP 주소
    • 보낸 패킷 수(packet transmitted), 받은 패킷 수(received),
      유실된 패킷 수(packet loss), 응답 속도 등을 알 수 있음.
  • OPTION
    • -c count : 에코를 보내는 횟수 지정.
    • -i interval : 패킷을 보내는 간격(초)를 지정. 기본값은 1
    • -w deadline : ping 명령을 종료하는 시간(초)를 지정.

arp

  • 같은 네트워크에 있는 호스트들의 MAC 주소, IP 주소, 인터페이스 이름을 확인하는 명령
  • arp [hostname] || arp -a [hostname]
    • 인수 없는 arp 는 현재 같은 네트워크에 연결 되어 있는 시스템의 MAC 주소와 IP 주소를 출력
      • ARP 캐시 정보를 보여주는 것으로 /proc/net/arp 파일의 내용을 보여줌.

traceroute

  • 현재 호스트에서 특정 호스트까지 통신이 이루어지는 경로를 확인함.
    • IP 패킷에서 hop을 지날 때마다 ttl(time to live) 값이 줄어드는 성질을 이용.
    • 대상 호스트까지의 통신 가능 여부, hop 수, 지연 구간 등을 확인할 수 있음.
  • traceroute [option] hostname
OPTIONS DESC
-I ICMP의 에코를 이용하여 경로를 확인한다.
-T TCP의 SYN을 이용하여 경로를 확인한다.
-m max_ttl hop 수가 max_ttl을 넘지 않을 때까지만 경로를 확인한다. 기본값 30.
-q nqueries 각 hop에서 nqueries 번씩 패킷을 보냄. 기본값 3.

route

  • IP 라우팅 테이블을 설정하거나 확인하는 명령.

  • 단순한 route 명령은 라우팅 테이블의 내용을 출력함.

    • netstat -r 과 같음.
  • 라우팅 테이블을 편집할 수 있음.

    • 지정된 호스트를 라우팅 테이블에 추가하거나 삭제함.
    • route add [-net|-host] target [netmask, ...] [gw ..] ...
    • route del [-net|-host] target [netmask, ...] [gw ..] ...
    • target은 호스트명 또는 IP 주소
  • route 실행 예

      [ec2-user@ip-AWS ~]$ route
      Kernel IP routing table
    
      Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
      default         ip-172-xx-xx-1. 0.0.0.0         UG    0      0        0 eth0
      instance-data.a 0.0.0.0         255.255.255.255 UH    0      0        0 eth0
      172.xx.xx.0     0.0.0.0         255.255.240.0   U     0      0        0 eth0
    
  • 항목의 의미

    • Destination : 목적지 네트워크
    • Gateway: 목적지에 도달하는 데 사용되는 게이트웨이
    • Genmask : Netmask를 의미
    • Flags : 경로의 특징
    • Metric : 목적지까지의 거리
    • Ref : 접속을 이루려고 참조된 경로 횟수
    • Use : 이 경로를 통해 전송된 패킷 수
    • Iface : 사용되는 네트워크 인터페이스 이름

netstat

  • 네트워크 상태에 관한 정보를 출력하는 명령
    • 네트워크 인터페이스 정보, 네트워크 연결 상태, 시스템 라우팅 테이블, 프로토콜멸 네트워크 통계, 멀티 캐스팅 등을 확인할 수 있음.
  • netstat [options]
OPTIONS DESC
-i 인터페이스의 정보 출력
-a 모든 소켓을 출력
-l liseten 하는 소켓을 출력
-p 소켓의 프로그램명과 PID 를 출력
-r 라우팅 테이블을 출력
-t 활성화된 TCP 소켓을 출력
-u 활성화 된 UDP 소켓을 출력

nslookup

  • DNS 서버를 이용하여 호스트이 IP 주소를 확인함.
  • nslookup [hostname]
    • hostname에 대한 IP주소를 보여 줌.
    • hostname을 생략하면 대화식으로 사용 가능.(exit으로 종료)
  • host 또는 dig 명령과 유사함.
➜ nslookup www.knou.ac.kr
Server:         xxx.xxx.xxx.xxx
Address:        xxx.xxx.xxx.xxx#53

Non-authoritative answer:
Name:   www.knou.ac.kr
Address: 203.232.172.70
728x90
반응형

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

[Linux] 웹 서버  (0) 2020.12.13
[Linux] 원격 관리  (0) 2020.12.13
[Linux] 쉘 스크립트 -2  (0) 2020.11.08
[Linux] 소프트웨어 관리  (0) 2020.11.01
[Linux] 프로세스 관리  (0) 2020.11.01

쉘 스크립트 - 2

  • 학습 개요
    쉘 스크립트에서 선택과 반복을 위한 제어 구조를 사용해보자.
    선택 구조인 if / case, 반복 주조인 for / while / until 명령의 문법과 의미를 알아 보자.
    조건 검사가 필요할 때 사용되는 명령과 수식의 작성법을 알아 보자.

  • 학습 목표

    1. 선택 구조를 사용하여 쉘 스크립트를 작성하자.
    2. 반복 구조를 사용하여 쉘 스크립트를 작성하자.
    3. 수식을 포함하는 쉘 명령을 선택과 반복 구조에서 사용하자.

선택 구조

제어 구조

  • 쉘 스크립트에서 실행을 제어하기 위해 선택과 반복 구조를 사용함.
  • if, for, case, while, until

if

  • 프로그래밍 언어에서 if 문의 기능

if command ...; then
  command ...
[ elif command; then
  command ... ]...
[ else
  command ... ]
fi
  • ;은 같은 라인에서 다른 단어(then elif else fi)와 구분이 필요할 때 사용함.
  • if다음의 명령을 실행하여 참이면 then 다음의 명령을 실행함. (if 명령은 종료됨)
    • if나 elif 다음에 조건 검사를 위한 test 명령을 사용할 수 있음.
    • if나 elif 다음에 나오는 마지막 명령의 종료 상탯값으로 참과 거짓을 구분함.
    • 종료 상탯값 0은 성공적 종료를 의미하며 참으로 간주.
  • 거짓이면 elif 다음의 명령을 실행하여 참 / 거짓을 판단하고 실행함.
  • 만족 되는 것이 없으면 else 다음의 명령을 실행함.
  [ec2-user@ip-AWS ~]$ cd /usr/bin
  [ec2-user@ip-AWS bin]$ echo $?
  0
  [ec2-user@ip-AWS bin]$ cd /bin/usr
  -bash: cd: /bin/usr: No such file or directory
  [ec2-user@ip-AWS bin]$ echo $?
  1
  [ec2-user@ip-AWS bin]$ if true; then
  > echo "SUCCESS"
  > else
  > echo "FAILURE"
  > fi
  SUCCESS
  [ec2-user@ip-AWS bin]$ if true; false; then
  > echo "TRUE"
  > fi

test

  • 조건 검사를 위해 사용하는 명령
  • 조건이 만족되면 종료 상탯값으로 0(true), 1(false)를 리턴함
  • test expression || [ expression ]
    • expression은 파일의 상태 검사, 문자열의 비교, 정수 비교를 위한 수식
    • **대괄호와 expression 사이에 공백이 있어야 함.
[ec2-user@ip-AWS ~]$ cat intCompare.sh
#! /bin/bash
if [ $# !=2 ]; then
        echo "you must supply two numbers as arguments"
        exit 1
fi

if [ $1 -eq $2 ]; then
        echo "$1 equals to $2"
elif [ $1 -gt $2 ]; then
        echo "$1 is greater than $2."
else
        echo "$1 is less than $2."
fi

echo "$1 + $2는 $[$1+$2]임."

[ec2-user@ip-AWS ~]$ chmod u+x intCompare.sh

[ec2-user@ip-AWS ~]$ ./intCompare.sh 36 68
./intCompare.sh: line 2: [: 2: unary operator expected
36 is less than 68.
36 + 68는 104임.

case

  • 다중 선택을 지원하는 복합 명령
    • switch 문과 비슷
case word in
  [ pattern [ | pattern ]... ) command...;; ]...
esac
  • word 부분을 먼저 확장하고 pattern과 매칭되는지 검사함
  • 매칭이 이루어지면 상응하는 명령이 수행됨
  • 일단 매칭이 이루어지면 이후의 매칭 시도는 없음
  • pattern에서 *은 프로그래밍에서 'default 키워드'를 사용함.

case에서 패턴 사용 예

pattern ) desc (word가 다음과 같은 경우 패턴 매칭이 일어남)
a) a인 경우
[[:alpha:]]) 1개의 알파벳 문자인 경우
???) 임의의 세 글자인 경우
*.txt .txt로 끝나는 경우
[aeiou]) 모음에 해당하는 영문 소문자 1개인 경우
[ABE][0-9] 앞 글자가 A, B, E중 하나이고 다음 글자가 숫자인 두 글자인 경우
*) 임의 길이의 글자와 매칭됨. case 명령에서 마지막 패턴으로 사용하는 것이 좋음

case 실행의 예

[ec2-user@ip-AWS ~]$ cat caseTest.sh
#!/bin/bash

echo "
plz select :
a. Display System Information
b. Show Information about File Systems
c. Summarlize Disk Usage Information
q. Quit
"

read -p "Enter selection [a, b, c or q] > "

case $REPLY in
  a|A)
      echo "Hostname : $HOSTNAME"
      uptime
      ;;
  b|B)
      df -h
      ;;
  c|C)
      if [$( id -u) -eq 0 ]; then
        echo "All user's home disk space utillization"
        du -sh /home/*
      else
        echo "($USER)' home disk space utilization"
        du -sh $HOME
      fi
      ;;
  q|Q)
      echo "Program terminated."
      exit
      ;;
  *)
      echo "Invalid entry" > $2
      exit 1
      ;;
esac

[ec2-user@ip-AWS ~]$ ./caseTest.sh
plz select :
a. Display System Information
b. Show Information about File Systems
c. Summarlize Disk Usage Information
q. Quit

Enter selection [a, b, c or q] > a
Hostname : ip-AWS.ap-northeast-2.compute.internal
07:45:43 up 34 days, 0 min,  1 user,  load average: 0.00, 0.00, 0.00


[ec2-user@ip-AWS ~]$ ./caseTest.sh
plz select :
a. Display System Information
b. Show Information about File Systems
c. Summarlize Disk Usage Information
q. Quit

Enter selection [a, b, c or q] > b
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        474M     0  474M   0% /dev
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           492M  408K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.9G  6.2G  24% /
tmpfs            99M     0   99M   0% /run/user/1000

[ec2-user@ip-AWS ~]$ ./caseTest.sh
plz select :
a. Display System Information
b. Show Information about File Systems
c. Summarlize Disk Usage Information
q. Quit

Enter selection [a, b, c or q] > c
./caseTest.sh: line 19: [1000: command not found
(ec2-user) home disk space utilization
92K     /home/ec2-user

[ec2-user@ip-AWS ~]$ ./caseTest.sh
plz select :
a. Display System Information
b. Show Information about File Systems
c. Summarlize Disk Usage Information
q. Quit

Enter selection [a, b, c or q] > d
./caseTest.sh: line 30: $2: ambiguous redirect

[ec2-user@ip-AWS ~]$ ./caseTest.sh
plz select :
a. Display System Information
b. Show Information about File Systems
c. Summarlize Disk Usage Information
q. Quit

Enter selection [a, b, c or q] > g
./caseTest.sh: line 30: $2: ambiguous redirect

[ec2-user@ip-AWS ~]$ ./caseTest.sh
plz select :
a. Display System Information
b. Show Information about File Systems
c. Summarlize Disk Usage Information
q. Quit

Enter selection [a, b, c or q] > q
Program terminated.

반복 구조

for

  • 모든 데이터를 한 차례씩 처리하는 제어구조
  •   for variable [ in word ... ]; do
        command ...
      done
  • word ... 부분 (값의 목록)을 먼저 확장함
  • word 목록에 존재하는 값을 순차적으로 변수 variable에 대입하고 do와 done 사이의 명령을 수행함.
  • word 부분이 없다면 in "$@"가 있는 것으로 가정함.
  [ec2-user@ip-AWS ~]$ echo {A..D}
  A B C D
  [ec2-user@ip-AWS ~]$ for i in {A..D}; do echo $i; done
  A
  B
  C
  D
  [ec2-user@ip-AWS ~]$ cat testFor.sh
  #! /bin/bash
  for FILE
  do
    echo $FILE
  done

  [ec2-user@ip-AWS ~]$ chmod u+x testFor.sh

  [ec2-user@ip-AWS ~]$ ./testFor.sh `ls`
  arg.sh
  caseTest.sh
  first.sh
  intCompare.sh
  list.bak
  testFor.sh
  whoson.sh
  • C나 Java에서 사용하는 형태

  •   for (( exp1; exp2; exp3 )); do
        command...
      done
  • exp1~3은 수식으로 각각 생략 가능

  • exp1은 제어 변수의 초기화를 위해 한 번 수행 됨

  • exp2가 참인 동안 명령과 exp3이 반복 수행 됨

  • [ec2-user@ip-AWS ~]$ cat testFor3.sh
      #! /bin/bash
      LIMIT=10
    
      for(( a=0; a<LIMIT; a++)); do
        echo "$a"
      done
      [ec2-user@ip-AWS ~]$ . testFor3.sh
      0
      1
      2
      3
      4
      5
      6
      7
      8
      9
      [ec2-user@ip-AWS ~]$

while

  • 조건이 참인 동안 명령을 반복함.
  •   while command...; do
        command
      done
  • while 다음에 나오는 명령을 실행하여 참 또는 거짓을 판단함
  • if 명령과 마찬가지로 종료 상탯값이 0이면 참으로 판단
  • 조건 비교를 위해 test expression 또는 [ expression ]을 자주 사용함.
  [ec2-user@ip-AWS ~]$ cat testWhile.sh
  #! /bin/bash
  N=1
  S=0

  while [ $N -le 10 ]; do
    echo -n "$N "
    S=$[ $S+$N ]
    N=$[ $N+1 ]
  done
  echo
  echo $S
  [ec2-user@ip-AWS ~]$ . testWhile.sh
  1 2 3 4 5 6 7 8 9 10
  55

for 와 while

  • for 명령 (2)를 다음과 같이 변환 가능
  •   (( exp1 ))
      while (( exp2 )); do
        command...
        (( exp3 ))
      done
  • (( expression ))은 수식 계산에 사용되는 복합 명령
  • let "expression"과 동일하며 test 명령 대신에 사용 가능
    • 조건 비교를 위해 test expression 또는 [ expression ]과 함께 자주 사용함.
  • while 다음의 (( expression ))에서 수식 결과가 0이 아닌 경우 종료 상탯값이 0이 되며 참으로 판단.
  [ec2-user@ip-AWS ~]$ cat testWhile2.sh
  #! /bin/bash
  LIMIT=10

  ((a=0))
  while (( a<LIMIT )); do
    echo "$a"
    (( a++ ))
  done
  [ec2-user@ip-AWS ~]$ . testWhile2.sh
  0
  1
  2
  3
  4
  5
  6
  7
  8
  9

until

  • 조건이 만족될 때까지(거짓인 동안) 명령을 반복하여 수행함
  •   until command ... ; do
        command ...
      done
  • until 다음에 나오는 명령이 참이 될 때까지 반복함
    • 거짓인 동안 반복하게 됨
  • 조건을 표시하기 위해 test expression, [ expression ], (( expression ))을 사용할 수 있음.
  [ec2-user@ip-AWS ~]$ cat testUntil.sh
  #! /bin/bash
  N=1
  S=0
  until [ $N -gt 10 ]; do
    echo -n "$N "
    let S=$S+$N
    let N=$N+1
  done
  echo
  echo $S
  [ec2-user@ip-AWS ~]$ . testUntil.sh
  1 2 3 4 5 6 7 8 9 10
  55
728x90
반응형

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

[Linux] 원격 관리  (0) 2020.12.13
[Linnux] 네트워크 설정 및 점검  (0) 2020.12.05
[Linux] 소프트웨어 관리  (0) 2020.11.01
[Linux] 프로세스 관리  (0) 2020.11.01
[Linux] 파일 시스템 관리  (0) 2020.10.25

+ Recent posts