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