본문 바로가기
IT/OS

[리눅스] find 명령어 사용법 및 옵션

by 청바지 입고 개발자 2023. 4. 18.
반응형


리눅스에서 사용하는 명령어 중 find명령어는 가장 많이 사용되는 명령어 중 하나입니다. 
 

리눅스 find명령어 사용법 및 옵션

사실 저도 사용할 때마다 구글에서 검색해서 사용법을 찾고 있습니다 . 아키텍처 맞아? 

 
오늘은 find명령어로 가장 많이 쓰이는 옵션 및 사용법에 대해서 알아봅니다 .

 

find명령어는 ?

리눅스의 find 명령어는 파일 시스템   파일을 검색하는데 사용됩니다. 윈도우 탐색기의 돋보기의 디테일한 버전인 거죠
find 명령어는 다양한 옵션이 있지만, 가장 많이 사용하는 옵션은 -name과 -type입니다.'

가장 많이 사용하는 find 명령어

-name: 파일 또는 디렉토리 이름을 기반으로 검색합니다.

-type: 디렉토리의 타입 또는 파일을 기반으로 검색합니다. 
예를들면 -type f는 일반 파일을 검색하고, -type d는 디렉토리를 검색합니다.

 
-mtime: 파일 또는 디렉토리의 수정 시간을 기반으로 검색합니다. 실무에서는 보통 철지난 log파일들을 지울 때 이 옵셥을   사용하여 삭제 대상을 찾습니다. -mtime +n은 n일보다 오래된 파일을 검색하고, -mtime -n은 n일 이내에 수정된 파일을 검색합니다. 
 
-size: 파일의 크기를 기반으로 검색합니다. 실무에서는 파일 디스크 용량이 다 찬다고 할 때 우선 지워야할 대상을 찾을 때 사용합니다.
 -size +n은 n보다 큰 파일을 검색할 때 사용하고, -size -n은 n보다 작은 파일을 검색합니다.
 
-maxdepth / -mindepth: 검색을 시작할 디렉토리의 최대/최소 깊이를 제어합니다. 디렉토리 depth가 너무 길어서 검색에 시간이 오래 걸리거나 할 때 사용할 수 있는 옵션입니다.
예를들면  -maxdepth 1은 현재 디렉토리에서만 검색하고, -mindepth 2는 최소 2단계 깊이의 디렉토리에서부터 검색을 시작합니다.

 
-exec: 검색된 파일 또는 디렉토리에 대해 실행할 명령어를 지정합니다.
 

리눅스 find명령어 실행이 오래 걸리면 성능에 영향이 있을까? 

find 명령어가 실행이 오래 걸리는 경우, 서버의 성능에 영향을 줄 수 있습니다. 
find 명령어는 파일 시스템의 디렉토리 구조를 탐색하고 파일을 찾는 작업을 수행하기 때문에,
 디렉토리 구조가 복잡하고 파일이 많은 경우에는 성능지연 현상이 발생할 수 있습니다.
 이로 인해 CPU, 메모리, 디스크 I/O 등의 시스템 리소스를 많이 사용하게 되며 결국 서버의 성능에 영향을 줄 수 있습니다.
서버에서 실행되는 프로세스나 서비스들의 연쇄적인 지연은 너무도 무서우니까요


특히 대규모 파일 시스템이나 디렉토리 구조에서 find 명령어를 사용할 때는 주의가 필요합니다. 너무 많은 디렉토리와 파일을 대상으로 find 명령어를 실행하면 시스템의 성능에 부하를 주고, 서버 응답 속도를 저하시킬 수 있습니다.

그래서 find 명령어를 사용할 때는 디렉토리와 파일의 개수, 디렉토리 구조의 복잡성, 시스템 리소스의 여유 등을 고려하여 적절한 옵션을 사용하여 사용하는 것이 필요합니다. 
 

리눅스 find명령어의 예제

find 조건: find명령어를 사용하요 temp 디렉토리 하위에서 수정된지 30일이 지난 명령어를 찾는다고 가정하겠습니다 .

$ find temp/ -type f -mtime +30

 
이번에는 조금 더 난이도 있는 검색을 해보겠습니다. 
find 조건 
temp 디렉토리 하위의 depth 2레벨에서 파일개수가 3000개 이상인 디렉토리를 찾는 샘플을 만들어줘

$ find temp/ -maxdepth 2 -type d -exec sh -c 'find "{}" -maxdepth 1 -type f | wc -l | grep -qE "^3\d{3,}$"' \; -print

 
조금 복잡해보이지만 천천히 설명드리면 
 
1) temp/ 디렉토리 하위에서 (-maxdepth 2 옵션으로 깊이가 2인 디렉토리까지 검색) 디렉토리들을 찾고, -type d 옵션으로 디렉토리만 검색합니다. 
2) 그리고 -exec 옵션으로 찾은 디렉토리들을 실행시키는데, 내부에서 find 명령어를 다시 사용하여 해당 디렉토리에 있는 파일의 개수를 세고 (find "{}" -maxdepth 1 -type f | wc -l)
3) 파일 개수가 3000개 이상인 디렉토리들을 필터링하여 (grep -qE "^3\d{3,}$") 결과를 출력합니다.
 
좀 더 간단한 명령어가 없을까 하고 다른 find 사용법을 확인해 봅니다.

$ find temp/ -maxdepth 2 -type d -links +3000

위의 명령어는 temp/ 디렉토리 하위에서 (-maxdepth 2 옵션으로 깊이가 2인 디렉토리까지 검색) 디렉토리들을 찾고, -type d 옵션으로 디렉토리만 검색합니다. 
그리고 -links 옵션으로 디렉토리에 있는 하드 링크의 개수를 검사하여, 파일 개수가 3000개 이상인 디렉토리들을 필터링합니다. 
 
오늘은 리눅스의 find명령어의 사용법 및 자주 사용되는 옵션에 대해서 확인해 보았습니다 .
 

[리눅스] ls명령어 사용법 및 옵션 정리

리눅스에서 ls 명령어는 파일과 디렉토리를 나열하고 조회할 때 사용됩니다. 윈도우os의 dir명령과 같다고 보시면 됩니다. ls명령어는 다양한 옵션들을 제공하는데 ls명령어가 제공하는 옵션들과

dreamdeveloper403.tistory.com

 
 
 

반응형

댓글