본문 바로가기

Programming Practice/Shell & Server Management

파일 관리

1. 파일 찾기

1) 디렉토리명에 특정 문구를 포함한 디렉토리를 제외하고 파일 찾기

find 특정위치 -type d -name 특정문구 -prune -o -name 찾을파일명 -print

find 특정위치 -type d | grep -v *특정문구*" | awk '{"find " $1 "-type f "}' | sh

** 특정문구가 여러개인 경우

find 특정위치 -type d | egrep -v '(특정문구1| 특정문구2 | 특정문구3)' | awk '{find " $1 "-type f"}' | sh


* find 의 time 옵션

종류 

설명

atime

access time - 파일에 접근했던 시각

ctime

change time - 파일이 change (ownership - chown, access permision - chmod)된 시각

mtime

modify time - 파일의 contents 가 modified 된 시각

* 파일이 생성된 시각과 가장 유사

파일이 생성된지 특정 일이 지난 파일을 찾을 때는, 파일이 생성된 시각과 가장 유사한 mtime을 사용한다. 

mtime 사용 

의미 

mtime -3 

명령어를 날리는 당일을 포함해서 3일전까지(3일전 포함) 

mtime + 3

명령어를 날리는 당일의 3일 전의 이전날들(3일전 포함X) 


2. 파일 삭제

1) 파일명에 특정 문구를 포함한 파일 삭제

find 위치 -type f -name "*특정문구*" -exec rm -Rf {} \; 2>/dev/null

2) 파일명에 특정 문구를 포함한 파일을 제외하고 삭제

find 위치 -type f | grep -v *특정문구*" | awk '{print "rm -Rf " $1}' | sh 

3) 특정 위치에서 디렉토리명에 특정문구를 포함한 디렉토리 내의 파일 삭제

find 특정위치 -type d -name "특정문구" | awk '{"find " $1 "-type f -exec rm -Rf {} \\; "}' | sh


※ backup 된 파일들이 날짜별로 만들어진 폴더에 옮겨져 있고, 생성된지 특정일이 지난 파일들을 시스템 부하를 가장 적게 주면서 삭제하는 방법 (ex. /data001/BAK/시스템명/RCV/yyyyMMdd)

- 파일 삭제는 건별로 삭제하므로 성능 향상X, find를 최소화해야 함

1) 디렉토리만 찾고, rm 의 옵션에서 -R (Recursive) 을 줘서, 디렉토리와 디렉토리 아래 파일 전체 삭제

2) 최상위 디렉토리만 찾고, 하위 디렉토리는 찾지 않음 (find 의 -prune 옵션)

find 특정위치 -type d -mtime + 특정일 -prune -exec rm -Rf {} \;


3. 파일 압축 후 보관

- 일반적으로 서버에 백업된 파일들은 서버 내 파일 관리 솔루션에 의해 tape 에 백업된다. (특정 위치의 특정 일자가 지난 파일을 특정 시점에 tape로 백업)

- 그러나 tape 백업을 하지 않아서 파일을 서버에서 장기간 보관해야 하는 경우, 저장 공간 절약을 위해 해당 파일들을 gzip으로 압축 후 저장한다. (Windows 와 달리 gzip으로 압축할 경우, 원본 파일은 삭제된다.)

- 주로 nmon 데이터 같은 모니터링 결과 파일등을 압축해서 보관하며, 모니터링 결과 파일은 텍스트 파일이기 때문에 압축률이 높다. 

예시 shell)

for I in `find /home/nmon -mtime + 10 -name "*.nmon"`

do

   /bin/echo "$(date +"%b %e %T")_$(uname -n)_$(date +%Y%m%d) %I has been compressed" >> 위치/로그파일명.log

   /bin/gzip -f $I

done