`updatedb`와 `locate`는 어떤 유형의 데이터베이스를 사용합니까?

`updatedb`와 `locate`는 어떤 유형의 데이터베이스를 사용합니까?

프로그램 locatefindutils하나 이상의 파일 이름 데이터베이스를 검색하고 일치하는 모든 항목을 표시합니다. find마지막 파일 이름 데이터베이스 업데이트 중에 파일이 존재하는 경우 매우 빠른 명령으로 사용할 수 있습니다.

요즘에는 많은 종류의 데이터베이스가 있습니다.

updatedb그렇다면 어떤 종류의 데이터베이스를 업데이트하고 사용해야 할까요 locate?

감사해요.

답변1

locate/의 구현은 updatedb일반적으로 범용 데이터베이스 엔진보다는 필요에 맞게 사용자 정의된 특정 데이터베이스를 사용합니다. 각 구현에 대해 문서화된 특정 데이터베이스를 찾을 수 있습니다. 예를 들면 다음과 같습니다.

  • GNU findutils'에 문서화되어 있습니다.locatedb(5), 이는 (특정 압축 알고리즘을 사용하는) 파일 목록일 뿐입니다.
  • mlocate에 기록됨mlocate.db(5), 디렉터리 및 파일 목록(메타데이터 포함)으로 볼 수도 있습니다.

답변2

Gnu LibC를 사용하여 작성/읽어지는 C 구조의 플랫 파일인 것 같습니다.장애물 매크로

소스보기

https://github.com/msekletar/mlocate/blob/master/src/updatedb.c#L720

https://github.com/msekletar/mlocate/blob/master/src/locate.c#L413

당신은 다음과 같은 것을 얻을 수 있습니다

find / -xdev -type f -not -path \*\.git\/\* | gzip -9 > /tmp/files.gz
zgrep file_i_want /tmp/files.gz

답변3

제가 아는 한 다음은버클리 데이터베이스이것은 키/값 데몬이 없는 데이터베이스입니다. 자세한 내용을 보려면 링크를 클릭하세요. 위키피디아에서 발췌:

Berkeley DB(BDB)는 키/값 데이터에 대한 고성능 내장형 데이터베이스를 제공하도록 설계된 소프트웨어 라이브러리입니다. Berkeley DB는 C++, C#, Java, Perl, PHP, Python, Ruby, Smalltalk, Tcl 및 기타 여러 프로그래밍 언어에 대한 API 바인딩을 사용하여 C로 작성되었습니다. BDB는 임의의 키/데이터 쌍을 바이트 배열로 저장하고 단일 키에 대해 여러 데이터 항목을 지원합니다. Berkeley DB는 관계형 데이터베이스가 아닙니다.

RHEL/CentOS의 데이터베이스 위치는 다음과 같습니다 /var/lib/mlocate/mlocate.db(다른 배포판에 대해서는 확실하지 않음). 이 명령은 locate --statistics데이터베이스 위치 및 일부 통계(예)에 대한 정보를 제공합니다.

Database /var/lib/mlocate/mlocate.db:
        16,375 directories
        242,457 files
        11,280,301 bytes in file names
        4,526,116 bytes used to store database

mlocate 형식의 경우 매뉴얼 페이지의 시작 부분은 다음과 같습니다.

mlocate 데이터베이스는 파일 헤더로 시작합니다. 매직 넘버(C 리터럴의 "\0mlocate")를 나타내는 8바이트, 빅엔디안 바이트 순서로 구성 블록 크기를 나타내는 4바이트, 파일 형식 버전을 나타내는 1바이트( 0 ), 가시성 필수 플래그(0 또는 1)용 1바이트, 패딩 2바이트, 데이터베이스 루트의 NUL 종료 경로 이름입니다.

헤더 다음에는 일부 구성 변경 사항이 내용에 영향을 미칠 수 있는 경우 데이터베이스가 재사용되지 않도록 하기 위해 포함된 구성 블록이 옵니다. 구성 블록의 크기(바이트)는 파일 헤더에 저장됩니다. 구성 블록은 변수 이름별로 정렬된 일련의 변수 할당입니다. 각 변수 할당은 NUL로 끝나는 변수 이름과 NUL로 끝나는 값의 순서가 지정된 목록으로 구성됩니다. 값 목록은 NUL 문자로 끝납니다. 사용되는 순서는 strcmp() 함수에 의해 정의됩니다.

관련 정보