강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

find실무2편: 검색된 파일을 바로 삭제하는 find 사용법

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

find실무2: 검색된 파일을 바로 삭제하는 find 사용법

 

 

 

이번 예는 find의 검색결과 검색된 파일들을 자동삭제하는 예이다.

 

 

 

 find로 찾은 파일에 특정명령어를 수행할 수 있다고 앞서 말씀 드린 바가 있다.

 

 

 

  다음 예는 bible이라는 계정사용자의 홈디렉토리내에 존재하는 *.bak파일을 찾아서 모두 삭제한 예이다.

 

 

 

 이 예는 디스크공간부족시에 백업파일을 삭제하고자 할 때에 사용하는 방법이다.

 

 

 

 하지만 백업파일의 형태가 *.bak가 아닌 경우가 있으므로 실무에 적용하실 경우에는 지정하는 파일형식에 주의하기 바란다.

 

 

 

 


먼저 “find ~bible -name *.bak -exec ls –l {} \;” bible사용자의 홈디렉토리에 존재하는 *.bak파일을 찾아 보았다.

 

 

 

 결과 모두 2개의 파일이 존재함을 확인 하였다.

 

 

 

  확인한 다음 “find ~bible -name *.bak -exec rm -f {} \;”명령어로 bible사용자의 홈디렉토리내에 존재하는 *.bak파일을 모두 삭제하였다.

 

 

 

 

 

[root@sulinux ~]# find ~bible -name *.bak -exec ls -l {} \;

-rw-r--r-- 1 root root 0 2022-12-23 01:28 /home/bible/original.bak

-rw-r--r-- 1 root root 0 2022-12-23 01:28 /home/bible/gowent.bak

[root@sulinux ~]#

[root@sulinux ~]# find ~bible -name *.bak -exec rm -f {} \;

[root@sulinux ~]#

[root@sulinux ~]# find ~bible -name *.bak -exec ls -l {} \;

[root@sulinux ~]#



 

여기서 “-exec rm -f {}”에서 -exec는 찾아진 파일들을 모두 뒤에 나오는 명령어(rm -f {})로 실행한다는 의미이며 {}는 검색된 2개의 파일들이 하나씩 차례대로 치환됨을 의미한다.

 

 

 

 , 위의 “-exec rm -f {}”는 아래와 같이 2개의 명령어가 차례대로 실행된 것이다.

 

 

 

 

 

rm -f /home/bible/original.bak
rm -f /home/bible/gowent.bak

만약 찾아진 파일개수가 100개였다면 위의 명령어가 100번 실행되었을 것이다.

 

 

 

 

 

이번 예에서 중요한 것은 -exec는 찾은 파일들을 대상으로 뒤에 나오는 명령어를 실행하라는 의미이며 {}는 찾아진 파일들을 하나씩 대입됨을 의미한다.

 

 

 

 따라서 검색된 파일의 개수만큼 -exec뒤의 명령어가 실행된다.

 

 

 

 find명령어의 꽃이 -exec의 사용에 있으며 이것을 사용하지 못한다면 find로는 파일찾기기능 이외의 사용은 하지 못함을 의미한다.

 

 

 

 

 

, 정리를 해보자면 특정 파일을 find로 찾은 후에 이 파일들을 한꺼번에 삭제하는 find명령문의 형식은 다음과 같다.

 

 

 

 

 

사용형식 : find 삭제할 경로 -name 파일정규식 -exec rm -f {} \;

 

 

 

, 주의할 것은 삭제하려는 파일이 정말로 서버내부에서 불필요한 파일들인가를 반드시 확인하신 후에 사용해야 한다는 것이다.

 

 

 

  그리고 가능하다면 경로를 전체경로(/)를 주는 것은 삼가해야 한다.

 

 

 

 

 

 

이번에는 리눅스시스템내에 존재하는 불필요한 파일을 find로 검색하여 바로 삭제하는 예를 보도록 하자. 리눅스시스템 내부에서 불필요한 파일을 모두 한꺼번에 삭제하려면 어떻게 할까? 모두 하나씩 찾아서 삭제하려니 엄두가 나질 않고, 분명 초보관리자들에겐 간단한 일은 아닐 것이다.

 

 

 

 흔히 서버내부에서 불필요한 파일들은 어떤 것들이 있을까.

가장 흔한 파일로는 *.bak, 즉 백업파일이 있을 수 있다.

 

 

 

  그리고 *.old *.org 또는 *.orig등의 작업 전 복사본 등이 있을 수 있다.

 

 

 

 하지만, 서버장애의 원인을 발생할 수 있는 웹로그파일을 모두 찾아서 삭제하는 일도 무시할 수는 없는 일이다.

 

 

 

 

APACHE
웹서버에 설정된 가상호스트들이 모두 동일한 access_log파일을 가지는 경우도 있겠지만, 대부분의 가상호스트들은 자기자신의 홈페이지디렉토리에 별도로 저장되는 경우가 가장 일반적이다.

 

 

 

 

이런 경우에 모든 계정마다 access_log을 찾아서 삭제하려면 여간 귀찮고 힘든 일이 아닐 수 없다.

 

 

 

 이럴 때는 간단히 다음과 같이 해보자.

 

[root@sulinux ~]# find / -name access_log -exec rm -f {} \;

[root@sulinux ~]#

 

 

 

, 위의 명령어는 서버전체(/)를 대상으로 access_log파일을 찾아서(find) "rm -f 파일명"이란 명령어를 실행하라(-exec)는 의미이다.

 

 

 

 따라서 루트디렉토리(/)이하의 모든 디렉토리에 존재하는 모든 access_log파일들이 모두 삭제된다.

 

 

 



이렇게 아파치웹서버의 로그파일을 삭제하고 나면 아파치(Apache)가 정상 작동하지 않을까 염려하는 분들도 있을 것이다.

 

 

 

  Apache의 기본설정은 access_log파일이나 error_log파일이 존재하지 않을 경우에는 자동으로 파일을 생성하게 되므로 삭제한 후에도 아파치는 정상 작동되기 때문에 걱정하지 않아도 된다.

 

 

 

 하지만 로그파일을 저장하는 디렉토리는 반드시 존재해야 아파치가 정상 작동된다는 것은 알아두어야 한다.

 

 

 

 

 

이번에는 /home디렉토리에 존재하는 모든 error_log파일을 모두 찾아서 삭제하는 예이다.

 

 

 

 

 

[root@sulinux ~]# find /home -name error_log -exec rm -f {} \;

[root@sulinux ~]#

 

 

 

 

이와 같은 예를 몇 개 더 들어 보이면 다음과 같다.

 

 

 

 아래의 예는 /home에 존재하는 모든 *.bak파일을 모두 찾아서 삭제한다.

 

 

 

  하지만, 이런 명령어를 사용할 때에는 본인이 관리하는 서버내부에 *.bak파일이 진짜로 필요하지 않은가를 확인한 후에 사용해야 한다.

 

 

 

 

 

[root@sulinux ~]# find /home -name *.bak -exec rm -f {} \;

[root@sulinux ~]#

 

위의 예들을 참고하여 명령어의 형식을 간단히 정리하면 다음과 같다.

 

 

 

 


관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,041 명
  • 현재 강좌수 :  35,855 개
  • 현재 접속자 :  111 명