# vi /etc/shadow

username : 사용자 이름
passwd : 암호화된 문자 패스워드
last : 패스워드 최종변경날짜
may : 현재의 패스워드가 변경되어야 하는 최소 날짜수
must : 현재의 패스워드가 변경되어야 하는 최대 날짜수
warn : 패스워드 만려될것임을 알려주는 시기
expire : 패스워드가 만료되고 계정을 사용할수 없게 되는 시기
disable : 계정이 만료된 후의 날짜수

root:$1$xc7t0dtk$bKRWW2YW5STMh6s2aDkJO0:13102:0:99999:7:::

'Tip' 카테고리의 다른 글

압축관련  (0) 2016.12.31
cron  (0) 2016.12.31
사용 불가능한 쉘 지정하기  (0) 2016.12.31
AWK 사용법  (0) 2016.12.30
리눅스 서치 커맨트 find, grep, egrep 예제  (0) 2016.12.29

이렇게 하면 멍텅구리 쉘이 된다.


[root@s92 download]# vi /bin/no.sh

#!bin/sh

echo "Please ask webmaster"


[root@s92 download]# chmod 755 /bin/no.sh

[root@s92 download]# vi /etc/shells

/bin/no.sh # add this.

[root@s92 download]# usermod -s /bin/no.sh leopit

'Tip' 카테고리의 다른 글

압축관련  (0) 2016.12.31
cron  (0) 2016.12.31
/etc/shadow 필드 설명  (0) 2016.12.31
AWK 사용법  (0) 2016.12.30
리눅스 서치 커맨트 find, grep, egrep 예제  (0) 2016.12.29
1. awk의 기본 개념
    1) awk란?
    ; awk란 이름은 이 유틸리티를 작성한 A.V.Aho, P.J. Weinberger, B. Kernigham의 머리글자를 따온 것 
    ① awk는 일종의 프로그래밍 언어지만 일반적인 언어라기 보다는 주로 패턴의 검색과 조작을 주목적으로 만들어진 것이다.
    ② 파일의 각 라인에서 필드(field)를 인식할 수 있는 패턴 매칭 기능을 가지고 이들 필드를 자유자재로 조작 가능한 유틸리티를 작성하고자 만든 것이다.

    2) awk의 응용분야
    데이터 프로세싱, 리포트 작성, 간단한 데이터베이스 구축, 등

    3) awk를 이용한 작업
    ① 프로그래머가 자신이 작성한 프로그램의 입력 화일이 특정한 형식에 들어 맞게 이루어져 있는지 검사.
    ② 출력화일을 처리하여 리포트를 만들어 냄.
    ③ 다른 프로그램의 입력 형식에 맞게 변환하는 작업에 이용.

2. awk 프로그램의 구조 및 실행
    (1) awk 프로그램의 구조
      1) awk ' pattern {action}
        pattern {action}
        ' filenames <-----------------입력화일(예제 : students)

      2) awk -f parttern-action-file filenames <----- 입력화일
        awk실행 action을 가진 프로그램 file

    (2) awk의 pattern

    패 턴내 용
    BEGIN입력화일을 읽어들이기 전에 옆에 제시되는 문자을 실행시키도록 한다.
    ENDawk가 모든 입력을 처리한 후, 옆에 제시되는 문장을 실행시키도록 한다.
    expression식을 평가한 후 이 식이 참, 즉 non-zero이거나 non-null인 경우 문장을 실행한다.
    /re/정규식과 일치하는 문자열을 포함하고 있는 라인에서 문장을 실행한다.
    compound-pattern복합패턴이라는 것으로 &&(and), ||(or) , !(not) 그리고 괄호에 의해 연결시킨 것이다. expression의 경우와 마찬가지로 복합 패턴도 참인 경우의 문장을 실행시킨다.
    pattern1, pattern2이러한 패턴을 범위 패턴이라한다. 현재 처리되고 있는 라인이 pattern1과 일치되고, 다음에 따라오 는 라인 중 임의의 라인이 pattern2와 일치할 때, 범위 패턴은 두 라인 사이의 각 라인과 일치한다.


    (3) awk의 연산자 
    연 산 자내용
    = += -= *= /= %=배정(assignment)연산자
    + - * / % ++ --산술 연산자
    || && !논리 연산자(|| = OR, && = AND, ! = NOT)
    > >= < <= == !=비교 연산자
    v ~p변수 V가 패턴 P에 부합되면 참
    v !~p변수 V가 패턴 P에 부합되지 않으면 참

    (4) 액션(Actions)
    액션은 문장(statements)으로 이루어져 있다. 액션은 간단하게 상수 하나로 이루어질 수도 있고, 개행 문자나 세미콜론(;)에 의해 분리된 몇 개의 문장의 연속으로 구성될 수도 있다.

      ① expressions
      ② print expression-list
      ③ printf(format, expression-list)
      ④ if (expression) statement
      ⑤ if (expression) statement else statement
      ⑥ while (expression) statement
      ⑦ for (expression; expression; expression) statement
      ⑧ for (variable in array) statement
      ⑨ do statement while (expression)
      ⑩ break
      ⑪ continue
      ⑫ next
      ⑬ exit
      ⑭ exit expression
      ⑮ {statement}

    (5) awk에서 미리 정의된 몇가지 변수들
    변 수내 용
    FILENAME현재 처리되고 있는 입력 파일의 이름
    FS입력 필드 분리문자
    NR현재 레코드(행)의 번호
    NF현재 레코드(행)의 필드의 갯수
    OFS출력되는 필드의 분리문자


3. awk의 기본예제

    (1) 예제 입력 파일 소개
      ① 입력화일의 이름은 students
      ② 이 파일의 각 라인은 3개의 필드로 구성(학생 성명, 학과명, 나이)
      ③ 각 필드는 공백에 의해서 분리(공백을 필드 분리자로 간주함.)
      < awk는 각 라인에서 필드를 추출해 내는 데 필드 분리자(field separator)를 사용, 필드 분리자는 보통 하나 이상의 공백 문자이다.>

    1) 입력화일 예제 students
      % cat students
      John,P Physics 20
      Rick,L Mechanical 21
      Jack,T electrical 23
      Larry,M Chemical 22
      Phil,R Electrical 21
      Mike,T mechanical 22
      Paul,R Chemical 23
      John,T Chemical 23
      Tony,N Chemical 22
      James,R Electrical 21

    예 1) 식(expression)에 맞는 field 프린트하기
      % awk '$3 > 22 {print $1}' students
      Jack,T
      Paul,R
      John,T

    예 2) if 문을 사용하여 조건에 맞는 line 분리하기(각 파일에 저장)
      step 1 : if문을 사용하는 프로그램을 awkprog1이라는 파일로 만든다.

        % cat awkprog1
        { if ($1 ~ /^J/) printf "%s\n", $0 > "Jfile"
        if ($1 ~ /^P/) printf "%s\n", $0 > "Pfile"}

      step 2 : students 입력화일에 awkpog1 프로그램 화일을 적용한다.

        % awk -f awkprog1 students

      step 3 : 결과 보기
        % cat Jfile
        John,P Physics 20
        Jack,T electrical 23
        John,T Chemical 23
        James,R Electrical 21

        % cat Pfile
        Phil,R Electrical 21
        Paul,R Chemical 23


    예 3) 평균값 구하기

      <프로그램 awkprog2, awkprog3>

      % cat awkprog2
      {sum += $3}
      END {printf "The average of the ages is %.2f\n", sum/NR}

      % cat awkprog3
      {sum += $3 
      ++no}
      END {printf "The average of the ages is %.2f\n", sum/no}

      <결 과>
      % awk -f awkprog3 students
      The average of the ages is 21.80

    예 4) while 과 do문을 이용하여 평균값 구하기
      <프로그램 awkprog4>
      % cat awkprog4
      {if (NF > 0) {
      sum = 0
      n = 1
      while (n <= NF) {
      sum = sum + $n
      n = n+1
      }
      printf "Average is %d\n", sum/NF
      }
      else
      print}

      <예 제>
      % awk -f awkprog4 test
      Average is 17
      Average is 3
      Average is 25
      Average is 0
출처// unix.co.kr

상기 예제를 활용하여 응용해봤다.


bro 로그 검색 (SRC IP가 172.2로 시작하고 DST IP가 10.으로 시작하지 않고 blabla~

# cat conn.log | awk '(($5 ~ /^172.2/)) && (($3 !~ /^10./) && ($3 !~ /^172./)) && ($16 ~ /^S/) && ($6 !~ /^1200/) && ($6 !~ /^60000/) && ($6 !~ /^65101/) && ($6 !~ /^65105/) && ($6 !~ /^65103/)’


uniq url별 카운트가 10 이상인 것들 추출하기

# cat http.log | sort | uniq -c | awk '{ if ($1 >= 10) {print $2$3"\t"$1}}’



'Tip' 카테고리의 다른 글

압축관련  (0) 2016.12.31
cron  (0) 2016.12.31
/etc/shadow 필드 설명  (0) 2016.12.31
사용 불가능한 쉘 지정하기  (0) 2016.12.31
리눅스 서치 커맨트 find, grep, egrep 예제  (0) 2016.12.29

find, grep, egrep

일반적인 검색 (find, grep, egrep)

grep -v "200.0.0.1" messages | grep -v "domain.com" > messages.temp
grep -i -l "찾는 문자열" * -r 2 > /dev/null - 대소문자 구분 X
find . -exec grep -i -l "찾는문자열" {} \; 2> /dev/null 한글, 영어, 대소문자 안가림

egrep '(pattern1|pattenr2)' file.txt

find / -name "foobar" -print (파일 이름에 foobar 찾기) 

find / -name 'et*' -type d (d:디렉토리)
find / -name 'et*' -type f (f:파일)
find / -iname 파일명 (대소문자구분X)
find / -user "사용자ID" -print - 특정사용자 소유의 파일


FIND 상세

1. 타입별 찾기 (directory, file, user)

find / -name 'et*' -type d (d:디렉토리)
find / -name 'et*' -type f (f:파일)
find / -iname 파일명 (대소문자구분X)
find / -user "사용자ID" -print - 특정사용자 소유의 파일


2. 수정된 날짜로 찾기
# find . -mtime +100 -type f
=> 수정한 날짜가 100일 이상된것 찾기
# find . -mtime -100 -type f
=> 수정한 날짜가 100일 안된것 찾기
# find . -mtime -100 -type f -exec rm -rf {} \;
=> 수정한 날짜가 100일 안된것 찾아서 지우기
# find . -mtime -100 -type f -exec cp -ar {} ./aaaa/ \;
=> 수정한 날짜가 100일 안된것 찾아서 지우기

find / -ctime -1 -a -type f | xargs ls -l | more

=> 최근 하루동안에 변경된 파일을 찾기

find / -mtime +30 -print | more

=> 오래된 파일(30일 이상 수정되지 않은 파일) 찾기

find / ! ( -atime -30 -a ( -type d -o -type f ) ) | xargs ls -l > not_access.txt

=> 최근 30일안에 접근하지 않은 파일과 디렉터리를 별도의 파일로 만들기

find . -prune ...

=> 하위 디렉터리로 내려가지 않고 현재 디렉터리에서만 검색하기


3. 엑세스한 날짜로 찾기
# find . -atime +100 -type f
=> 엑세스 날짜가 100일 이상된것 찾기
# find . -atime -100 -type f
=> 엑세스 날짜가 100일 안된것 찾기


4. 퍼미션 검색

 퍼미션이 777 인 파일 찾기- 퍼미션이 777 인 파일 찾기
find / -perm 777 -print | xargs ls -l | more

- others 에게 쓰기(write) 권한이 있는 파일을 찾기
find / -perm -2 -print | xargs ls -l | more

- others 에게 쓰기(write) 권한이 있는 파일을 찾아 쓰기 권한을 없애기
find / -perm -2 -print | xargs chmod o-w
또는
find / -perm -2 -exec chmod o-w {} ; -print | xargs ls -l | more

- 사용자이름과 그룹이름이 없는 파일 찾기
find / ( -nouser -o -nogroup ) -print | more

- 빈 파일(크기가 0 인 파일) 찾기
find / -empty -print | more
또는
find / -size 0 -print | more

- 파일 크기가 100M 이상인 파일을 찾기
find / -size +102400k -print | xargs ls -hl

- 디렉터리만 찾기?
find . -type d ...

- root 권한으로 실행되는 파일 찾기
find / ( -user root -a -perm +4000 ) -print | xargs ls -l | more

- 다른 파일시스템은 검색하지 않기
find / -xdev ...

- 파일 이름에 공백이 들어간 파일 찾기
find / -name "* *" -print

- 숨겨진(hidden) 파일을 찾기
find / -name ".*" -print | more

- *.bak 파일을 찾아 지우기
find / -name "*.bak" -exec rm -rf {} \;

- *.bak 파일을 찾아 특정 디렉터리로 옮기기
mv `find . -name "*.bak"` /home/bak/

- 여러개의 파일에서 특정 문자열을 바꾸기
find / -name "*.txt" -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \;


응용하기

1. xml 파일중에 nmap 문자열을 포함하는 것들 찾기

$ find ./ -maxdepth 1 -type f -name "*.xml" -exec grep -H nmap {} \; 

.//test.xml:<!DOCTYPE nmaprun> .//test.xml:<?xml-stylesheet href="file:///usr/local/bin/../share/nmap/nmap.xsl" type="text/xsl"?> .//test.xml:<!-- Nmap 7.12 scan initiated Wed Nov 30 14:08:30 2016 as: nmap -T4 -A -p 1-1000 -oX test.xml 192.168.252.52 --> .//test.xml:<nmaprun scanner="nmap" args="nmap -T4 -A -p 1-1000 -oX test.xml 192.168.252.52" start="1480482510" startstr="Wed Nov 30 14:08:30 2016" version="7.12" xmloutputversion="1.04"> .//test.xml:</nmaprun>


2. 최근 3일간 수정된 파일들중에 facebook 문자열이 포함것들 찾기 (쉘파일)
#!/bin/bash

for datadirectory in `find /usr/local/trafficserver/var/log/trafficserver/ -type f -mtime -3 -print`; do
    grep "facebook $datadirectory
done


'Tip' 카테고리의 다른 글

압축관련  (0) 2016.12.31
cron  (0) 2016.12.31
/etc/shadow 필드 설명  (0) 2016.12.31
사용 불가능한 쉘 지정하기  (0) 2016.12.31
AWK 사용법  (0) 2016.12.30

+ Recent posts