Bae's Digital Dialogues

리눅스[Linux] find, locate 본문

Linux

리눅스[Linux] find, locate

배디훈 2024. 6. 26. 04:46

파일 검색 및 명령어 사용법에 대해 알아보자

 

파일을 찾는 명령어로는 find와 locate가 있다.

 

먼저 find 명령어를 사용하는 방법에 대해 알아보자

find <검색할 디렉터리> <검색 조건> <액션>

 

 

find . -name file-1.txt -print

위 예에서는 <검색 조건>으로 -name file-1.txt를 지정하여 파일 이름으로 검색했다. 그리고 <액션>으로는 -print를 지정했다. 이는 파일의 경로를 출력하는 액션으로 find 명령어를 사용할 때 자주 사용된다. 액션에 아무런 인자도 지정하지 않으면 -print가 기본적으로 사용된다.

 

 

파일 두 개가 출력된 것을 확인할 수 있다. 이처럼 find 명령어는 지정한 디렉터리 트리를 내려가면서 검색 조건에 일치하는 파일을 검색한다. 따라서 디렉터리가 깊게 중첩되어 있어도 파일을 쉽게 찾을 수 있다.

 

 

find 명령어로 지정할 수 있는 검색 조건은 다양하다. 자주 사용되는 -name, -iname, -type을 알아보자

 

 

이름으로 찾기(-name, -iname)

-name은 대소문자를 구별하지만, -iname은 구별하지 않는다. -name으로 이름을 지정할 때 *나 ?를 사용한다면 반드시 '(작은따옴표)로 감싸줘야 한다. 그래야 배시의 경로 확장이 적용되지 않는다.

 

만약 작은따옴표로 감싸지 않으면 *가 배시에 의해 확장되어 find 명령어에 전달된다. 

 

find 뿐만 아니라 모든 명령어를 실행할 때 *와 같이 셸이 변환하는 문자(메타 문자)를 인자로 지정할 때는 주의를 기울여야 한다.

 

 

파일 형식으로 찾기(-type)

앞에서 살펴본 -name 옵션은 파일 이름으로 검색을 수행한다. 그리고 -type <파일 형식>을 지정하면 파일의 형식으로 검색한다. 지정할 수 있는 파일 형식이 많지만 자주 사용되는 다음 세 가지만 기억하면 된다.

지정 파일 형식
-type f 보통 파일
-type d 디렉터리
-type l 심볼릭 링크

 

 

-type d를 지정해서 디렉터리만 검색해 보았다.

 

 

검색 조건 여러 개 지정하기(-a)

-a를 사용하여 검색 조건을 여러 개 지정하면 해당 조건에 모두 일치하는 파일을 찾을 수 있다.

find . -type f -a -name '*.txt' -print

파일 형식이 일반 파일이고 이름이 .txt로 끝나는 파일을 찾는 예이다.

 

-a는 생략할 수 있다.

find . -type f -name '*.txt' -print

 

 

locate 명령어:데이터베이스에서 파일 찾기

locate는 경로의 일부를 지정하여 파일을 찾을 때 사용하는 명령어이다. 이때 전용 데이터베이스에서 검색하므로 그 자리에서 스캔해서 파일을 찾는 find보다 훨씬 빠르다. locate는 별도로 설치해야 하므로 먼저 명령어를 설치하는 방법부터 알아보자

 

 

설치하기

설치 여부를 확인하기 위해 --version 옵션을 지정하여 locate 명령어를 실행해보자.

 

 

명령어를 실행했을 때 버전이 출력된다면 이미 설치된 것이다. 하지만 버전이 출력되지 않았으므로 설치해보자

 

 

우분투를 쓰고 있기 때문에 apt-get 명령어로 설치해보자 참고로 locate 명령어는 mlocate라는 패키지에 포함되어 있다.

 

 

시간이 지난후 확인해 봤는데 잘 깔린듯 하다

 

 

yum install mlocate

CentOS에서 locate를 설치하는 방법이다.

 

 

이제 locate 명령어를 설치했으면 제일 먼저 파일 경로 목록을 데이터베이스에 등록해야 한다. 다음과 같이 슈퍼 사용자 권한으로 updatedb 명령어를 실행하면 데이터베이스가 만들어진다.

 

 

sudo updatedb

locate를 설치하면 updatedb가 주기적으로 실행되도록 설정된다.

 

 

파일 찾기

locate로 파일을 검색해보자

locate [옵션] <검색 패턴>

 

 

bash라는 문자열을 포함하는 파일을 검색해 보았다. 검색 결과가 아주 빠르게 반환된 것을 확인할 수 있다.

 

 

find는 실행할 때마다 디렉터리 트리를 탐색해서 많은 파일이 저장된 디스크를 검색할 때는 시간이 오래 걸린다. 하지만 locate는 사전에 만든 데이터베이스를 활용하기 때문에 검색 속도가 빠르다. find로 몇 분 걸릴 만한 검색도 locate로는 몇 초만에 끝난다. locate 명령어는 기본적으로 데이터베이스를 하루에 한 번 만들도록 설정된다. 따라서 다음과 같은 문제가 발생할 수 있다.

  • locate로 검색된 파일이 실제로는 디스크에 존재하지 않을 수 있다.
  • locate로 검색되지 않았지만 실제로는 존재할 수 있다.

즉, 방금 전에 만든 파일은 lcoate 명령어로 검색되지 않는다.

따라서 locate 명령어는 시스템에 원래부터 있었던 파일이나 며칠 전에 만든 파일을 빠르게 검색할 때 사용한다고 생각하면 된다.

 

 

다양한 검색 방법 지정하기

locate로 검색하는 방법을 조금 더 자세히 알아보자 검색 패턴은 find와 비슷하게 *로 와일드카드를 지정할 수 있다.

 

 

.sed로 끝나는 파일을 검색해 보았다.

 

 

검색할 때 대소문자를 구분하고 싶지 않은 경우에는 -i 혹은 --ignore-case 옵션을 지정한다.

 

 

notes뿐만 아니라 NOTES도 검색되는 것을 확인할 수 있다.

 

 

파일 이름만으로 검색할 때는 -b 혹은 --basename 옵션을 지정한다.

 

 

이름에 python이 포함된 파일을 검색해 보았다.

 

 

여러 검색 패턴 지정하기

검색 패턴 여러 개를 지저앟게 되면 OR 조건이 적용되어 지정한 패턴 중 하나라도 일치하는 파일이 출력된다.

 

 

docs 혹은 document를 포함하는 파일을 검색해 보았다.

 

 

여러 검색 패턴을 모두 만족하는 파일을 검색할 때 -A 혹은 -all 옵션을 지정하면 AND 조건으로 검색할 수 있다.

 

 

여러 검색 문자열을 검색 해 보았다.

 

 

 

end