Linux

Linux 파일 검색(find)

5_jinseok12 2018. 2. 13. 15:35
728x90


 find - 파일 검색
 
 형식
 #find [경로] [옵션] [명령]

 

설정환경

 

#mkdir /practice/find_test
 #cd /practice/find_test
 
 #vi file_make.sh 
 #!/bin/bash
  for z in $(seq 0 7); do
   for i in $(seq 0 7); do
    for j in $(seq 0 7); do
    touch ${z}${i}${j}
    chmod ${z}${i}${j} ${z}${i}${j}
    done;
   done;
  done;

 

vi를 설정했다면

 

 #sh file_make.sh  를 입력해서 스크립트 실행
 #rm -f file_make.sh  를 입력해서 실행 완료 후 삭제
   

 

허가권이 777 ( rwx rwx rwx)로 설정된 파일을 검색한다.

r  : 읽기  w : 쓰기   x : 실행

 

/practice/find_test/777  :  -perm[허가권] 정확히 허가권과 일치하는 파일 검색

 

 

#find /practice/find_test -perm +770

위 사진과 같이 검색결과가 나온다.

하지만 검색 결과가 복잡하여, 데이터를 찾기 힘들것이다.

그렇기 때문에 정렬해줘야 한다

 

 

#find /practice/find_test -perm +770 | sort | more
                       +770  (rwx rwx --- == 111 111 000) 
 /practice/find_test/010   (--- --x --- == 000 001 000)
  /practice/find_test/011  (--- --x --x == 000 001 001)
  /practice/find_test/012  (--- --x -w- == 000 001 010)

 

-perm + [허가권]  :  하나의 비트(값)라도 일치하는 파일을 검색한다.

-perm - [허가권] :  지정한 허가권을 포함한 추가적인 비트(값)을 가진 파일을 검색한다.

 

하나의 비트라도 일치하는 파일을 검색하되 명령어를 통해 작은 값부터 차례대로 정렬해서 검색해준다,

 

/bin 디렉토리 아래에 위치한 SetUID가 설정된 파일을 검색한다.

 

 

#mkdir /practice/xargs_test  : 디렉토리 생성
 #cd /practice/xargs_test     : 디렉토리로 이동
 #vi xargs_test.sh               : vi 에서 명령어 추가
 
 #!/bin/bash
     for z in $(seq 0 5); do
     fallocate -l 10k "$RANDOM.txt" 
     done
 
     for z in $(seq 0 5); do
     fallocate -l 15k "$RANDOM.txt"
     done
 
     for z in $(seq 0 5); do
     fallocate -l 20k "$RANDOM.txt"
     done

 

 

vi 에서 입력을 저장하고 난 후

 #sh xargs_test.sh
 #rm xargs_test.sh  // 파일 생성 후 스크립트 삭제

 

 

파일 크기를 기준으로 검색

-size [크기][k,M,G]

 

#ll -h 명령어로 인해 파일의 크기를 알 수 있다.

 

#find /practice/xargs_test -size 10k
 정확히 10kb 크기를 가진 파일만 검색

 

파일의 크기가10kb인지 알아보기 위해 위에 출력된 파일의 이름중 아무거나 입력해본다.

#ll- h[파일이름].txt 를 통해 더욱 자세하게 검색할 수 있으므로 10kb인것을 확인가능하다

 

#find /practice/xargs_test -size +15k
15kb를 초과한 파일 검색

 

#find /practice/xargs_test -size -15k
15kb이하의 크기를 가진 파일 검색

 

둘의 차이를 잘 이해해야 한다

찾고자 하는 파일의 사이즈를 +, - 를 적절히 사용하여 편하게 찾을 수 있으므로 알아두면 좋다

 

위에 #find /practice/xargs_test -size +15k 가 15kb를 초과한 파일인지 확인해보자

#ll -h 는 파일의 크기를 나타내준다.

#ll -[파일명] 을 통해 파일 두개가 20k 즉 15kb를 초과한것을 알 수 있다.

 

위에 사진도 마찬가지로 15kb 이하인지 확인해본다.

 

 

#find [경로][옵션][명령]

명령종류
-delete   //검색결과를 삭제
-exec[명령어]\;
-exec[명령어]{}\;

 

TEST-A라는 디렉토리를 생성한 후 그 안에 file-1,file-2,file-3 의 파일을 생성한다.

#ls를 통해 제대로 생성되었는지 확인.

 

#find . -name"file*"  모든 file 명을 찾는다.

 

파일명 file*을 검색하고 모든 파일을 삭제한다

 

find는 파일을 검색하고 삭제할 목적으로 자주 사용되어 찾은 결과를 바로 삭제할 수 있도록 지원해준다.

예를 들어 몇년동안 사용되지 않은 오래된 파일을 검색하여 삭제하고 권한이 잘못 설정된 파일을

찾거나 하여 용량을 확보하는데 유용하다

기준에 맞게 한번에 삭제할 수 있다.

 

#find . -name "file*" -exec ls -l \;
: 파일 한개 실행할 때 마다 ls -l을 출력해라

즉 파일이 총 3개니까 ls -l을 총 3번 실행시킨 것이다.

file-1 -> ls -l
file-2 -> ls -l
file-3 -> ls -l

 

 

#find . -name "file*" -exec ls -l {} \;
: 중괄호 안으로 검색결과가 들어간다.

 

file-1 -> ls -l{file-1} -> #ls -l ./file-1
file-2 -> ls -l{file-2} -> #ls -l ./file-2
file-3 -> ls -l{file-3} -> #ls -l ./file-3

 

find 를 이용하여 파일의 이름이 0으로 시작해서 1로 끝나는 파일을 삭제한다.

 

 

응용 문제.

#cd /practice/xargs_test(10k , 15k, 20k)인 파일이 있을 때

1. find를 사용하지 않고 파일의 크기가 10kb인 파일명만 출력하고 정렬한 내용을

   /root/10kb_file_list1.txt.로 저장하는 명령어를 쓰시오

 

출력결과 ex)111.txt

이런식으로 정확히 파일명만 출력되도록 해야한다.

#ls -h 를 통해 전체 파일의 리스트와 크기를 알아본다

 

#ls -lh | grep "10K" 을 통해 grep 명령어로

10K 인것들만 찾아서 리스트형식으로 출력해준다.

 

공백을 기준으로 8번째 칸에 있는 파일만 출력한다.

이게 무슨 뜻이냐면 밑에 사진을 보면 이해할 수 있을 것이다.

 

보통 파일의 내용을 8가지로 나눌 수 있다.

그래서 8번째 칸인 파일명만 출력할 수 있게 되는것이다.

 

그렇게 해서 나온 값들을 sort 명령어를 통해 정렬시킨다.

 

마찬가지로 파일의 크기가 10kb 인것을 찾는다.

 

./를 기준으로 1과 2로 나누며 2번째 즉 파일명을 출력하라는 뜻이다.

 

sort 명령어를 통해 정렬.

 

basename 명령어 사용
경로가 포함된 파일의 경로가 입력되면 파일명만 출력해주는 명령어

 

 

xargs (eXtended Arguments)
- 표준 출력 값을 이용하여 다음 명령어의 인자로 전달하는 기능
- find와 사용시 검색결과(표준결과)를 다음 명령어의 인자로 전달
- exec [명령어] {} \; 비슷한 기능
- 여러 명령어와 함께 조합을 하면 강력한 기능을 갖는다.

 옵션
 -i 표준 출력을 인자로 전달하며 {} 함께사용
 -t 상세한 정보 출력(실행 과정 출력)

 

삭제할때도 위에 했던것들처럼 하면 된다.

 

 

 

 

반응형

'Linux' 카테고리의 다른 글

Linux) 부팅 프로세스  (0) 2018.02.19
Linux) RPM  (0) 2018.02.19
Linux 파일시스템 RIAD-1, RAID-5 , 볼륨  (0) 2018.02.09
Linux 파일 시스템(3) RAID  (0) 2018.02.08
Linux 파일 시스템(2) mount  (0) 2018.02.08