Que tipo de banco de dados usa 'updatedb' e 'locate'?

25

O programa locate de findutils varre um ou mais bancos de dados de nomes de arquivos e exibe quaisquer correspondências. Isso pode ser usado como um comando find muito rápido se o arquivo estiver presente durante a última atualização do banco de dados de nomes de arquivos.

Existem muitos tipos de bancos de dados hoje em dia,

Então, que tipo de banco de dados é o updatedb update e locate use?

Obrigado.

    
por Tim 20.07.2017 / 14:05

3 respostas

28

As implementações de locate / updatedb geralmente usam bancos de dados específicos, adaptados aos seus requisitos, em vez de um mecanismo de banco de dados genérico. Você encontrará esses bancos de dados específicos documentados por cada implementação; por exemplo:

  • O GNU findutils 'está documentado em locatedb(5) e é bonito muito apenas uma lista de arquivos (com um algoritmo de compressão específico);
  • mlocate está documentado em mlocate.db(5) e também pode ser considerada uma lista de diretórios e arquivos (com metadados).
por 20.07.2017 / 14:15
13

Parece ser um arquivo simples de estruturas C, escritas / lidas usando o LibC do Gnu Macros OBSTÁCULOS

Veja as fontes

link

link

Você pode conseguir algo semelhante com

find / -xdev -type f -not -path \*\.git\/\* | gzip -9 > /tmp/files.gz
zgrep file_i_want /tmp/files.gz
    
por 20.07.2017 / 22:39
2

Tanto quanto eu sei por trás é Berkeley DB que é o banco de dados sem ferramentas chave / valor. Siga o link para mais informações. Extrato da Wikipedia:

Berkeley DB (BDB) is a software library intended to provide a high-performance embedded database for key/value data. Berkeley DB is written in C with API bindings for C++, C#, Java, Perl, PHP, Python, Ruby, Smalltalk, Tcl, and many other programming languages. BDB stores arbitrary key/data pairs as byte arrays, and supports multiple data items for a single key. Berkeley DB is not a relational database.

O local do banco de dados no RHEL / CentOS é /var/lib/mlocate/mlocate.db (não tenho certeza sobre as outras distribuições). O comando locate --statistics lhe dará informações sobre a localização e algumas estatísticas do banco de dados (exemplo):

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

Para o formato mlocate, aqui está a página head of man:

A mlocate database starts with a file header: 8 bytes for a magic number ("%bl0ck_qu0te%mlo- cate" like a C literal), 4 bytes for the configuration block size in big endian, 1 byte for file format version (0), 1 byte for the “require visibility” flag (0 or 1), 2 bytes padding, and a NUL-terminated path name of the root of the database.

The header is followed by a configuration block, included to ensure databases are not reused if some configuration changes could affect their contents. The size of the configuration block in bytes is stored in the file header. The configuration block is a sequence of variable assignments, ordered by variable name. Each vari- able assignment consists of a NUL-terminated variable name and an ordered list of NUL-terminated values. The value list is terminated by one more NUL character. The ordering used is defined by the strcmp () function.

    
por 20.07.2017 / 14:10