태그 보관물: find

find

`updatedb`와`locate`는 어떤 종류의 데이터베이스를 사용합니까? findutils스캔 한 파일 이름과 표시 어떤 일치

locate의 프로그램 findutils스캔 한 파일 이름과 표시 어떤 일치 이상의 데이터베이스. find마지막 파일 이름 데이터베이스 업데이트 중에 파일이있는 경우 매우 빠른 명령 으로 사용할 수 있습니다 .

오늘날 많은 종류의 데이터베이스가 있습니다.

그렇다면 어떤 종류의 데이터베이스가 updatedb업데이트되고 locate사용됩니까?

감사.



답변

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

  • GNU findutils‘는에 문서화되어 locatedb(5)있으며 파일 목록 일뿐입니다 (특정 압축 알고리즘 사용).
  • mlocate의 문서화되어 mlocate.db(5)있으며 메타 데이터가있는 디렉토리 및 파일 목록으로 간주 될 수도 있습니다.

답변

Gnu LibC OBSTACKS 매크로를 사용하여 읽고 쓰는 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


답변

내가 아는 한 키 / 값 데몬이없는 데이터베이스 인 Berkeley DB 가 있습니다. 자세한 내용을 보려면 링크를 따르십시오. 위키 백과에서 추출 :

BDB (Berkeley DB)는 키 / 값 데이터를위한 고성능 임베디드 데이터베이스를 제공하기위한 소프트웨어 라이브러리입니다. Berkeley DB는 C ++, C #, Java, Perl, PHP, Python, Ruby, Smalltalk, Tcl 및 기타 여러 프로그래밍 언어에 대한 API 바인딩으로 C로 작성되었습니다. BDB는 임의의 키 / 데이터 쌍을 바이트 배열로 저장하고 단일 키에 대해 여러 데이터 항목을 지원합니다. 버클리 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 데이터베이스는 파일 헤더로 시작합니다. 매직 번호의 경우 8 바이트 (C 리터럴과 같은 “\ 0mlocate”), 빅 엔디안의 구성 블록 크기의 경우 4 바이트, 파일 형식 버전 (0)의 경우 1 바이트, 1 “가시성 요구”플래그 (0 또는 1)의 바이트, 2 바이트의 패딩 및 데이터베이스 루트의 NUL 종료 경로 이름.

일부 구성 변경 사항이 내용에 영향을 줄 수있는 경우 데이터베이스를 재사용하지 않도록 헤더에 구성 블록이옵니다. 구성 블록의 크기 (바이트)는 파일 헤더에 저장됩니다. 구성 블록은 변수 이름 순서대로 변수 할당 순서입니다. 각 변수 할당은 NUL 종료 변수 이름과 NUL 종료 값의 순서화 된 목록으로 구성됩니다. 값 목록은 하나 이상의 NUL 문자로 종료됩니다. 사용 된 순서는 strcmp () 함수로 정의됩니다.


답변