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 |